我有3个方程式如下
u'= -a*(u-v)
v'= c*u-v-u*w
w'= -b*w+u*v
a=5.0 b=0.9 and c=8.2
我试图使用scipy.integrate.odeint解决从t = 0到t = 10 我的初始条件是u(0)= 0,v(0)= 1.0和w(0)= 2.0 我对scipy.integrate.odeint没有太多有用的注释。所以可以使用这个模块来解决我的问题。
答案 0 :(得分:1)
scipy.integrate.odeint采用函数来集成因变量的初始值(您的u
,v
,w
)和时间值网格。您的函数需要的任何额外参数(例如a
,b
和c
)都将作为args
传递。
您定义的函数应采用值向量,例如X
,(您可以解压缩到u
,v
和w
),时间点它们对应于,以及任何其他参数,并且应该返回X
关于该时间点的时间的第一个导数。
可视化Lorenz吸引子是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()