Untitled

mail@pastecode.io avatar
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()