帐篷映射与Henon映射分岔图MATLAB实现

帐篷映射与Henon映射分岔图MATLAB实现


一、帐篷映射分岔图

1. 核心代码
%% 帐篷映射分岔图
clear; clc; close all;

% 参数设置
a = 0:0.001:1;    % 参数范围
x0 = 0.1;         % 初始值
N = 1000;         % 迭代次数
N_skip = 200;     % 丢弃初始瞬态

% 初始化图形
figure;
hold on;
box on;
xlabel('参数a'); ylabel('x_n');
xlim([0 1]); ylim([0 1]);

% 分岔图绘制
for k = 1:length(a)
    x = x0;
    % 丢弃瞬态过程
    for i = 1:N_skip
        x = a(k) - (1 + a(k)) * abs(x);
    end
    % 记录稳定状态
    xn = zeros(1, N);
    for i = 1:N
        x = a(k) - (1 + a(k)) * abs(x);
        xn(i) = x;
    end
    % 绘制分岔点
    plot(a(k)*ones(1,N), xn, '.', 'MarkerSize', 1, 'Color', [0.5,0.5,0.5]);
end

% 图形优化
title('帐篷映射分岔图');
legend('\it a=0.99-1.0 时混沌态');
2. 运行效果

二、Henon映射分岔图

1. 核心代码
%% Henon映射分岔图
clear; clc; close all;

% 参数设置
a = 0.2:0.001:1.4; % 参数a范围
b = 0.3;           % 固定参数b
x0 = 0.1;          % 初始值
N = 1000;          % 迭代次数
N_skip = 200;      % 丢弃初始瞬态

% 初始化图形
figure;
hold on;
box on;
xlabel('\it a'); ylabel('\it x_n');
xlim([0.2 1.4]); ylim([-1.5 1.5]);

% 分岔图绘制
for k = 1:length(a)
    x = x0;
    y = b * x;
    % 丢弃瞬态过程
    for i = 1:N_skip
        x_next = 1 - a(k)*x^2 + y;
        y_next = b * x;
        x = x_next;
        y = y_next;
    end
    % 记录稳定状态
    xn = zeros(1, N);
    for i = 1:N
        x_next = 1 - a(k)*x^2 + y;
        y_next = b * x;
        x = x_next;
        y = y_next;
        xn(i) = x;
    end
    % 绘制分岔点
    plot(a(k)*ones(1,N), xn, '.', 'MarkerSize', 1, 'Color', [0.2,0.6,0.8]);
end

% 图形优化
title('Henon映射分岔图');
legend('\it b=0.3 时混沌吸引子');
2. 运行效果

三、动态分岔图增强版

%% 动态分岔图(带颜色映射)
clear; clc; close all;

% 参数设置
a = 0.2:0.0005:1.4; % 参数范围
b = 0.3;
x0 = 0.1;
N = 500;            % 迭代次数
N_skip = 100;       % 瞬态丢弃

% 创建图形窗口
figure;
hold on;
colormap(jet);
colorbar;
xlabel('\it a'); ylabel('\it x_n');
xlim([0.2 1.4]); ylim([-1.5 1.5]);

% 动态绘制
for k = 1:length(a)
    x = x0;
    y = b * x;
    for i = 1:N_skip
        x_next = 1 - a(k)*x^2 + y;
        y_next = b * x;
        x = x_next;
        y = y_next;
    end
    xn = zeros(1, N);
    for i = 1:N
        x_next = 1 - a(k)*x^2 + y;
        y_next = b * x;
        x = x_next;
        y = y_next;
        xn(i) = x;
    end
    % 颜色映射
    c = (k - 1) / (length(a) - 1);
    plot(a(k)*ones(1,N), xn, '.', 'Color', [c, 0.5, 1-c], 'MarkerSize', 1);
end

四、关键参数说明

参数 帐篷映射范围 Henon映射范围 作用说明
a 0-1 0.2-1.4 控制系统非线性强度
b 0.3 影响Henon映射的稳定区域
N_skip 200 100 丢弃初始瞬态过程
N 1000 500 稳定状态采样点数

五、分岔现象分析

  1. 帐篷映射

    • 稳定区间a ∈ [0,0.99)时为单峰周期运动
    • 混沌区间a ∈ [0.99,1.0]出现完全混沌
    • 倍周期分岔a=0.5时为2周期,a=0.75时为4周期
  2. Henon映射

    • 稳定解a < 1.07时存在闭合轨道
    • 混沌吸引子a > 1.07呈现分形结构
    • 参数敏感性b值影响吸引子形状(典型值b=0.3

参考代码 混沌映射特性 www.youwenfan.com/contentcsr/56290.html

六、MATLAB调试技巧

  1. 加速计算

    % 使用预分配内存
    xn = zeros(1,N);  % 预分配数组
    
  2. 交互式参数调整

    % 添加滑动条控制参数a
    h = uicontrol('Style','slider','Position',[20 20 200 20],...
        'Min',0.2,'Max',1.4,'Value',0.2);
    set(gcf,'WindowKeyPressFcn',@(src,event) updatePlot(event,a));
    
  3. 三维扩展

    % 绘制Henon映射三维轨迹
    figure;
    plot3(xn, y, zeros(size(xn)), '.');
    xlabel('x'); ylabel('y'); zlabel('迭代次数');
    

七、应用场景

  1. 密码学:生成混沌序列用于加密(如帐篷映射的初值敏感性)
  2. 混沌通信:通过分岔图选择合适参数实现信号调制
  3. 物理实验模拟:分析非线性系统的临界行为

 

专注于matlab/simulink,电子电路,编程