洛倫茲吸引子
洛倫茲吸引子(Lorenz attractor)是由MIT大學的氣象學家Edward Lorenz在1963年給出的,他給出第一個混沌現象——蝴蝶效應。
洛倫茲方程是大氣流體動力學模型的一個簡化的常微分方程組:
該方程組來源於模擬大氣對流,該模型除了在天氣預報中有顯著的應用之外,還可以用於研究空氣污染和全球侯變化。洛倫茲藉助於這個模型,將大氣流體運動的強度 x 與水平和垂直方向的溫度變化 y 和 z 聯繫了起來。參數 稱為普蘭特數,r 是規範化的瑞利數,b 和幾何形狀相關。洛倫茲方程是非線性方程組,無法求出解析解,必須使用數值方法求解上述微分方程組。洛倫茲用數值解繪製結果圖,並發現了混沌現象。
Python
代碼如下
# -*- coding: utf-8 -*-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 # 直接與lorenz的計算公式對應 return np.array([p*(y-x), x*(r-z)-y, x*y-b*z]) t = np.arange(0, 30, 0.01) # 創建時間點 # 調用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)) # 繪圖from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt fig = plt.figure()ax = Axes3D(fig)ax.plot(track1[:,0], track1[:,1], track1[:,2])ax.plot(track2[:,0], track2[:,1], track2[:,2])plt.show()
互動式三維視圖
代碼
洛倫茲吸引子軌跡
from scipy.integrate import odeintimport numpy as npfrom mayavi import mlabdef lorenz(w, t, a, b, c):# 給出位置矢量w,和三個參數a, b, c計算出# dx/dt, dy/dt, dz/dt的值x, y, z = w.tolist()# 直接與lorenz的計算公式對應return np.array([a * (y - x), x * (b - z) - y, x * y - c * z])t = np.arange(0, 30, 0.01) # 創建時間點# 調用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))#繪製圖形mlab.plot3d(track1[:, 0], track1[:, 1], track1[:, 2], color=(1, 0, 0), tube_radius=0.1)mlab.plot3d(track2[:, 0], track2[:, 1], track2[:, 2], color=(0, 0, 1), tube_radius=0.1)
微分方程數值解一般可分為:常微分方程數值解和偏微分方程數值解。自然界與工程技術中的許多現象,其數學表達式可歸結為常微分方程(組)的定解問題。一些偏微分方程問題也可以轉化為常微分方程問題來(近似)求解。Newton最早採用數學方法研究二體問題,其中需要求解的運動方程就是常微分方程。許多著名的數學家,如 Bernoulli(家族),Euler , Gauss、Lagrange和Laplace等,都遵循歷史傳統,研究重要的力學問題的數學模型,在這些問題中,許多是常微分方程的求解。作為科學史上的一段佳話,海王星的發現就是通過對常微分方程的近似計算得到的。
推薦閱讀:
※【玩轉科學計算】在Win上安裝Tensorflow
※Pandas入門
※Python裡面的scipy庫如何計算線性規劃問題呢?
※寫kinetic Monte Carlo模擬程序用什麼語言合適?
※和 C++ 相比,用 Fortran 編程是怎樣的體驗?