matlab实现混沌系统最大李雅普诺夫指数

李雅普诺夫指数(Lyapunov)是一个较为典型的判断一个系统是否具有混沌特性以及混沌的程度分析方法。

李指数:在相空间中初始时无限接近的两个轨道,随着时间的不断推移按指数收敛或发散的平均变化率,它可以定量描述混沌系统在局部范围里系统轨道间的分离程度。

假设在一维动力系统 Xn+1=F(Xn),为了表示从整体上看相邻两状态分离的情况,必须 对时间(或迭代次数)取平均,不妨设平均每次迭代所引起的指数分离中的指数为λ,原 来相距为ε的两点经过n次迭代后[相距为]:

https://baike.baidu.com/item/%E6%9D%8E%E9%9B%85%E6%99%AE%E8%AF%BA%E5%A4%AB%E6%8C%87%E6%95%B0/5581420?fr=aladdin
如果
λ>0,运动轨道的局部不稳定,相邻点的轨道的终按指数方式分离,则在 此作用下反复折叠,形成混沌吸引子

在n维连续动力学系统中,将一个无穷小n维的球作为系统的初始条件,随着动力 系统的演化向相空间的各个方向作伸展或收缩,球将变为椭球,将椭球的所有主轴按其长度顺序徘列,那么第i个李雅普诺夫指数根据第i个主轴的长度pi(t)的增加速率定义为:
在这里插入图片描述
将这n 个李雅普诺夫指数按照从大到小进行排序,得到李雅普诺夫指数谱:
λ1>=λ2>=λ3>=…>=λn。对于混沌系统,必须有一个正的李雅普诺夫数,所以通常采用计算最大李雅普诺夫指数的方法来判断系统是否是混沌的。

以一维sine函数为例,求其最大李指数:

%sine.m
function newx=sine_f(x);
newx(1,1)=x(2)*sin(pi*x(1))/4;%更平滑
newx(2,1)=x(2);
%run sine
clc;
   d0=1e-8;
   Z=[]; 
   r=rand();
   for u=linspace(0,4,500)
       le=0;
       lsum=0;
       x=[r;u];
       x1=[r+d0;u];
       for k=1:800
           x=sine_f(x);
           x1=sine_f(x1);
           d1=sqrt((x(1)-x1(1))^2);%1范数
           x1=x+(d0/d1)*(x1-x);
           if k>100
               lsum=lsum+log(d1/d0);
           end
       end
       le=lsum/(k-100);
       Z=[Z,u+le*1i]; 
   end
   plot(Z,'-') 
   xlabel('k','fontsize',16,'FontAngle','italic');
   ylabel('Lyapunov exponent','fontsize',16,'FontAngle','italic');
   grid on;

在这里插入图片描述
类似的,可以做出各种经典映射组合的级联映射。

参考:

Author:yujunjie
田野. 混沌S盒构造及其在图像加密中应用研究[D].哈尔滨工程大学,2017. 博士论文

  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
以下是一个用于计算混沌系统 Lyapunov 指数MATLAB 代码示例: ``` % 定义初始条件 x0 = [0.1 0.1 0.1]; % 定义混沌系统的参数 sigma = 10; beta = 8/3; rho = 28; % 定义计算 Lyapunov 指数的步数 steps = 10000; % 定义计算 Lyapunov 指数的方法 function [lyapunov_exponents] = compute_lyapunov_exponents(x0, sigma, beta, rho, steps) % 初始化状态变量 x = x0; v = eye(3); lyapunov_exponents = zeros(1, 3); for i = 1:steps % 计算系统的雅可比矩阵 jacobian = [ -sigma, sigma, 0; rho - x(3), -1, -x(1); x(2), x(1), -beta ]; % 对雅可比矩阵进行 QR 分解,以对向量进行正交化 [q, r] = qr(jacobian * v); % 归一化向量,使其模长为 1 v = q ./ sqrt(sum(q.^2)); % 计算每个 Lyapunov 指数的平均数 for j = 1:3 lyapunov_exponents(j) = lyapunov_exponents(j) + log(abs(r(j,j))); end % 更新系统状态 x = lorenz(x, sigma, beta, rho); end % 计算每个 Lyapunov 指数的平均值 lyapunov_exponents = lyapunov_exponents / steps; end % 将计算 Lyapunov 指数的函数应用于混沌系统 lyapunov_exponents = compute_lyapunov_exponents(x0, sigma, beta, rho, steps); fprintf('Lyapunov 指数为:'); disp(lyapunov_exponents); ``` 此代码使用 Lorenz 系统作为示例混沌系统,其中 `lorenz` 函数计算了给定的时间步长下的系统状态。此函数由以下代码定义: ``` function x = lorenz(x0, sigma, beta, rho) x = zeros(1, 3); x(1) = x0(1) + sigma * (x0(2) - x0(1)); x(2) = x0(2) + (rho * x0(1) - x0(2) - x0(1) * x0(3)); x(3) = x0(3) + (-beta * x0(3) + x0(1) * x0(2)); end ``` 在运行此代码之前,请确保已将 `lorenz.m` 文件保存在当前工作目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值