美國氣象學家洛倫茲(E.N.Lorenz,不要和提出洛倫茲變換的那位搞混)是混沌理論的奠基者之一。20世紀50年代末到60年代初,他的主要工作目標是從理論上對天氣情況進行長期預報。在使用計算機模擬天氣時,他意外地發現,對於天氣系統,哪怕初始條件的微小改變也會顯著影響運算結果。隨後,他在同事工作的基礎上化簡了自己先前的模型,得到了有3個變量的一階微分方程組,由它描述的運動中存在一個奇異吸引子,即洛倫茲吸引子。
洛倫茲的工作結果最初在1963年發表,論文題目為Deterministic Nonperiodic Flow,發表在Journal of the Atmospheric Sciences雜志上。如今,這一方程組已成為混沌理論的經典,也是“巴西蝴蝶扇動翅膀在美國引起德克薩斯的飓風“(蝴蝶效應)一說的肇始。
下面,我們使用Python的繪圖庫Matplotlib
來繪制一下洛倫茲吸引子曲線。代碼如下,非常簡單:
# -*- coding: utf-8 -*-
"Lorenz's strange attractor"
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
#import numpy as np
import matplotlib.pyplot as plt
xs, ys, zs = [], [], []
def mkPoints():
a, b, c = 10.0, 28.0, 8.0 / 3.0
h = 0.01
x0, y0, z0 = 0.1, 0, 0
for i in xrange(10000):
x1 = x0 + h * a * (y0 - x0)
y1 = y0 + h * (x0 * (b - z0) - y0)
z1 = z0 + h * (x0 * y0 - c * z0)
x0, y0, z0 = x1, y1, z1
xs.append(x0)
ys.append(y0)
zs.append(z0)
if __name__ == "__main__":
mpl.rcParams["legend.fontsize"] = 10
fig = plt.figure()
ax = Axes3D(fig)
mkPoints()
ax.plot(xs, ys, zs, label = "Lorenz's strange attractor")
ax.legend()
plt.show()
最後得到的圖形如下:
這個圖形是三維的,在Matplotlib界面上,你可以用鼠標拖拽的方式來旋轉它,以便從各個不同的角度觀察它。