python解常微分方程組

美國氣象學家洛倫茲(E.N.Lorenz)是混沌理論的奠基者之一。20世紀50年代末到60年代初,他的主要工作目標是從理論上進行長期天氣預報研究。他在使用計算機模擬天氣時意外發現,對於天氣系統,哪怕初始條件的微小改變也會顯著影響運算結果。隨後,他在同事工作的基礎上化簡了自己先前的模型,得到了有3個變量的一階微分方程組,由它描述的運動中存在一個奇異吸引子,即洛倫茲吸引子,方程如下。

三個方程定義了三維空間中的各個座標點上度速度矢量,其中ρ、σ、β爲常數,不同的參數可以算出不同的軌跡:x(t)、y(t)、z(t)。當參數爲某些值時,軌跡出現混沌現象。即最小的初值差別也會顯著地影響運動軌跡。

import pylab as pl
import numpy as np
from scipy import integrate
from scipy.integrate import odeint

#%fig=洛倫茨吸引子:微小的初值差別也會顯著地影響運動軌跡
from scipy.integrate import odeint 
import numpy as np 

def lorenz(w, t, p, r, b): #❶
    # 給出位置矢量w,和三個參數p, r, b計算出
    # dx/dt, dy/dt, dz/dt的值
    x, y, z = w.tolist()
    # 直接與lorenz的計算公式對應 
    return p*(y-x), x*(r-z)-y, x*y-b*z

t = np.arange(0, 30, 0.02) # 創建時間點 
# 調用ode對lorenz進行求解, 用兩個不同的初始值 
track1 = odeint(lorenz, (0.0, 1.00, 0.0), t, args=(10.0, 28.0, 3.0)) #❷
track2 = odeint(lorenz, (0.0, 1.01, 0.0), t, args=(10.0, 28.0, 3.0)) #❸
#%hide
from mpl_toolkits.mplot3d import Axes3D
fig = pl.figure()
ax = Axes3D(fig)
ax.plot(track1[:,0], track1[:,1], track1[:,2], lw=1)
ax.plot(track2[:,0], track2[:,1], track2[:,2], lw=1);
即使微小的差別也會顯著地影響運動軌跡
洛倫茨吸引子:即使微小的差別也會顯著地影響運動軌跡

[1]洛倫茨吸引子介紹參考:http://bzhang.lamost.org/website/archives/lorenz_attactor

[2]《python科學計算》(張若愚著)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章