洛伦茨吸引子

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

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

洛伦茨方程
200px|thumb|right|标出刻度的轨迹
洛伦茨方程是基於纳维－斯托克斯方程、连续性方程和热传导方程简化得出，最初的形式为：








是流速，是流体温度，是上限温度（也可以写成），是密度，是压强，是重力，、、依次是热膨胀系数、热扩散率和动黏滯係數。

简化後的形式称为洛伦茨方程，是决定洛伦茨振子状态的方程为一组常微分方程：






含时间参数的形式：

称为普兰特尔数 ，称为瑞利数。所有的，， > 0，但通常 = 10， = 8/3，不定。若，则吸引子为原点，没有任何其他稳定点。1≤ρ<13.927时，螺线轨迹接近两点（这相当於存在阻尼振子），两点的位置由下列式子决定：、、。系统在 = 28时表现出混沌特性，但为其他值时会显示出具纽结的周期轨道。例如，当时，图像变为一个T(3,2)环面纽结。

 初始条件的敏感依赖性时间t=1 （放大）时间t=2 （放大）时间t=3 （放大）File:Lorenz caos1-175.pngFile:Lorenz caos2-175.pngFile:Lorenz caos3-175.png 这三幅图是在ρ=28，σ = 10，β = 8/3的条件下生成的，展示出洛伦茨吸引子中的两条轨迹（蓝色、黄色各一）的三维演变的三个时段， 这两条轨迹的初始点只在x坐标上相差10-5。开始时，两条轨迹似乎是重合的（蓝色轨迹被黄色遮盖，因此只能看到黄色轨迹），但一段时间後，分离就变得明显了。 洛伦茨吸引子的Java动画展示了振子状态连续不断的演变  

 瑞利数 
不同ρ值时的洛伦茨吸引子File:Lorenz Ro14 20 41 20-200px.pngFile:Lorenz Ro13-200px.pngρ=14, σ=10, β=8/3 （放大）ρ=13, σ=10, β=8/3 （放大）File:Lorenz Ro15-200px.pngFile:Lorenz Ro28-200px.pngρ=15, σ=10, β=8/3 （放大）ρ=28, σ=10, β=8/3 （放大） ρ值较小时，系统是稳定的，并能演变为两个定点吸引子中的一个；当ρ大於24.74时，定点变成了排斥子，会以非常复杂的方式排斥轨迹，演变时自身从不交叉。显示不同ρ值时振子状态演变的Java动画 

 源代码 
 GNU Octave 
下面是GNU Octave模拟洛伦茨吸引子的源代码：
## Lorenz Attractor equations solved by ODE Solve
## x' = sigma*(y-x)
## y' = x*(rho - z) - y
## z' = x*y - beta*z
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) - beta*X(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 <graphics.h>
#include <conio.h>
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 + (b*x-y-z*x)*dt;
	z1 = z + (-c*z+x*y)*dt;
	x = x1;	y = y1;	z = z1;
	putpixel((int)(19.3*(y - x*0.292893) + 320),
		 (int)(-11*(z + x*0.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 + (b*x-y-z*x)*dt;
      z1 := z + (-c*z+x*y)*dt;
      x := x1;
      y := y1;
      z := z1;
      PutPixel(Round(19.3*(y - x*0.292893) + 320),
               Round(-11*(z + x*0.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+(r*x-x*z-y)*dt
    z1=z+(x*y-b*z)*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定理
 曼德布洛特集合

 参考文献 

 Jonas Bergman, Knots in the Lorentz Equation, 学士毕业论文, Uppsala University 2004.






 外部链接 


 洛伦茨吸引子 ，作者为Wolfram Demonstrations Project的Rob Morris
 洛伦茨吸引子，planetmath.org
 用於绘出洛伦茨吸引子或处理类似情况的源代码 ，使用ANSI C及gnuplot实现
 《同步混沌与私人通信》，由MIT林肯实验室的Steven Strogatz与Kevin Cuomo讲解电子电路中洛伦茨吸引子的实现
 洛伦茨吸引子交互式动画 （需Adobe Shockwave插件）
 Levitated.net：计算艺术与设计 
 3D Attractors：三维方式显示和研究洛伦茨吸引子Mac程序
 3D VRML Lorenz attractor（需VRML浏览器插件）
 J语言实现洛伦茨吸引子演示的短文  - 见J语言
 非线性模拟的Java小程序 （选择预设“Lorenz attractor”），作者Viktor Bachraty，编写语言Jython
 模拟电子技术中洛伦茨吸引子的实现 
 混沌蝴蝶——洛伦兹吸引子 

Category:混沌映射
Category:吸子