Visualización del gradiente del dipolo eléctrico con Matplotlib

PythonPythonBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a usar Matplotlib para crear un gráfico de gradiente de un dipolo eléctrico. Aprenderá a crear una triangulación, refinar datos y calcular el campo eléctrico. Finalmente, graficará la triangulación, los contornos de iso-potencial y el campo vectorial.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar algunos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) matplotlib(("Matplotlib")) -.-> matplotlib/SpecializedPlotsGroup(["Specialized Plots"]) python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") matplotlib/SpecializedPlotsGroup -.-> matplotlib/quiver_plots("Quiver Plots") subgraph Lab Skills python/booleans -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} python/lists -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} python/tuples -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} python/function_definition -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} python/build_in_functions -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} matplotlib/quiver_plots -.-> lab-49008{{"Visualización del gradiente del dipolo eléctrico con Matplotlib"}} end

Crear las coordenadas x e y de los puntos

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()

Explicación:

  • n_angles es el número de ángulos en un círculo.
  • n_radii es el número de círculos.
  • min_radius es el radio mínimo de los círculos.
  • radii es una matriz de radios.
  • angles es una matriz de ángulos.
  • x es una matriz de coordenadas x.
  • y es una matriz de coordenadas y.

Calcular el potencial eléctrico de un dipolo

def dipole_potential(x, y):
    """El potencial eléctrico del dipolo V, en la posición *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)

Explicación:

  • dipole_potential es una función que calcula el potencial eléctrico del dipolo.
  • V es una matriz de potenciales eléctricos del dipolo.

Crear la Triangulación

triang = Triangulation(x, y)

triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
                         y[triang.triangles].mean(axis=1))
                < min_radius)

Explicación:

  • Triangulation es una clase que crea una triangulación de Delaunay a partir de un conjunto de puntos.
  • triang es una instancia de la clase Triangulation.
  • triang.set_mask desmarca los triángulos no deseados.

Refinar datos

refiner = UniformTriRefiner(triang)
tri_refi, z_test_refi = refiner.refine_field(V, subdiv=3)

Explicación:

  • UniformTriRefiner es una clase que refina una triangulación para crear una representación gráfica más precisa.
  • refiner es una instancia de la clase UniformTriRefiner.
  • tri_refi y z_test_refi son, respectivamente, la triangulación refinada y los valores del potencial.

Calcular el campo eléctrico

tci = CubicTriInterpolator(triang, -V)

(Ex, Ey) = tci.gradient(triang.x, triang.y)
E_norm = np.sqrt(Ex**2 + Ey**2)

Explicación:

  • CubicTriInterpolator es una clase que interpola datos utilizando un polinomio cúbico.
  • tci es una instancia de la clase CubicTriInterpolator.
  • (Ex, Ey) es el campo eléctrico.
  • E_norm es el campo eléctrico normalizado.

Graficar la triangulación, los contornos de iso-potencial y el campo vectorial

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()

Explicación:

  • fig y ax son, respectivamente, los objetos de figura y ejes.
  • ax.set_aspect establece la relación de aspecto de los ejes.
  • ax.use_sticky_edges y ax.margins establecen los márgenes de los ejes.
  • ax.triplot grafica la triangulación.
  • ax.tricontour grafica los contornos de iso-potencial.
  • ax.quiver grafica el campo vectorial.
  • ax.set_title establece el título de la gráfica.

Resumen

En este laboratorio, aprendiste cómo usar Matplotlib para crear un gráfico de gradiente de un dipolo eléctrico. Aprendiste cómo crear una triangulación, refinar datos y calcular el campo eléctrico. Finalmente, graficaste la triangulación, los contornos de iso-potencial y el campo vectorial.