Lösen Sie kinetische Gleichungen mit einer Bibliothek namens odeint in Python (um genau zu sein scipy). Ich verwende Python3.6.3, das ich in Anaconda eingefügt habe.
Es löst kinetische Gleichungen (Differentialgleichungen zweiter Ordnung), kann aber auch auf andere Differentialgleichungen wie Differentialgleichungen erster Ordnung angewendet werden.
Es gibt Zeiten im Leben, in denen Sie eine einfache Bewegungsgleichung lösen möchten. Insbesondere gibt es Zeiten, in denen Sie den Übungszustand lösen und darstellen möchten. Was ist zu dieser Zeit zu tun?
Dieses Mal soll das Plotten mit der Python-Bibliothek "odeint" Spaß machen.
odeint
Sieht aus wie Oden es. Ich denke, es ist ODE-Integral. ODE = gewöhnliche Differentialgleichung
Offizielle Referenz https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html
Es gibt auch eine Bibliothek namens Ode https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html
Bei der Prüfung scheint es ein neueres Paket "lösen_ivp" zu geben, das empfohlen wird. Ich möchte eines Tages einen Artikel darüber schreiben. https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html#scipy.integrate.solve_ivp
Übrigens haben Odeint und die anderen beiden (Ode, Solve_ivp) unterschiedliche Reihenfolge der Argumente. Achten Sie darauf, nicht verwirrt zu werden.
Jede kinetische Gleichung reicht aus, aber dieses Mal werde ich einen einfachen Wurf lösen.
m\ddot y=-rv+mg
Es ist notwendig, die Differentialgleichung zweiter Ordnung mit Odeint insbesondere in zwei Differentiale erster Ordnung umzuwandeln. Zum Beispiel in diesem Fall
\dot y=v \\
m\dot v=-rv+mg
Wird tatsächlich durch Odeint gelöst.
Der Code-Fluss ist wie folgt
Stellen Sie zunächst verschiedene Bibliotheken ein.
import
import numpy as np #numpy
from scipy.integrate import odeint #odeint
import matplotlib.pyplot as plt #to draw graphs
Definieren Sie dann die Differentialgleichung. Der Luftwiderstand r und die Masse m des Qualitätspunktes werden im nächsten Schritt definiert. Da die Schwerkraftkonstante g nicht verändert wird, wird sie diesmal hier definiert.
function
def func(s, t, r, m):
y, v = s #s ist ein Paar von Variablen y und v
g=9.80665 #m/s^2
dsdt = [v, (-r*v-m*g)/m]
return dsdt
Bestimmen Sie den Luftwiderstand r und die Masse m, bestimmen Sie die Anfangsbedingungen und lösen Sie die Differentialgleichung. Beachten Sie einen Punkt über das letzte Argument von sol = odeint (func, y0, t, args = (r, m)). Sie übergeben eine Liste wie args = (r, m). Wenn Sie also ein Argument haben, müssen Sie etwas wie args = (r,) tun. Diesmal ist es kein Problem, aber seien Sie vorsichtig, wenn Sie andere kinetische Gleichungen lösen.
solve
r=12
m=100
y0 = [0,10]#Mit der Anfangsgeschwindigkeit 10 von Position 0 nach oben werfen
t = np.linspace(0, 7, 201)#Berechnen Sie in Schritten von 201 Schritten von 0 bis 7
sol = odeint(func, y0, t, args=(r,m))
Lassen Sie uns das Ergebnis visualisieren.
visualize
plt.plot(t, sol[:, 0], 'b', label='y')#über y Handlung
plt.plot(t, sol[:, 1], 'g', label='v')#über v Handlung
plt.legend(loc='best')#Fügen Sie eine Legende hinzu
plt.xlabel('t')
plt.grid()#Fügen Sie ein Raster hinzu
plt.show()
Dann sollten Sie diese Zahl bekommen.
Zunächst ist es eine gute Praxis, t von 0 auf 100 zu ändern, um die Abschlussgeschwindigkeit zu überprüfen, oder das Problem zu lösen, wenn es diagonal geworfen wird, um den Code zu verstehen.
Recommended Posts