程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> 使用Matplotlib畫洛侖茲吸引子

使用Matplotlib畫洛侖茲吸引子

編輯:Python

美國氣象學家洛倫茲(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()

最後得到的圖形如下:

Lorenz's strange attractor

這個圖形是三維的,在Matplotlib界面上,你可以用鼠標拖拽的方式來旋轉它,以便從各個不同的角度觀察它。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved