Eine Geschichte über die Berechnung der Geschwindigkeit eines kleinen Balls, der mit Python und Sympy beim Luftwiderstand fällt

Einführung

Ich erinnere mich, wie ich mit Mathematica gespielt habe, als ich in einem Universitätslabor lag. Im Laufe der Jahrzehnte seitdem sind in meinem Forschungsleben viele Male Differentialgleichungen vor mir aufgetaucht, und ich wünschte, ich hätte eine mathematische Verarbeitungssoftware, aber wenn es um numerische Integration ging. Ich bin ein alter Ingenieur, der mit der Korruption gerade das Ende des Kalenders erreicht hat. Schön dich heute Abend zu treffen. Kürzlich stellte mich jedoch ein Mathematiker namens Mr. Tanaka, ein perverser Begleiter, Sympy vor, und während ich es benutzte, wurden meine Erinnerungen an meine Jugend wiederbelebt, und ich ging zu Tobita Shinchi. Ich beschloss, das Problem zu lösen.

Umgebung

Windows10 pro Anaconda + Python 3.7.6 (64bit) + Sympy 1.5.1 Visual Studio Code 1.44.2

Grundformel

Als ich in der High School war, lernte ein alter Ingenieur die Kraft von Differentialgleichungen aus dem Problem des Sturzes während des Luftwiderstands.

Ein kleiner Ball mit einer Masse von $ m $ (kg) fällt senkrecht nach unten. Die Kügelchen beginnen mit der Anfangsgeschwindigkeit von $ 0 $ zum Zeitpunkt $ 0 $ (s) zu fallen, und während des Fallens haben die Kügelchen einen Luftwiderstand $ kv $ (N), der proportional zur Geschwindigkeit $ v $ (m / s) ist. Finden Sie die Geschwindigkeit der Kügelchen zum Zeitpunkt $ t $ (s) als entgegengesetzt zu. </ b>

Vor langer Zeit gab es in Sudai einen großen Physiklehrer namens Mr. Sakuma, der die Differentialgleichungen in einem kurzen Brief schrieb. Als ich im ersten Jahr der High School war und morgens tauchte, flirtete ich einen Moment. Lassen Sie uns jedoch zuerst eine kinetische Gleichung formulieren, während wir stolz auf das Saugen von Moos sind, da die Tage des Kopierens in ein Notizbuch irgendwie weitergehen und es im naturwissenschaftlichen Unterricht 1 sonnig und aktiv ist. Die Geschwindigkeit des kleinen Balls zum Zeitpunkt $ t $ (s) sei $ v (t) $ (m / s).

Bewegungsgleichung </ b>

m \\frac{dv\\left(t \\right)}{d t} {} = mg-kv{\\left(t \\right)}

Löse das $v{\\left(t \\right)} = \\frac{mg}{k} + \\frac{e^{\\frac{C_{1} k}{m}} }{k}e^{- \\frac{k t}{m}}$ Konstante $A=\\frac{e^{\\frac{C_{1} k}{m}} }{k}$ Zusammenfassen $v{\\left(t \\right)} = \\frac{mg}{k} + A e^{- \\frac{k t}{m}}$ Es wird eine allgemeine Lösung. Wenn v {\ left (t \ right)} = 0 $ unter der Anfangsbedingung $ t = 0 (s) eingegeben wird, um $ A $ zu erhalten, $A=-\\frac{mg}{k}$ Und $v{\\left(t \\right)} = \\frac{mg}{k} (1- e^{- \\frac{k t}{m}})$ Kann erhalten werden. Geschwindigkeit $ v {\ left (t \ right)} $ t → \ infty $ limit, dh die Beendigungsgeschwindigkeit $\lim_{t \to \infty} v(t)=\\frac{mg}{k}$ Es wird sein.

Lösen Sie dies mit Sympy und zeichnen Sie ein Diagramm

python


#%%
import sympy as sym
from IPython.display import Math, display
from sympy.solvers import ode
from sympy import oo
import matplotlib.pyplot as plt

#Variablen definieren
t, v, k, m, g = sym.symbols("t v k m g")
v = sym.Function('v')

#Bewegungsgleichung (normale Differentialgleichung)
eq = sym.Eq(m * v(t).diff(t,1) - m * g + k * v(t), 0)

#Allgemeine Lösung
ans = sym.expand(sym.dsolve(eq))
display(Math(f"Allgemeine Lösung: {sym.latex(ans)}"))

#Spezielle Lösung(Zeichenausdruck)
ans2 = sym.expand(sym.dsolve(eq, ics={v(0):0}))
display(Math(f"Spezielle Lösung(Zeichenausdruck): {sym.latex(ans2)}"))

#Sonderlösung (Zahlenwert)
m1 = 0.4
k1 = 0.2
g1 = 9.8
eq2 = eq.subs([(m, m1), (k, k1), (g, g1)])
ans3 = sym.dsolve(eq2, ics={v(0):0})
p1 = sym.plot(ans3.rhs, (t, 0, 10), show=False) #rhs ist die rechte Seite
display(Math(f"Spezielle Lösung(m={m1}, k={k1}, g={g1}): {sym.latex(ans3)}"))

#Kündigungsgeschwindigkeit
voo = sym.limit(ans3.rhs, t, oo)
display(Math(r"Kündigungsgeschwindigkeit:\lim_{t \to \infty} v(t)" \
    f"={voo:.2f}"))
p2 = sym.plot(voo, (t, 0, 10), show=False)
p1.extend(p2)
p1[1].line_color = "0.8"
p1.show()
fig = p1._backend.fig
fig.legend([f"f(t)={ans3.rhs}", f"f(t)={voo:.1f}"], loc='center')
fig

Wenn Sie dies tun, image.png image.png

Das Gute an Sympy ist, dass Sie nach einer speziellen Lösung fragen können. Wenn Sie die Formel der Speziallösung an sympy.plot übergeben, können Sie außerdem ein Diagramm zeichnen. Sie können auch eine enge Linie für das Limit ziehen.

Recommended Posts