文章目录

  • 前言
  • 一、混沌产生系统:Lorenz和Rossler
  • 二、龙格库塔四阶算法
  • 三、混沌吸引子轨迹
  • 四、最大李亚普诺夫指数
  • 附:完整程序

前言

MATLAB是集编程、计算及数据可视化三者于一体的软件系统。其强大的矩阵运算能力和丰富的工具箱保证了其在处理工程问题上的性能和质量。本系列主要MATLAB 2020a进行系统仿真,绘图。


一、混沌产生系统:Lorenz和Rossler

Lorenz系统是一个按Rayleigh-Bénard配置的大气对流简化模型,包含3个微分方程。Lorenz在1963年证明了这个系统中存在混沌(Lorenz认为由三变量非线性耦合微分方程描述的系统都能产生chaos,1975)。变量X、Y、Z分别表示循环流体的流速、上升和下降流体的温差和垂直温度剖面的畸变。其微分形式如下:
dx=−σ(x−y)dx\mathrm{=}-\sigma\left(x-y\right) dx=−σ(x−y)dy=rx−y−xzdy\mathrm{=}rx-y-xz dy=rx−y−xzdz=−βz+xydz\mathrm{=}-\beta\ z+xy dz=−β z+xy其中控制参数σ=10\sigma\mathrm{=}10σ=10、r=28r\mathrm{=}28r=28、β=8/3\beta\mathrm{=}8/3β=8/3时也叫经典Lorenz系统,本次展示也是用这些参数。经典参数下Lorenz系统最大李亚普诺夫指数计算得2.12,系统最终将走向混沌。同时洛伦兹方程是耗散的,所有的轨迹最终进入吸收域(Viana,2000):Ω={x∈R3:rx2+σy2+σ(z−2r)2<β2r2β−1}\Omega\ \mathrm{=}\left\{ {x\in}\ \mathrm{R^3}: rx^2+σy^2+σ(z-2r)^2< \frac{β^2r^2}{β-1}\right\} Ω ={x∈ R3:rx2+σy2+σ(z−2r)2<β−1β2r2​}这就是那个蝴蝶型的区域,Lorenz吸引子的每一条轨迹在空间上都不重合,并且总不会超出这个区域。

Rossler系统是与人为构造的与Lorenz类似可以产生混沌的系统,并没有实际的物理意义,因此不做过多赘述。其方程如下:
dx=−(y+z)dx=-\left(y+z\right) dx=−(y+z)dy=x+aydy=x+ay dy=x+aydz=b+z(x−c)dz=b+z\left(x-c\right) dz=b+z(x−c)

二、龙格库塔四阶算法

求解上述两个方程组,MATLAB提供ode函数求解,在精度要求不高时,与龙格库塔四阶算法差别不大。龙格库塔四阶算法在每个步长hhh上使用k1、k2、k3、k4k_1、k_2、k_3、k_4k1​、k2​、k3​、k4​四个分别代表开始斜率、考虑k1k_1k1​的中点斜率、考虑k2k_2k2​的中点斜率、考虑k3k_3k3​的末端斜率,取加权平均y(n+1)=y(n)+h6∗(k1+2∗k2+2∗k3+k4)y(n+1)=y(n)+\frac{h}{6}*(k_1+2*k_2+2*k_3+k_4)y(n+1)=y(n)+6h​∗(k1​+2∗k2​+2∗k3​+k4​)这个方法的求解具有4阶精度,跟DDE方法(实质为三阶变步长的龙格库塔算法)精度相近,但是运算更快。其代码如下:

function [t,y]=rk4(f,tspan,y0,n)
%四阶Runge-Kutta算法
%f:dy/dt=f(t,y);求解区间tspan:[t0,tf];初值y0=y(t0)=[x0,y0,z0];n采样点数
h=(tspan(2)-tspan(1))/n;
t=tspan(1):h:tspan(2);
y=zeros(length(y0),length(t));
y(:,1)=y0;
for m=2:length(t)k1=f(t(m-1),y(:,m-1));k2=f(t(m-1)+h/2,y(:,m-1)+k1*h/2);k3=f(t(m-1)+h/2,y(:,m-1)+k2*h/2);k4=f(t(m-1)+h,y(:,m-1)+k3*h);y(:,m)=y(:,m-1)+(k1+2*k2+2*k3+k4)*h/6;
end
t=t';
y=y';
end

其中需要首先传入一个函数的句柄,函数可由如下形式定义:

function dy_dt=lorenz(t,y)
%y=[x,y,z]储存三个变量的矩阵
p=10;
r=28;
b=8/3;dx_dt=p*(y(2)-y(1));
dy_dt=r*y(1)-y(2)-y(1)*y(3);
dz_dt=y(1)*y(2)-b*y(3);dy_dt=[dx_dt;dy_dt;dz_dt];
end

Rossler函数的定义相同,从Lorenz形式的方程和代码很容易写出,这里不做累述。值得一提的是,如果不是做半导体激光器速率方程那样时滞的仿真,实际上只需要简单一行代码调用ode45函数就可以出结果,但是ode函数是变步长的,因此传入的需要传入固定距离的长矩阵(见下文)。

三、混沌吸引子轨迹

运行后(完整代码见附录)即可得到蝴蝶型的吸引子。使用常规的frame方法保存图像如下:(用view函数将图像稍稍转了下)。与自带的ODE函数运行的结果几乎一致。

Rossler吸引子如下:

四、最大李亚普诺夫指数

如何将chaos与“噪声”和“周期特别长的序列”中区别开,最大李指数是一种不错的方法。如果一个系统具有一个正的李指数,那么它就是混沌的;正的数值越大,系统越混沌。因此也有人(吕金虎,2002,如果没记错的话)认为李指数的倒数系统可预测时间的测度,超过这个值,系统将不可预测。

此处参考Wolf博士的程序(at the University of Texas at Austin)。他用BASGEN生成数据库,与用FET生成的时间序列一起应用于监测邻近轨迹的散度来估计最大李指数。FET和BASGEN实际上都使用了延时重建和相空间重构的方法,因此实际上对结果影响较大的参数也就主要是嵌入维度、延时、演化时间,此处分别设为3,10,20。对采样出16384个点的Lorenz系统进行估计。对轨道的检测结果如下如下:
可以看出,在大部分的演化时间里,两个轨道紧紧贴合,发散程度低。下面是FET的输出,第5列是李雅普诺夫指数的估计。第5列是轨道角修正数值。

程序预测出的李指数结果为2.15,与计算值接近,因此Lorenz系统是混沌的。

附:完整程序

y0=[1;0;0];
tspan=[0,1e2];
[t1,y1]=rk4(@lorenz,tspan,y0,1e5);
[t2,y2]=ode45(@lorenz,tspan,y0);
plot3(y1(:,1),y1(:,2),y1(:,3));
figure();plot3(y2(:,1),y2(:,2),y2(:,3));function [t,y]=rk4(f,tspan,y0,n)
%四阶Runge-Kutta算法
%f:dy/dt=f(t,y);求解区间tspan:[t0,tf];初值y0=y(t0)=[x0,y0,z0];n采样点数
h=(tspan(2)-tspan(1))/n;
t=tspan(1):h:tspan(2);
y=zeros(length(y0),length(t));
y(:,1)=y0;
for m=2:length(t)k1=f(t(m-1),y(:,m-1));k2=f(t(m-1)+h/2,y(:,m-1)+k1*h/2);k3=f(t(m-1)+h/2,y(:,m-1)+k2*h/2);k4=f(t(m-1)+h,y(:,m-1)+k3*h);y(:,m)=y(:,m-1)+(k1+2*k2+2*k3+k4)*h/6;
end
t=t';
y=y';
endfunction dy_dt=lorenz(t,y)
%y=[x,y,z]储存三个变量的矩阵
p=10;
r=28;
b=8/3;
dx_dt=p*(y(2)-y(1));
dy_dt=r*y(1)-y(2)-y(1)*y(3);
dz_dt=y(1)*y(2)-b*y(3);
dy_dt=[dx_dt;dy_dt;dz_dt];
end

MATLAB混沌系统仿真其一:Lorenz系统和Rossler系统相关推荐

  1. linux执行class文件_「大数据干货」Windows系统和Linux系统中打jar包与导入语句剖析...

    Jar包是Java中的压缩包格式,同Zip格式一样,用来对.class文件统一管理,如下是在Windows系统和Linux系统中不同的打包和执行.class程序的过程. windows: Linux: ...

  2. ios 系统提示框_经验分享:新购买移动硬盘格式化为Windows系统和Mac系统同时可以使用的方法...

    经常使用硬盘的小伙伴们都知道,新买的移动硬盘,要想在Windows系统使用的话是可以直接使用的,因为一般情况下新买的移动硬盘格式是适用于Windows系统的NTFS格式:如果想让该移动硬盘也能在苹果的 ...

  3. OLTP 系统和 OLAP 系统的核心设计思想

    关于 OLTP 系统和 OLAP 系统的核心设计思想 数据存储系统的关于查询的典型操作: -- 第一种需求: 根据 key(1) 找 value(name,age), 单点查询 select name ...

  4. Android 系统(68)---使用Xshell在Windows系统和Linux系统之间进行文件传输

    使用Xshell在Windows系统和Linux系统之间进行文件传输 Windows系统在安装虚拟机centos系统之后,如何进行两者之间的文件传输和互操作,或者如何在Windows端使用Xshell ...

  5. Linux系统和windows系统mysql5.7.32的下载

    linux系统和windows系统开源社区版mysql下载方法前4步相同,不同的是最后一步. 1. 2. 3. 4. 5.linux系统 6.window系统 http://www.taodudu.c ...

  6. 简述Android操作系统和IOS系统的区别;

    软件测试面试题中: 简述Android操作系统和IOS系统的区别: 1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制. 2.两者后台制度不同:IOS中任何第三方程序都不能在 ...

  7. IOS苹果ipa重签名工具(苹果签名工具,ios签名工具,支持Windows系统和Macos系统)

    此款ios苹果ipa重签名工具支持windows系统和Macos系统,是一款完全免费的IPA签名工具,签名时需要用到p12证书文件和provision描述文件,可以使用ios企业证书.个人证书对IPA ...

  8. 如何快速打通CRM系统和ERP系统,实现业务流程自动化流转

    如何快速打通CRM系统和ERP系统,实现业务流程自动化流转 CRM系统和ERP系统是许多人都熟悉的软件系统,可以说有CRM系统和ERP系统才有一个企业的正常运转.那么为什么要打通跟如何快速打通CRM系 ...

  9. linux系统与window区别,linux系统和windows系统的区别是什么?

    linux系统和windows系统的区别 1.内核不同 Linux操作系统使用Linux内核,Windows操作系统使用NT内核:Linux内核代码开源,NT内核代码闭源,也就是说任何人都可以拿着Li ...

最新文章

  1. gRPC简介及简单使用(C++)
  2. PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软
  3. CSS魔法堂:重拾Border之——图片作边框
  4. elasticsearch插件(4)
  5. php sqlite3菜鸟,SQLite Update 语句
  6. Thread.join()练习
  7. [YTU]_2008( 简单编码)
  8. CSS中的border-radius属性
  9. java解压缩.zip文件
  10. 漫画:如何给初学者讲“为什么计算机只认识 0 和 1”?
  11. junper srx配置思路
  12. 用Python写的WiFi暴力破解工具(字典),已封装!!
  13. 【数学建模】MATLAB应用实战系列(138)-2021年MathorCup高校数学建模挑战赛A题思路解析(附代码)
  14. excel wind插件使用_Python和wind的交互—在债券中的应用
  15. 斜率、梯度(完全不一样的理解)
  16. Unity : Timeout while trying to pause the Unity Engine.应用闪退问题修复
  17. 前端请求数据过多,Promise.all,_.chunk,_.flatten解决方法之一
  18. Vue H5 History 部署IIS上404问题
  19. php数据存储mysql_php mysqli 存储数据库
  20. 写一函数fac(n) 求n!。在主函数中输入a,b,c三个整数,实现求a!+b!+c!的值并输出。

热门文章

  1. 示波器常见电路测试测量
  2. 存储系统“数据之眼”的设计--数据探查服务
  3. 河南中小学教师计算机提高培训,河南中小学教师信息技术应用能力提升工程县校级管理团队集中培训...
  4. 足球经理 2018 for Mac(体育类模拟经营游戏)
  5. openGauss Summit 2021圆满落幕,海量数据助力数据库跨越式发展
  6. 读书笔记--电子电能表的型号含义
  7. 展示火眼金睛 教你学会内存优劣的识别技巧
  8. lol服务器维修时间,英雄联盟2014.1.9维护时间 lol官网服务器维护公告
  9. 基于WIN32 API实现黄金矿工游戏单人版
  10. 软件如何做集成测试,逐步分解教你如何进行集成测试?