Introdução ao numpy

Breve tutorial de Numpy:

Destaques:

  • array
  • arange
  • linspace
  • funções trigonométricas

Exemplo de operações com arrays:

a = np.array([1, 2, 3, 4])
print(a)
print(a+1)
print(2**a)
b = np.linspace(0,1,10)
print(b)
print(b+1)
print(2**b)

Introdução ao Matplotlib

Breve tutorial Matplotlib:

  • Criação gráficos: pontos e linhas (scatter e lines)
  • Salvar arquivo de imagem

Exemplo:

import matplotlib.pyplot as plt

def cubo(w):                            
    return w*w*w   

x = np.linspace(0, 3, 20)
y = cubo(x)

plt.plot(x, y)       # gráfico de linha
plt.plot(x, y, 'o')  # gráfico com pontos
plt.show()           # mostra o gráfico

Resultado:

figure_1.png

Exemplos de gráficos

Ver exemplos site de Evy Salcedo contendo

  • Carregando dados de arquivo no formato duas colunas - x,y
  • Aterando atributos do gráfico: cores, marcadores, estilos, nome dos eixos, escalas
  • Barras de incerteza
  • Ajustes de curvas utilizando o numpy

Dois gráficos lineares

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


t = [0.167, 0.2, 0.234, 0.267, 0.3, 0.334, 0.367, 0.4, 0.434]
x = [21.8, 20.7, 19.4, 18.3, 17.2, 16.0, 14.7, 13.6, 12.4 ]
theta = [151, 144, 138, 131, 124, 118, 112, 105, 99]


fig, ax = plt.subplots()
ax.scatter(t, x, color="red", label=u"Posição" )
ax.set_xlabel('tempo [s]')
ax.set_ylabel(u'posição [cm]')
plt.title(u'Posição da fita vermelha')
plt.legend()


fig, ax2 = plt.subplots()
ax2.scatter(t, theta, color="gray", label=u"Ângulo" )
ax2.set_xlabel('tempo [s]')
ax2.set_ylabel(u'Angulo [⁰]')
plt.title(u'Ângulo do marcador amarelo')
plt.legend()

plt.show()

ti = 1
v = []
omega = []
t_med = []
C = []
soma_C = 0
print ("t[ti-1]         v[ti-1]        omega[ti-1]        C[ti-1]" )
while (ti < len(t)-1):
    v_inst = (x[ti+1]-x[ti-1])/(t[ti+1]-t[ti-1])
    v.append(v_inst)
    omega_inst = (theta[ti+1]-theta[ti-1])/(t[ti+1]-t[ti-1])*math.pi/180.
    omega.append(omega_inst)
    t_med.append((t[ti+1]+t[ti-1])/2)
    C_inst = v_inst/omega_inst
    C.append(C_inst)
    soma_C+=C_inst
    print (t_med[ti-1], v[ti-1], omega[ti-1], C[ti-1])
    ti+=1
print ("C_médio = " + str(soma_C/len(C)))

Uma hélice em 3D

Trajetória de uma partícula carregada sob o efeito de um campo magnético uniforme.

# coding: utf-8

# Calculate and plot charged particle trajectory in homogeneous magnetic field
# Eq. 1 from Nuclear Instruments and Methods in Physics Research A 566 (2006) 687–698
# dx.doi.org/10.1016/j.nima.2006.07.032

import math
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


def M (M0_, gamma_, Q_, theta_, H_, T0_, alpha_, N0_):
    a = gamma_ / Q_ * (theta_-math.sin(theta_))
    c = math.sin(theta_) / Q_
    d = alpha_ / Q_ * (1.0-math.cos(theta_))
    return M0_ + a*H_ + c*T0_ + d*N0_

px = 1
py = 0
pz = 2
p0 = np.array([px, py, pz])
pt = math.sqrt(px*px+py*py)
Field = 0.5
B =  Field*0.3
q = 1.0
M0 = np.array([0,0,0])
Bvecfield = np.array([0,0,1])
H = Bvecfield/np.linalg.norm(Bvecfield)
p = np.linalg.norm(p0)
T0 = p0/p
N0 = np.cross(H,T0)
alpha = np.linalg.norm(N0)
N0 = N0/alpha
gamma = np.dot(H,T0)
print(gamma)
Q = -B*q/p
print("p0 = "+str(p0))
print("p = "+str(p))
print("T0 = "+str(T0))
print("H = "+str(H))

print("N0 = "+str(N0))

s_max=2.0*math.pi*p/B
n_turns=1
x = y = z = np.array([])
for s in np.arange(0,n_turns*s_max,.1):
    theta = Q*s
    position = M(M0, gamma, Q, theta, H, T0, alpha, N0)
    x = np.append(x, position[0])
    y = np.append(y, position[1])
    z = np.append(z, position[2])

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)

plt.show()

Exercícios

  1. Elabore um programa que imprime na tela o valor do cosseno do ângulo em intervalos de 0.1 radianos.
  2. Elabore um programa apresente o gráfico do cosseno do ângulo no intervalo de 0 a 4*pi. Salve a imagem em .svg e carregue no Inkscape
    • Dica: Para utilizar o modo interativo dos gráficos do matplotlib utilize o Python no terminal (em oposição ao uso de um Notebook). Desta maneira o gráfico será mostrado em uma janela contendo os seguintes botões de controle: matplotlib_buttons.png
    • Dica 2: Tendo importado o matplotplib como plt no seu programa, poderá utilizar a função savefig, sem necessitar utilizar a interface gráfica:
      • plt.savefig(“cosseno_de_theta.svg”)