Je vais vous expliquer comment résoudre des équations différentielles ordinaires en utilisant Python.
OS / Python module version Le système d'exploitation utilisé est Windows 10. La version du module Python est:
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 Résolvez l'équation différentielle suivante.
y'' = -y \\
Introduisez la variable z. En augmentant les variables, une équation différentielle du second ordre est considérée comme une équation simultanée de deux équations différentielles du premier ordre.
y' = z \\
z' = -y \\
Les conditions initiales sont $ t = 0, y_0 = 1, z_0 = 0 $. La solution est $ cos (t) $. Étant donné que la solution correcte peut être facilement obtenue, l'erreur peut être évaluée.
Ce qui suit est un programme Python qui résout les équations différentielles. Résolvez en utilisant 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))
Je le ferai.
console
> python .\test.py
Une fois exécuté, le graphique sera affiché.
Le graphique suivant est la solution de l'équation différentielle. Le graphique de cos (t) est affiché pendant 10 cycles.
Le graphique suivant trace l'erreur. À mesure que t augmente, l'erreur augmente également. L'erreur sera de l'ordre de 10 $ ^ {-15} $.
Recommended Posts