Feldlinien eines Magnetfelds plotten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
SIto
User
Beiträge: 8
Registriert: Donnerstag 13. April 2017, 15:36

Hallo zusammen.

Ich soll die Feldlinien des Magnetfelds einer Helmholzspule in der xy-Ebene plotten, wobei die z-Achse gerade durch das Zentrum der beiden Spulen geht. Da ich noch nie Feldlinien (oder ähnliches) geplottet habe fehlt mir hier etwas der Ansatz.

Mein Code bis jetzt sieht folgendermassen aus:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np

mu = 1.2566e-10
R   = 0.2
I    = 0.3

#B-Feld Spule 1
def B(r):
    return mu * I * R**2/((R**2+(r-R/2)**2)**(3/2))

#B-Feld Spule 2    
def B_1(z):
    return mu * I * R**2/((R**2+(r+R/2)**2)**(3/2))

X = np.linspace(-1, 1)
Y = np.linspace(-1, 1)

r=np.meshgrid(X, Y)

Bx = B(r)
By = B_1(r)

plt.figure(figsize=(8, 8))
plt.streamplot(X, Y, Bx, By)
plt.margins(0, 0)
Mein erster Versuch scheint aber nicht wirklich zu funktionieren. Wäre also für ein paar Tipps, gerne auch Links zum nachlesen wie man so etwas am besten macht, sehr dankbar.

Gruss SIto
Zuletzt geändert von Anonymous am Donnerstag 27. April 2017, 21:26, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Funktion B_1(z):
z wird in der Funktion nicht benutzt, stattdessen wird das nicht definierte r benutzt.

Ersetze Zeile 19 durch

Code: Alles auswählen

x2,y2=np.meshgrid(X, Y)
r = np.sqrt(x2**2 + y2**2)
a fool with a tool is still a fool, www.magben.de, YouTube
SIto
User
Beiträge: 8
Registriert: Donnerstag 13. April 2017, 15:36

Vielen Dank für den Tipp, der Code läuft jetzt immerhin schon mal, aber ich bin mir nicht wirklich sicher ob er auch wirklich das abbildet was isch gerne hätte.^^

Der Plot sieht momentan so aus:
Bild
aber ich bin mir ziemlich sicher, dass es eigentlich eher so aussehen müsste:
Bild

Leider sehe ich nicht wirklich was ich genau falsch mache, wäre also froh wenn sich nochmal jemand meinen Code ansehen könnte...

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np

mu = 1.2566e-10
R   = 0.2
I    = 0.3

def B(r):
    return mu * I * R**2/((R**2+(r-R/2)**2)**(3/2))
    
def B_1(r):
    return mu * I * R**2/((R**2+(r+R/2)**2)**(3/2))

X = np.linspace(-5, 5)
Y = np.linspace(-5, 5)

x2,y2=np.meshgrid(X, Y)
r = np.sqrt(x2**2 + y2**2)

Bx = B(r)
By = B_1(r)

plt.figure(figsize=(8, 8))
plt.streamplot(X, Y, Bx, By)
plt.margins(0, 0)
plt.show()
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Das Magnetfeld ist ein Vektorfeld. In den Funktionen B(r) und B_l(r) berechnest Du jedoch zwei skalare Felder, nämlich jeweils die B_x Komponente
Bild
(https://de.wikipedia.org/wiki/Helmholtz-Spule)
von einer Spule bei x_0=R/2 und einer bei x_0=-R/2.

Das B_x Feld der einen Spule benutzt Du als x-Komponente für das Vektorfeld und das B_x Feld der anderen Spule benutzt Du als y-Komponente.

Stattdessen müsstest Du die beiden B_x Felder addieren. Außerdem fehlt die Funktion für die B_y Komponente.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten