scipy.integrate.odeint prend une fonction d'intégration, les valeurs initiales pour les variables dépendantes (votre u
, v
, un w
) et une grille de valeurs de temps. Tous les arguments supplémentaires dont votre fonction a besoin (tels que a
, b
et c
) sont passés en tant que args
.
La fonction que vous définissez doit prendre un vecteur de valeurs, par exemple, X
, (que vous pouvez déballer à u
, v
et w
), le point de temps, ils correspondent et des arguments supplémentaires, et devrait retourner les premiers dérivés de X
par rapport à l'heure à ce moment-là. La visualisation de l'attracteur de Lorenz est a subject of one of the Matplotlib gallery examples.
import numpy as np
from scipy.integrate import odeint
a, b, c = 5, 0.9, 8.2
u0, v0, w0 = 0, 1, 2
def lorenz(X, t, a, b, c):
u, v, w = X
up = -a*(u - v)
vp = c*u - v - u*w
wp = -b*w + u*v
return up, vp, wp
t = np.linspace(0, 100, 10000)
f = odeint(lorenz, (u0, v0, w0), t, args=(a, b, c))
x, y, z = f.T
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(x, y, z)
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")
ax.set_zlabel("Z Axis")
ax.set_title("Lorenz Attractor")
plt.show()
Les modérateurs devraient envisager de passer cela en échange informatique scientifique. @darren vous devriez aussi chercher dans cet échange. Il y a sûrement des questions qui ont été répondues ici qui vous aideront. – wgwz