Visualisation du gradient d'un dipôle électrique avec Matplotlib

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à utiliser Matplotlib pour créer un tracé de gradient d'un dipôle électrique. Vous allez apprendre à créer une triangulation, à raffiner les données et à calculer le champ électrique. Enfin, vous tracerez la triangulation, les iso-contours du potentiel et le champ vectoriel.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.


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{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} python/lists -.-> lab-49008{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} python/tuples -.-> lab-49008{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} python/function_definition -.-> lab-49008{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} python/build_in_functions -.-> lab-49008{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} matplotlib/quiver_plots -.-> lab-49008{{"Visualisation du gradient d'un dipôle électrique avec Matplotlib"}} end

Créer les coordonnées x et y des points

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

Explication :

  • n_angles est le nombre d'angles dans un cercle.
  • n_radii est le nombre de cercles.
  • min_radius est le rayon minimum des cercles.
  • radii est un tableau de rayons.
  • angles est un tableau d'angles.
  • x est un tableau de coordonnées x.
  • y est un tableau de coordonnées y.

Calculer le potentiel électrique d'un dipôle

def dipole_potential(x, y):
    """Le potentiel du dipôle électrique V, à la 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)

Explication :

  • dipole_potential est une fonction qui calcule le potentiel du dipôle électrique.
  • V est un tableau de potentiels du dipôle électrique.

Créer la triangulation

triang = Triangulation(x, y)

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

Explication :

  • Triangulation est une classe qui crée une triangulation de Delaunay à partir d'un ensemble de points.
  • triang est une instance de la classe Triangulation.
  • triang.set_mask masque les triangles indésirables.

Affiner les données

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

Explication :

  • UniformTriRefiner est une classe qui affine une triangulation pour créer un tracé plus précis.
  • refiner est une instance de la classe UniformTriRefiner.
  • tri_refi et z_test_refi sont respectivement la triangulation affinée et les valeurs de potentiel.

Calculer le champ électrique

tci = CubicTriInterpolator(triang, -V)

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

Explication :

  • CubicTriInterpolator est une classe qui interpole des données en utilisant un polynôme cubique.
  • tci est une instance de la classe CubicTriInterpolator.
  • (Ex, Ey) est le champ électrique.
  • E_norm est le champ électrique normalisé.

Tracer la triangulation, les lignes d'iso-potentiel et le champ vectoriel

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

Explication :

  • fig et ax sont respectivement les objets figure et axes.
  • ax.set_aspect définit le rapport d'aspect des axes.
  • ax.use_sticky_edges et ax.margins définissent les marges des axes.
  • ax.triplot trace la triangulation.
  • ax.tricontour trace les lignes d'iso-potentiel.
  • ax.quiver trace le champ vectoriel.
  • ax.set_title définit le titre du tracé.

Sommaire

Dans ce laboratoire, vous avez appris à utiliser Matplotlib pour créer un tracé de gradient d'un dipôle électrique. Vous avez appris à créer une triangulation, à affiner des données et à calculer le champ électrique. Enfin, vous avez tracé la triangulation, les lignes d'iso-potentiel et le champ vectoriel.