常见混沌系统:Lorenz 1963 模型

目录

1963年,Lorenz发现了第一个混沌吸引子------Lorenz系统,从此揭开了混沌研究的序幕。

Lorenz 3 模型定义

Lorenz 1963 模型是描述大气对流的一个简化系统,具有混沌特性,是非线性动力系统研究的经典模型之一。

该系统由三个常微分方程组成:

其中:

  • ( x(t) ):系统状态变量之一,常被解释为速度场;
  • ( y(t) ):温度场差异;
  • ( z(t) ):垂直温度分布;
  • ( \sigma ):Prandtl 数;
  • ( \rho ):Rayleigh 数;
  • ( \beta ):几何常数。

Lorenz模型已经成为混沌领域的经典模型,系统中三个参数的选择对系统会不会进入混沌状态起着重要的作用。

常用参数(具有混沌性)

Lorenz 系统的行为高度依赖参数,例如:

参数组合 吸引子形态 案例图形
ρ < 1 Lorenz 系统在 𝜌<1 时,原点是唯一稳定点,所有轨道都会收敛到原点,系统不出现振荡或混沌。 轨道从初始点缓慢收敛到原点,轨迹几乎不动。(ρ=0.5<1)
ρ ≈ 10 出现两个稳定平衡点(非混沌),轨道会围绕其中一个平衡点收敛,表现为规则螺旋 轨道围绕两个点之间螺旋收敛,看不到明显的"蝴蝶形"混沌结构。
ρ = 28 出现混沌吸引子(蝴蝶形) Lorenz 系统最经典的混沌参量,轨道在两个"翅膀"之间不可预测地跳跃,形成典型混沌吸引子。
ρ > 100 系统变得更混乱,吸引子形状更复杂 两个"翅膀"结构非常清晰,但比 𝜌=28 时范围更广、点分布更散,Z 方向振幅超过 200。

MATLAB代码

以下 MATLAB 代码将:

  • 定义 Lorenz 系统;
  • 使用 ode45 数值积分;
  • 绘制 3D 演化轨迹

运行以下代码后,会得到一个立体的"蝴蝶型"轨迹图,显示 Lorenz 系统在混沌参数 下的演化行为。

  • 渐近吸引子 ------ 虽然初始点不同,但轨迹最终会在两个"翅膀"之间跳动;
  • 对初始值敏感 ------ 稍微改变初值也会导致完全不同的轨迹;

完整matlab代码如下:

matlab 复制代码
%% Lorenz 3D 系统演化轨迹绘制
clear; 
clc; 
close all;

pathFigure = "..\Figures\";

%% 参数设置
sigma = 10;
rho = 28;
beta = 8/3;

%% 时间设置
tspan = [0 100];     % 积分时间
dt = 0.005;           % 步长
t = tspan(1):dt:tspan(2);

%% 初始条件
x0 = [-16, -21, 33];    % 可试试 [1, 1, 1] 或其他值

%% 积分
[t_out, x_out] = ode45(@(t,x) lorenz3(t,x,sigma,rho,beta), t, x0);

%% 提取变量
x = x_out(:,1);
y = x_out(:,2);
z = x_out(:,3);

%% 3D 轨迹图
figure('Name','Lorenz Attractor','Color','w');

plot3(x, y, z, '.', 'MarkerSize', 3, 'Color', [0 0.4 0.8]);
set(gca, 'FontSize', 12, 'FontName', 'Times New Roman');

xlabel('x(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
ylabel('y(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
zlabel('z(t)', 'FontSize', 14, 'FontName', 'Times New Roman');
grid on;
title(sprintf('Lorenz Attractor: σ=%.1f, ρ=%.1f, β=%.3f', sigma, rho, beta))
view(30, 20); % 设置视角
axis tight

str= strcat(pathFigure, "Fig.1", '.tiff');
print(gcf, '-dtiff', '-r600', str);

%% 
figureUnits = 'centimeters';
figureWidth = 27; 
figureHeight = 12;

figureHandle = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);

subplot(1,2,1);
plot3(x, y, z, '.', 'MarkerSize', 2);
set(gca, 'FontSize', 12, 'FontName', 'Times New Roman');

xlabel('x(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
ylabel('y(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
zlabel('z(t)', 'FontSize', 14, 'FontName', 'Times New Roman');
grid on;
title('Initial value: [-16, -21, 33]');
view(30, 20); % 设置视角
set(gca,'Layer','top');

% 改变初值
x0_2 = [-16, -21, 33.00005];
[~, x2] = ode45(@(t,x) lorenz3(t,x,sigma,rho,beta), t, x0_2);
subplot(1,2,2);

plot3(x2(:,1), x2(:,2), x2(:,3), '.', 'MarkerSize', 2);
set(gca, 'FontSize', 12, 'FontName', 'Times New Roman');

xlabel('x(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
ylabel('y(t)', 'FontSize', 14, 'FontName', 'Times New Roman'); 
zlabel('z(t)', 'FontSize', 14, 'FontName', 'Times New Roman');
grid on;
title('Initial value: [-16, -21, 33.00005]');
view(30, 20); % 设置视角
set(gca,'Layer','top');

str= strcat(pathFigure, "Fig.2", '.tiff');
print(gcf, '-dtiff', '-r600', str);

%% 函数定义

function dxdt = lorenz3(~, x, sigma, rho, beta)
    dxdt = zeros(3,1);
    dxdt(1) = sigma * (x(2) - x(1));
    dxdt(2) = x(1) * (rho - x(3)) - x(2);
    dxdt(3) = x(1) * x(2) - beta * x(3);
end

对比两个初始值非常接近的 Lorenz 系统,分别绘制它们的 𝑥(𝑡) 时间序列,结果如下:

虽然初始值差异极小,但在一段时间后轨迹迅速分离,这正是 混沌系统敏感依赖初始条件(蝴蝶效应) 的体现

相应MATLAB实现代码如下:

matlab 复制代码
x0_1 = [-16, -21, 33];
x0_2 = [-16, -21, 33.00001];  % 微小扰动

% 数值求解
[t1, x1] = ode45(@(t,x) lorenz3(t,x,sigma,rho,beta), t, x0_1);
[t2, x2] = ode45(@(t,x) lorenz3(t,x,sigma,rho,beta), t, x0_2);

% 提取 x 分量
x1_series = x1(:,1);
x2_series = x2(:,1);

% 绘图:对比 x(t) 时间序列
figure('Name','Lorenz x(t) Comparison','Color','w', 'Position', [100, 100, 1000, 400]);

plot(t1, x1_series, '.', 'MarkerSize', 2, 'Color', [0.1 0.4 0.8]); hold on;
plot(t2, x2_series, '.', 'MarkerSize', 2, 'Color', [0.9 0.4 0]); 
set(gca, 'FontSize', 12, 'FontName', 'Times New Roman');
hl = legend('x_0 = [-16, -21, 33]', 'x_0 = [-16, -21, 33.00001]');
set(hl, 'NumColumns', 2, 'box', 'off', 'FontName', 'Times New Roman', 'FontSize', 12,'Location','north');
grid on;
xlim([0, max(t)]);

xlabel('Time t', 'FontSize', 14, 'FontName', 'Times New Roman');
ylabel('x(t)', 'FontSize', 16, 'FontName', 'Times New Roman');
title('Comparison of x(t) for Two Close Initial Conditions in Lorenz System', 'FontSize', 16, 'FontName', 'Times New Roman');
set(gca,'Layer','top');

str= strcat(pathFigure, "Fig.3", '.tiff');
print(gcf, '-dtiff', '-r600', str);

参考

相关推荐
WW、forever3 个月前
【WRF理论第十七期】单向/双向嵌套机制(含namelist.input详细介绍)
wps·wrf
WW、forever3 个月前
【WRF工具】GIS4WRF详细介绍:配置 WPS/WRF
qgis·wrf
WW、forever7 个月前
【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例
wrf
WW、forever7 个月前
【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等
wrf
WW、forever7 个月前
【WRF教程第3.3期】预处理系统 WPS 详解:以4.5版本为例
wrf
WW、forever7 个月前
【WRF教程第3.4期】预处理系统 WPS 详解:以4.5版本为例
wrf
WW、forever7 个月前
【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容
wrf
WW、forever7 个月前
【WRF-Urban】WPS中有关Urban的变量设置
wrf·urban
WW、forever7 个月前
【WRF-Urban】城市冠层参数UCPs导入WPS/WRF中
wrf