洛倫茨吸引子

洛倫茨吸引子（Lorenz attractor）是洛倫茨振子（Lorenz oscillator）的長期行為對應的分形結構，以愛德華・諾頓・洛倫茨（Edward Norton Lorenz）的姓氏命名。洛倫茨振子是能產生混沌流的三維動力系統，又稱作勞侖次系統（Lorenz system），其一組混沌解稱作洛倫茨吸引子，以其雙紐線形狀而著稱。對映展示出動力系統（三維繫統的三個變數）的狀態是如何以一種複雜且不重複的模式，隨時間的推移而演變的。

簡述

洛倫茨吸引子及其匯出的方程組是由愛德華・諾頓・洛倫茨於 1963 年發表，最初是發表在《大氣科學雜誌》（Journal of the Atmospheric Sciences）雜誌的論文《Deterministic Nonperiodic Flow》中提出的，是由大氣方程中出現的對流卷方程簡化得到的。

這一洛倫茨模型不只對非線性數學有重要性，對於氣候和天氣預報來說也有著重要的含義。行星和恆星大氣可能會表現出多種不同的準週期狀態，這些準週期狀態雖然是完全確定的，但卻容易發生突變，看起來似乎是隨機變化的，而模型對此現象有明確的表述。

從技術角度看來，洛倫茨振子具有非線性、三維性和確定性。2001 年，沃裡克・塔克爾（Warwick Tucker）證明出在一組確定的引數下，系統會表現出混沌行為，顯示出人們今天所知的奇異吸引子。這樣的奇異吸引子是豪斯多夫維數在 2 與 3 之間的分形。彼得・格拉斯伯格（Peter Grassberger）已於 1983 年估算出豪斯多夫維數為 2.06 ± 0.01，而為 2.05 ± 0.01。

此係統也會出現在單模雷射和發電機的簡化模型中。除此之外，閉環對流、水輪轉動等物理模型也有此係統的應用。

洛倫茨方程

洛倫茨方程是基於納維－斯托克斯方程、連續性方程和熱傳導方程簡化得出，最初的形式為：

是流速，是流體溫度，是上限溫度（也可以寫成），是密度，是壓強，是重力，、、依次是熱膨脹係數、熱擴散率和動黏滯係數。

簡化後的形式稱為洛倫茨方程，是決定洛倫茨振子狀態的方程為一組常微分方程：

含時間引數的形式：

稱為普蘭特爾數 ，稱為瑞利數。所有的，， > 0，但通常 = 10， = 8/3，不定。若，則吸引子為原點，沒有任何其他穩定點。1≤ρ

瑞利數

原始碼

4.1 GNU Octave

下面是 GNU Octave 模擬洛倫茨吸引子的原始碼：

# Lorenz Attractor equations solved by ODE Solve
# x' = sigma*(y-x)
# y' = x*(rho - z) - y
# z' = xy - betaz

function dx = lorenzatt (X)

rho = 28; sigma = 10; beta = 8/3;

dx = zeros (3,1);

dx (1) = sigma*(X (2) - X (1));

dx (2) = X (1)*(rho - X (3)) - X (2);

dx (3) = X (1)X (2) - betaX (3);

return

end

# Using LSODE to solve the ODE system.

clear all

close all

lsode_options ("absolute tolerance",1e-3)

lsode_options ("relative tolerance",1e-4)

t = linspace (0,25,1e3); X0 = 0,1,1.05;

X,T,MSG=lsode (@lorenzatt,X0,t);

T

MSG

plot3 (X (:,1),X (:,2),X (:,3))

view (45,45)

4.2 Borland C

include

void main

{

double x = 3.051522, y = 1.582542, z = 15.62388, x1, y1, z1;

double dt = 0.0001;

int a = 5, b = 15, c = 1;

int gd=DETECT, gm;

initgraph (&gd, &gm, "C:\\BORLANDC\\BGI");

do {x1 = x + a(-x+y)dt;

	y1 = y + (bx-y-zx)*dt;

	z1 = z + (-cz+xy)*dt;

	x = x1;	y = y1;	z = z1;

	putpixel ((int)(19.3(y - x0.292893) + 320),

		 (int)(-11(z + x0.292893) + 392), 9);

} while (!kbhit );

closegraph ;}

4.3 Borland Pascal

Program Lorenz;

Uses CRT, Graph;

Const

x: Real = 3.051522;

y: Real = 1.582542;

z: Real = 15.62388;

dt = 0.0001;

a = 5;

b = 15;

c = 1;

Var

gd, gm: Integer;

x1, y1, z1: Real;

Begin

gd:=Detect;

InitGraph (gd, gm, 'c:\bp\bgi');

While not KeyPressed Do Begin

x1 := x + a(-x+y)dt;

y1 := y + (bx-y-zx)*dt;

z1 := z + (-cz+xy)*dt;

x := x1;

y := y1;

z := z1;

PutPixel (Round (19.3(y - x0.292893) + 320),

Round (-11(z + x0.292893) + 392), 9);

End;

CloseGraph;

ReadKey;

End.

4.4 Fortran

program LorenzSystem

real,parameter::sigma=10

real,parameter::r=28

real,parameter::b=2.666666

real,parameter::dt=.01

integer,parameter::n=1000

real x,y,z

open (1,file='result.txt',form='formatted',status='replace',action='write')

x=10.;y=10.;z=10.

do i=1,n,1

x1=x+sigma(y-x)dt

y1=y+(rx-xz-y)*dt

z1=z+(xy-bz)*dt

x=x1

y=y1

z=z1

write (1,*) x,y,z

enddo

print *,'Done'

close (1)

end program LorenzSystem

4.5 QBASIC/FreeBASIC ("fbc -lang qb")

DIM x, y, z, dt, x1, y1, z1 AS SINGLE

DIM a, b, c AS INTEGER

x = 3.051522: y = 1.582542: z = 15.62388: dt = 0.0001

a = 5: b = 15: c = 1

SCREEN 12

PRINT "Press Esc to quit"

WHILE INKEY$ CHR$(27)

x1 = x + a (-x + y) dt

y1 = y + (b x - y - z x) * dt

z1 = z + (-c z + x y) * dt

x = x1

y = y1

z = z1

PSET ((19.3 (y - x .292893) + 300), (-11 (z + x .292893) + 360)), 9

WEND

END