"""
scipy5.1:常微分方程,以洛伦兹吸引子为例
mayuhua
2020.5.16
"""
from scipy.integrate import odeint
import numpy as np
def lorenz(w,t,p,r,b): # 位置w是时间t的函数,p,r,b是常数
x,y,z = w.tolist() # w变成列表形式
return p*(y-x),x*(r-z)-y,x*y-b*z # 微分方程dx/dt,dy/dt.dz/dt的值
t = np.arange(0,30,0.01) #创建时间点
#求解微分方程,并给定t=0的初始位置
track = odeint(lorenz,(0,1,0),t,args=(10,28,3)) #args将常数传递给lorenz函数
#三维绘图
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
xnew,ynew = np.mgrid[-1:1:50j,-1:1:50j] #生成网格坐标点,才能作图时做出三维图
Axes3D(plt.figure()).plot(track[:,0],track[:,1],track[:,2])
plt.show()
输出结果: