洛伦兹吸引子

                     

贡献者: shizy0808; addis

预备知识 四阶龙格库塔法

1. 洛伦兹方程

  120 世纪 60 年代,蓬勃发展的计算机技术开始得到广泛应用,其中包括长期天气预报。大气与液体同属流体,太阳照射使地面升温,靠近地面的气体受到加热,而高层大气还是冷的,于是上、下层气体之间将会出现对流,产生类似于贝纳德实验中的对流现象。在美国气象局工作的数学家洛伦兹(E.N. Lorenz)将大气对流与贝纳德液体对流联系起来,企图用数值方法进行长期天气预报。从贝纳德对流出发,利用流体力学中的纳维叶-斯托克斯(Navier-Stokes)方程、热传导方程和连续性方程,洛伦兹推导出了描述大气对流的微分方程

(1)dxdt=σ(xy) ,(2)dydt=rxyxz ,(3)dzdt=bz+xy .
式子中,r 是对流的翻动速率; y 正比于上流与下流液体之间的温差;z 是垂直方向的温度梯度; σ 为无量纲因子,称为 Prandtl 数; b 为反映速度阻尼的常数。其中,xzxy 是非线性项。

   洛伦兹方程是一个能量耗散系统,这可以从它的相空间随时间变化的特性来证明。设在 (x,y,z) 三维相空间取一个闭合曲面,该曲面所包围的体积 V 随时间的变化为:

(4)dVdt=V(dx˙dt+dy˙dt+dz˙dt) ,
式中,dx˙, dy˙, dz˙ 为代表点在相空间的相应方向上的运动速度。由洛伦兹方程得
(5)dx˙dt=σ ,(6)dy˙dt=1 ,(7)dz˙dt=b ,
于是,就有
(8)dVdt=(σ+1+b)V .
解此方程得到
(9)V(t)=V0exp[(σ+1+b)t] ,
式中,V0 为初始相空间的体积。由于参数 b>0,σ>0,可见洛伦兹方程的相空间体积 V(t) 是随时间收缩的,由初始时的有限相体积 V0 随时间收缩到一点,这一点应是坐标系的原点 x=y=z=0.由此可见,洛伦兹方程描述的是一个耗散系统。正如阻尼单摆那样,耗散意味着系统存在吸引子。

2. 洛伦兹方程解的分岔

   由 x˙=y˙=z˙=0 可得洛伦兹方程的三个平衡点:

(10)x=y=z=0 ,x=y=±b(r1) ,z=r1 .
然而,如果 r<1,后两个平衡点就不存在,只存在 x=y=z=0 这个平衡点。因此,平衡点 x=y=z=0 是洛伦兹方程的不动点,相应于贝纳德实验中液体的静止定态。为了研究平衡点的稳定性问题,我们将方程写成矩阵形式
(11)(x˙y˙z˙)=(σσ0rz1xyxb)(xyz) .
首先讨论坐标原点 x=y=z=0 的稳定性。为此,对原点的邻域作线性化处理,即
(12)(x˙0y˙0z˙0)=(σσ0r1000b)(x0y0z0) .
线性方程系数矩阵本征值为
(13)λ1.2=12[(σ+1)±(σ1)2+4σr] ,λ3=b .
通常把参数 σb 固定为 108/3,研究随着 r 的变化,系统的动力学行为是如何变化的。

3. 吸引子

   由于洛伦兹方程混沌的特点,即对初值非常敏感。如今,这一方程组已成为混沌理论的经典,也是 “巴西蝴蝶扇动翅膀在美国引起德克萨斯的飓风” 一说的肇始。下面几幅图给出了初值稍微变化一点点最终导致完全不同的动力学轨迹的图像。

图
图 1:吸引子. 参数取值 σ=10,b=8/3,r=80. 初始条件:(x0,y0,z0)=(12,2,9)
图
图 2:吸引子. 参数取值 σ=10,b=8/3,r=80. 初始条件:蓝线 (x0,y0,z0)=(12,2,9) 以及红线 (x0,y0,z0)=(12,2,9).1
图
图 3:三维吸引子。

代码 1:lorenz.m
clear all
clc
clf
r = 80;
[t,y]=ode45(@Lorenz,[0,30],[12,2,9],[],r);
[t1,y1]=ode45(@Lorenz,[0,30],[12,2,9.1],[],r);

subplot(221);
plot(t,y(:,1),'b--');
hold on
plot(t1,y1(:,1),'g-.');
legend('z_0=9', 'z_0=9.1')

xlabel('t')
ylabel('x')
set(gca,'linewidth',1,'fontsize',15,'TickLabelInterpreter','latex')
subplot(222);
plot(t,y(:,2),'b--');
hold on
plot(t1,y1(:,2),'g-.');
legend('z_0=9', 'z_0=9.1')

xlabel('t')
ylabel('y')
set(gca,'linewidth',1,'fontsize',15,'TickLabelInterpreter','latex')

subplot(223);
plot(t,y(:,3),'b--');
hold on
plot(t1,y1(:,3),'g-.');
legend('z_0=9', 'z_0=9.1')

xlabel('t')
ylabel('z')
set(gca,'linewidth',1,'fontsize',15,'TickLabelInterpreter','latex')

subplot(224);
plot3(y(:,1),y(:,2),y(:,3),'b--');
hold on
plot3(y1(:,1),y2(:,2),y3(:,3),'g-.');
legend('z_0=9', 'z_0=9.1')

view([45 42]);
xlabel('x')
ylabel('y')
zlabel('z')
set(gca,'linewidth',1,'fontsize',15,'TickLabelInterpreter','latex')

function dy=Lorenz(t,y,r) %
    dy=zeros(3,1);
    dy(1)=10*(-y(1)+y(2));
    dy(2)=r*y(1)-y(2)-y(1)*y(3);
    dy(3)=y(1)*y(2)-8*y(3)/3;
    
end


1. ^ 参考 Wikipedia 相关页面


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利