洛伦茨吸引子

洛伦茨吸引子(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。

此系统也会出现在单模激光和发电机的简化模型中。除此之外,闭环对流、水轮转动等物理模型也有此系统的应用。

洛伦茨方程
洛伦茨方程是基於纳维-斯托克斯方程、连续性方程和热传导方程简化得出,最初的形式为:
:
\frac { \partial \vec v }{\partial t} + \left( \vec v \cdot \nabla \right) \vec v =
-\frac {\nabla p}{\rho} + \nu \nabla ^2 \vec v + \vec g

:
\frac { \partial \rho }{\partial t} + \nabla\cdot \left( \rho \vec v \right) = 0

:
\frac { \partial T }{\partial t} + \nabla\cdot\left( T \vec v \right) =
\chi \nabla ^2 T

:
\rho = \rho_0 \left( 1 - \gamma \left( T - T_0 \right) \right)

\vec v 是流速,T是流体温度,T_0是上限温度(也可以写成T_0 + \Delta T),\rho 是密度,p是压强,\vec g是重力,\gamma、\chi、\nu依次是热膨胀系数、热扩散率和动黏滯係數。

简化後的形式称为洛伦茨方程,是决定洛伦茨振子状态的方程为一组常微分方程:
: \frac{dx}{dt} = \sigma (y - x)

: \frac{dy}{dt} = x (\rho - z) - y

: \frac{dz}{dt} = xy - \beta z

含时间参数的形式:
:\begin{cases}
\frac{\mathrm{d}x(t)}{\mathrm{d}t}=\sigma \bigl( y(t) - x(t) \bigr)\\
\frac{\mathrm{d}y(t)}{\mathrm{d}t}=\rho \, x(t) - y(t) - x(t) \, z(t)\\
\frac{\mathrm{d}z(t)}{\mathrm{d}t} =x(t) \, y(t) - \beta \, z(t) \end{cases}

\sigma称为普兰特尔数 ,\rho称为瑞利数。所有的\sigma,\rho,\beta > 0,但通常\sigma = 10,\beta = 8/3,\rho不定。若\rho,则吸引子为原点,没有任何其他稳定点。1≤ρ~ x = \pm \sqrt{b (\rho-1) }、~ y = \pm \sqrt{b (\rho-1) }、~ z = \rho-1 。系统在\rho = 28时表现出混沌特性,但\rho为其他值时会显示出具纽结的周期轨道。例如,当\rho = 99.96时,图像变为一个T(3,2)环面纽结。

瑞利数
源代码
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)

Borland C
#include
#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();
}

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.

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

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

参见

  • 混沌映射列表
  • Takens定理
  • 曼德布洛特集合

参考文献

*
*
*
*
*

外部链接
*

评论 (0)

  • 还没有评论,来抢沙发吧。