第一步: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.