Untitled
unknown
plain_text
2 years ago
3.1 kB
1
Indexable
Never
from cgitb import text from pkgutil import get_data from scipy.integrate import solve_ivp import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import figure from matplotlib.widgets import TextBox from matplotlib.widgets import Button ax = plt.figure().add_subplot(projection='3d') ax.set_xlabel('X-Koordinate') ax.set_ylabel('Y-Koordinate') ax.set_zlabel('Z-Koordinate') #Definierung der Anfangsposition #x0 = 3 #y0 = 3 z0 = 0 #Definieren der Anfangsgeschwindigkeit vx0 = 0.5 vy0 = 0.5 vz0 = 0.5 #Definieren der Anzahtl Zeitschritte t0 = 0 tf = 1000 #Definieren der Postion und stärke beider Magneten m1 = np.array([0, 4, 0]) r1 = np.array([0, 0, 0]) m2 = np.array([0, 4, 0]) r2 = np.array ([5, 0, 0]) #Einsetzen der Pyhsikalischen variabeln Ladung und Masse Q = 1 a = 1 #Funktion zur Berechnung der Bewegung des Teilchens und Defintion der Parameter, die im Plot angezeigt werden. def submit(KoordinateX, KoordinateY): print(KoordinateX, KoordinateY) def mag_bewegung(t, D, m1, m2, Q, r1, r2, a): #Definition von D x, y, z, vx, vy, vz = D #Festlegung des Ortes und der Geschwindigkeit als array. v = np.array([vx, vy, vz]) o = np.array([x, y, z]) #Berechnung des Abstandes vom der bewegten Ladung zu den beiden Magneten. ra1 = o - r1 ra2 = o - r2 #Berechnung des Betrags des Abstandes vom der bewegten Ladung zu den beiden Magneten. rar1 = np.sqrt(sum(ra1*ra1)) rar2 = np.sqrt(sum(ra2*ra2)) #Berechnung des Magnetflusses am Ort des Teilchens, welches von den beiden Stabmagneten ausgeht. B1 = (3 * (np.dot(m1, (ra1)/rar1))*((ra1)/rar1)-m1)/rar1*rar1*rar1 B2 = (3 * (np.dot(m2, (ra2)/rar2))*((ra2)/rar2)-m2)/rar2*rar2*rar2 #Berechnung von B B = B1 + B2 #Berechnung der Beschleunigung, die die bewegte Ladung erfährt. s = (Q*np.cross(v,B))/a #Aufspaltung des Array für Beschleunigung in x, y, z für die Differentialgleichung. sx = s[0] sy = s[1] sz = s[2] #Festlegung der Differentialgleichung fun = [vx, vy, vz, sx, sy, sz] return fun #Festlegung der Startbedingungen D0 = [float(KoordinateX), float(KoordinateY), z0, vx0, vy0, vz0] #Methode für Lösung des Startwertproblems mithilfe von RungaKutta des 5ten Grades NumSol = solve_ivp(mag_bewegung, [t0, tf], D0, method="RK45", args=(m1, m2, Q, r1, r2, a), atol=1e-10, rtol=1e-13) #Extraktion der Geschwindigkeit und des Ortes des Teilchens und der Zeit. aa, bb, cc, dd, ee, ff = NumSol.y t = NumSol.t print(dd,ee,ff) ax.plot(aa, bb, cc) plt.draw() xbox = plt.axes([0.2, 0.1, 0.8, 0.075]) ybox = plt.axes([0.2, 0, 0.8, 0.075]) KoordinateX = TextBox(xbox, 'X von Teilchen', initial=float(2.5)) KoordinateY = TextBox(ybox, 'Y von Teilchen', initial=float(0)) KoordinateY.on_submit(submit(KoordinateX.text, KoordinateY.text)) plt.show()