Lösen von Bewegungsgleichungen in Python (odeint)

Dieser Beitrag

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.

Ich möchte eine Bewegungsgleichung mit Python lösen

Was ist Leben

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.

Die Bewegungsgleichung, die Sie dieses Mal lösen möchten

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.

Code

Gesamtdurchfluss

Der Code-Fluss ist wie folgt

  1. Laden Sie die gewünschte Bibliothek
  2. Beschreiben Sie die Differentialgleichung, die Sie lösen möchten
  3. Entscheiden Sie die Anfangsbedingungen und bitten Sie odeint, die Gleichung zu lösen.
  4. Zeichnen Sie das Ergebnis

Vorbereitung

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

Schreiben Sie eine Differentialgleichung

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 

Entscheiden Sie die Anfangsbedingungen und lassen Sie sie die Differentialgleichung lösen

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))

Zeichnen Sie das Ergebnis in ein Diagramm

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.

Unknown.png

Der nächste ist

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

Lösen von Bewegungsgleichungen in Python (odeint)
Doppelte Pendelbewegungsgleichung in Python
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Lassen Sie das Gleichungsdiagramm der linearen Funktion in Python zeichnen
Überprüfen Sie das Verhalten des Zerstörers in Python
Lassen Sie Python die Bewegungsgleichung von Euler Lagrange berechnen
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen zum Ausführen von NoxPlayer in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Sprungbewegung in Python 3
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
der Zen von Python
Kopieren Sie die Liste in Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Ausgabe in Form eines Python-Arrays
Lösung mathematischer Modelle von Epidemien von Infektionskrankheiten in Python
So ermitteln Sie die Anzahl der Stellen in Python
○○ Probleme im Fachbereich Mathematik mit Optimierung lösen
[Python] Ruft die Liste der im Modul definierten Klassen ab
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Verwenden wir die offenen Daten von "Mamebus" in Python
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Auf dem Weg zum Ruhestand von Python2
Finde Fehler in Python
Implementierung der schnellen Sortierung in Python
Über die Funktionen von Python
Die Kraft der Pandas: Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Lassen Sie uns das Ausführungsergebnis des Programms mit C ++, Java, Python messen.
[Memo] Das Geheimnis kumulativer Zuweisungsanweisungen in Python-Funktionen
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Bubble Sort)
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python