Ich werde erklären, wie man gewöhnliche Differentialgleichungen mit Python löst.
OS / Python module version Das verwendete Betriebssystem ist Windows 10. Die Python-Modulversion lautet:
console
> python --version
Python 3.4.3
> pip freeze
matplotlib==1.4.3
numpy==1.13.1+mkl
pandas==0.16.2
pyparsing==2.0.3
python-dateutil==2.4.2
pytz==2015.4
scipy==0.19.1
six==1.9.0
sample code Lösen Sie die folgende Differentialgleichung.
y'' = -y \\
Führen Sie die Variable z ein. Durch Erhöhen der Variablen wird eine Differentialgleichung zweiter Ordnung als simultane Gleichung zweier Differentialgleichungen erster Ordnung betrachtet.
y' = z \\
z' = -y \\
Die Anfangsbedingungen sind $ t = 0, y_0 = 1, z_0 = 0 $. Die Lösung ist $ cos (t) $. Da die richtige Lösung leicht erhalten werden kann, kann der Fehler bewertet werden.
Das folgende ist ein Python-Programm, das Differentialgleichungen löst. Lösen Sie mit scipy.integrate.ode.
test.py
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import ode
def f(t, v): # t, y:v[0], y'=z:v[1]
return [v[1], -v[0]] # y':return[0] y''=z':return[1]
v0 = [1.0, 0.0] # y0, y'0=z0
solver = ode(f)
solver.set_integrator(name="dop853")
solver.set_initial_value(v0)
tw = 10.0*2.0*np.pi
dt = tw / 1000;
t = 0.0
ts = []
ys = []
while solver.t < tw:
solver.integrate(solver.t+dt)
ts += [solver.t]
ys += [solver.y[0]]
plt.figure(0)
plt.plot(ts, ys)
plt.figure(1)
plt.plot(ts, np.cos(ts)-ys)
plt.show()
print(np.max(np.cos(ts)-ys))
Ich werde das machen.
console
> python .\test.py
Bei der Ausführung wird das Diagramm angezeigt.
Das folgende Diagramm ist die Lösung der Differentialgleichung. Der Graph von cos (t) wird für 10 Zyklen angezeigt.
Das folgende Diagramm zeigt den Fehler. Wenn t zunimmt, nimmt auch der Fehler zu. Der Fehler liegt auf der Skala von $ 10 ^ {-15} $.
Recommended Posts