Livro base

http://www-personal.umich.edu/~mejn/computational-physics/

Programando em Python

O primeiro passo é aprender a programar em python

Python é uma linguagem de alto nível, poderosa e muito abrangente

vamos nos limitar aos aspectos de computação em física

modulos de python muito específicos, mesmo para física não serão abordados

existe vasta documentação online

Começando

um programa em python é como outro qualquer, uma lista de instruções

precisamos saber como e onde passar essas instruções

Instalação

python pode ser obtido de várias formas, basta um Google para verificar

linux em geral já vem com uma versão básica instalada

duas vertentes principais 2.7 e 3.0

funciona com um conjunto de módulos. Muitos módulos existem: Scipy, Astropy, Pandas etc

Existem repositórios que facilitam manter versões atualizadas

Neste curso vamos usar o Anaconda: https://www.continuum.io/downloads

Ele contém todos os principais pacotes científicos do python

é recomendável que se deixe esta instalação como a distribuição principal de python em sua máquina, especialmente em linux

Ambiente de desenvolvimento

ambiente onde faremos boa parte da escrita e execução dos programas

aqui usaremos o Spyder: https://github.com/spyder-ide/spyder

este ambiente é instalado automaticamente com o anaconda

Para testar rapidamente o Spyder digite o seguinte:


In [1]:
print "Hello World!"


Hello World!

In [2]:
x=1

# vendo os valores de x
print (x)
print x
x


1
1
Out[2]:
1

note que o ambinete salva um arquivo com terminação .py que é o padrão da linguagem python

um programa .py pode ser executado em linha de comando. Por exemplo, caso voce tenha um programa chamado teste.py na linha de comando basta fazer "python teste.py" e ele será executado

Algumas capacidades do Python

Nos exemplos abaixo mostramos algumas capacidades do Python acoplado ao Jupyter notebook.

-> dando dois cliques podemos editar o que esta nessa célula.

aqui podemos editar texto usando latex:

$c = \sqrt{a^2 + b^2}$


In [3]:
%%latex
$c = \sqrt{a^2 + b^2}$


$c = \sqrt{a^2 + b^2}$

Podemos fazer gráficos complexos de maneira simples


In [5]:
#esse comando inclui os plots na pagina do notebook

%matplotlib inline 

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('Um grafico simples')
plt.show()


Gráficos de pontos com legendas


In [7]:
from matplotlib.pyplot import figure, show, legend, ylabel
 
# cria uma figura 
fig1 = figure()
 
# adiciona um plano e plota os dados
ax1 = fig1.add_subplot(111)
line1, = ax1.plot([1,3,4,5,2], 'o-',label='line1')
ylabel("Dados eixo Y (esquerda)")
 
#agora, o segundo plano que compartilha o eixo x com a anterior
ax2 = fig1.add_subplot(111, sharex=ax1, frameon=False)
line2, = ax2.plot([10,40,20,30,50], 'xr-',label='line2')
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position("right")
ylabel("Dados eixo Y (direita)")
 
# for the legend, remember that we used two different axes so, we need 
# to build the legend manually
legend([line1, (line2, line2)], ["A", "B"])
show()



In [7]:
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radiuses

plt.scatter(x, y, s=area, alpha=0.5, c=area)
plt.title('Um grafico XY simples')
plt.show()


podemos inserir vídeos


In [8]:
from IPython.display import YouTubeVideo
YouTubeVideo("oYTs9HwFGbY")


Out[8]:

In [1]:
import numpy as np
from mayavi import mlab
x, y, z = np.ogrid[-10:10:50j, -10:10:50j, -10:10:50j]
s = np.sin(x*y*z)/(x*y*z)
src = mlab.pipeline.scalar_field(s)
mlab.pipeline.iso_surface(src, contours=[s.min()+0.1*s.ptp(), ], opacity=0.3)
mlab.pipeline.iso_surface(src, contours=[s.max()-0.1*s.ptp(), ],)

mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
                            plane_orientation='x_axes',
                            slice_index=20)

mlab.show()


********************************************************************************
WARNING: Imported VTK version (7.0) does not match the one used
         to build the TVTK classes (6.3). This may cause problems.
         Please rebuild TVTK.
********************************************************************************


In [ ]: