用Matlab中Simuink仿真Lorenz混沌系统,并画出波形、图像

第一步:Lorenz系统的三阶自治常微分方程组如下

 

其中:a=10;b=8/3;c=28;

第二步:通过微分方程建立Simulink仿真模型

 

注:x,y,z通过函数求出导数、求积分,再返回到x,y,z,从而形成条件限制。

最后将x,y,z数组输出到工作空间

参数以及函数设定如下:

1. 函数fcn中的内容如下:

function dxyz = fcn(xyz)

dxyz = zeros(3,1); %将dxyz初始化为三行一列数组

x=xyz(1);

y=xyz(2);

z=xyz(3); %将数组中的值分别赋给x,y,z

a=10;b=8/3;c=28;

dx = a*(y-x);

dy = c*x-x*z-y;

dz = x*y-b*z; %求解微分方程

dxyz = [dx;dy;dz]; %将各个导数值赋给dxyz

end

2.首先双击积分器,对积分设定初始条件(这里取[8;-1;9]为例)

 3.修改菜单栏中的停止时间,以增加取点个数(这里把10s改为1000s例)

 4.双击To Workspace模块,设置输出到工作空间的变量格式(以二维数组形式)

 第三步:写命令文件lorenz_t.m,对simulink返回工作空间的数组进行处理,形成图像。

1.返回的变量如下

            

 可见xyz是一个数组,其中从头开始,每3个一组为不同取样点的x,y,z。

2. 返回matlab,添加命令文件lorenz_t.m,把其中的x,y,z提取出来,分别放入新建的x,y,z行向量中。

j_x=1;x=[];
for i_x=1:length(out.xyz)
if rem(i_x,3)==1
x(j_x)=out.xyz(i_x);j_x=j_x+1;
end
end

j_y=1;y=[];
for i_y=1:length(out.xyz)
if rem(i_y,3)==2
y(j_y)=out.xyz(i_y);j_y=j_y+1;
end
end

j_z=1;z=[];
for i_z=1:length(out.xyz)
if rem(i_z,3)==0
z(j_z)=out.xyz(i_z);j_z=j_z+1;
end
end
plot3(x,y,z);

 注:可以得知,x,y,z行向量的维度相同,可以用plot(x,y,z)画出三维图像。

第四步:示波器波形、三维图像结果展示

  

 注:停止时间取短一些时,可以看到更清晰的波形,但三维图像略显稀疏。

参考文献:[1]赵海滨,于清文,刘冲,陆志国,颜世玉.基于Matlab/Simulink的混沌同步控制实验[J].实验室研究与探索,2019,38(01):16-19.

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值