Visualisierung des elektrischen Dipolgradienten mit Matplotlib

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du mit Matplotlib einen Gradientenplot eines elektrischen Dipols erstellst. Du wirst lernen, wie du eine Triangulation erstellst, die Daten verfeinern und das elektrische Feld berechnen. Schließlich wirst du die Triangulation, die Potentialiso-Konturen und das Vektorfeld plotten.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn du bei der Lernphase Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.


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{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} python/lists -.-> lab-49008{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} python/tuples -.-> lab-49008{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} python/function_definition -.-> lab-49008{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} python/build_in_functions -.-> lab-49008{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} matplotlib/quiver_plots -.-> lab-49008{{"Visualisierung des elektrischen Dipolgradienten mit Matplotlib"}} end

Erstelle die x- und y-Koordinaten der Punkte

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

Erklärung:

  • n_angles ist die Anzahl der Winkel in einem Kreis.
  • n_radii ist die Anzahl der Kreise.
  • min_radius ist der minimale Radius der Kreise.
  • radii ist ein Array von Radien.
  • angles ist ein Array von Winkeln.
  • x ist ein Array von x-Koordinaten.
  • y ist ein Array von y-Koordinaten.

Berechne das elektrische Potential eines Dipols

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)

Erklärung:

  • dipole_potential ist eine Funktion, die das elektrische Dipolpotential berechnet.
  • V ist ein Array von elektrischen Dipolpotentialen.

Erstelle die Triangulation

triang = Triangulation(x, y)

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

Erklärung:

  • Triangulation ist eine Klasse, die eine Delaunay-Triangulation aus einem Punktmengen erstellt.
  • triang ist eine Instanz der Triangulation-Klasse.
  • triang.set_mask maskiert unerwünschte Dreiecke.

Verfeine Daten

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

Erklärung:

  • UniformTriRefiner ist eine Klasse, die eine Triangulation verfeinert, um einen genauereren Plot zu erstellen.
  • refiner ist eine Instanz der UniformTriRefiner-Klasse.
  • tri_refi und z_test_refi sind die verfeinerte Triangulation und die Potentialwerte respective.

Berechne das elektrische Feld

tci = CubicTriInterpolator(triang, -V)

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

Erklärung:

  • CubicTriInterpolator ist eine Klasse, die Daten mithilfe eines kubischen Polynoms interpoliert.
  • tci ist eine Instanz der CubicTriInterpolator-Klasse.
  • (Ex, Ey) ist das elektrische Feld.
  • E_norm ist das normalisierte elektrische Feld.

Zeichne die Triangulation, die Potential-Isolinken und das Vektorfeld

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

Erklärung:

  • fig und ax sind die Figur- und Achsenobjekte respective.
  • ax.set_aspect setzt das Seitenverhältnis der Achsen.
  • ax.use_sticky_edges und ax.margins setzen die Ränder der Achsen.
  • ax.triplot zeichnet die Triangulation.
  • ax.tricontour zeichnet die Potential-Isolinken.
  • ax.quiver zeichnet das Vektorfeld.
  • ax.set_title setzt den Titel des Plots.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Matplotlib verwenden, um einen Gradientenplot eines elektrischen Dipols zu erstellen. Sie haben gelernt, wie Sie eine Triangulation erstellen, Daten verfeinern und das elektrische Feld berechnen. Schließlich haben Sie die Triangulation, die Potential-Isolinken und das Vektorfeld geplottet.