Introdução
Neste laboratório, você aprenderá como usar o Matplotlib para criar um gráfico de gradiente de um dipolo elétrico. Você aprenderá como criar uma triangulação, refinar dados e calcular o campo elétrico. Finalmente, você plotará a triangulação, as iso-curvas de potencial e o campo vetorial.
Dicas para a VM
Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.
Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.
Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.
Criar as coordenadas x e y dos pontos
n_angles = 30
n_radii = 10
min_radius = 0.2
radii = np.linspace(min_radius, 0.95, n_radii)
angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi / n_angles
x = (radii*np.cos(angles)).flatten()
y = (radii*np.sin(angles)).flatten()
Explicação:
n_anglesé o número de ângulos em um círculo.n_radiié o número de círculos.min_radiusé o raio mínimo dos círculos.radiié um array de raios.anglesé um array de ângulos.xé um array de coordenadas x.yé um array de coordenadas y.
Calcular o potencial elétrico de um dipolo
def dipole_potential(x, y):
"""The electric dipole potential V, at position *x*, *y*."""
r_sq = x**2 + y**2
theta = np.arctan2(y, x)
z = np.cos(theta)/r_sq
return (np.max(z) - z) / (np.max(z) - np.min(z))
V = dipole_potential(x, y)
Explicação:
dipole_potentialé uma função que calcula o potencial elétrico do dipolo.Vé um array de potenciais elétricos do dipolo.
Criar a Triangulação
triang = Triangulation(x, y)
triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
y[triang.triangles].mean(axis=1))
< min_radius)
Explicação:
Triangulationé uma classe que cria uma triangulação de Delaunay a partir de um conjunto de pontos.triangé uma instância da classeTriangulation.triang.set_maskmascara os triângulos indesejados.
Refinar os dados
refiner = UniformTriRefiner(triang)
tri_refi, z_test_refi = refiner.refine_field(V, subdiv=3)
Explicação:
UniformTriRefineré uma classe que refina uma triangulação para criar um gráfico mais preciso.refineré uma instância da classeUniformTriRefiner.tri_refiez_test_refisão, respectivamente, a triangulação refinada e os valores de potencial.
Calcular o campo elétrico
tci = CubicTriInterpolator(triang, -V)
(Ex, Ey) = tci.gradient(triang.x, triang.y)
E_norm = np.sqrt(Ex**2 + Ey**2)
Explicação:
CubicTriInterpolatoré uma classe que interpola dados usando um polinômio cúbico.tcié uma instância da classeCubicTriInterpolator.(Ex, Ey)é o campo elétrico.E_normé o campo elétrico normalizado.
Plotar a triangulação, as iso-curvas de potencial e o campo vetorial
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.use_sticky_edges = False
ax.margins(0.07)
ax.triplot(triang, color='0.8')
levels = np.arange(0., 1., 0.01)
ax.tricontour(tri_refi, z_test_refi, levels=levels, cmap='hot',
linewidths=[2.0, 1.0, 1.0, 1.0])
ax.quiver(triang.x, triang.y, Ex/E_norm, Ey/E_norm,
units='xy', scale=10., zorder=3, color='blue',
width=0.007, headwidth=3., headlength=4.)
ax.set_title('Gradient Plot: Electrical Dipole')
plt.show()
Explicação:
figeaxsão, respectivamente, os objetos de figura e eixos.ax.set_aspectdefine a proporção do aspecto dos eixos.ax.use_sticky_edgeseax.marginsdefinem as margens dos eixos.ax.triplotplota a triangulação.ax.tricontourplota as iso-curvas de potencial.ax.quiverplota o campo vetorial.ax.set_titledefine o título do gráfico.
Resumo
Neste laboratório, você aprendeu como usar Matplotlib para criar um gráfico de gradiente de um dipolo elétrico. Você aprendeu como criar uma triangulação, refinar dados e calcular o campo elétrico. Finalmente, você plotou a triangulação, as iso-curvas de potencial e o campo vetorial.