赵海滨, 于清文, 刘 冲, 陆志国, 颜世玉
(东北大学 机械工程与自动化学院, 沈阳 110819)
混沌是非线性动力系统的固有特性,是非线性系统普遍存在的现象,广泛存在于自然界和人类社会中[1]。混沌控制在工程技术上具有重大的研究价值和诱人的应用前景,成为非线性科学研究的热点之一,引起了广泛的关注。混沌同步应用于保密通信[2-3]具有保密程度好,信息量大等优点,是目前研究的热点。
越来越多的院校将蔡氏混沌电路[4-7]用于模拟混沌效应,取得了一定的效果,但是存在实验设计复杂,结果不够形象和直观,教学内容呆板等问题。采用Matlab/Simulink软件进行混沌系统的建模和同步控制能够克服这些缺点,为混沌理论的教学和科研提供了一个新的辅助手段。
本文采用Matlab/Simulink软件对Lorenz混沌系统进行建模和同步控制。根据Lorenz混沌系统的微分方程,给出了4种建模方法进行建模,并对这些方法进行了分析。通过状态线性反馈方法进行了Lorenz混沌系统的同步控制。利用Matlab/Simulink软件进行混沌系统的建模和同步仿真实验,弥补了传统物理实验和混沌电路的不足,把抽象的混沌问题进行简明、直观的展示,可以加深学生对混沌现象本质的认识,了解混沌的同步控制方法,激发学生的学习兴趣,为混沌理论和实验教学提供了新途径。
随着科学技术、仿真理论及计算机的不断发展,仿真技术不断提高,已经成为现在科学研究不可缺少的手段。将仿真技术应用于科学研究中,不仅能够提高科学研究的水平,还能缩短科学研究的周期,最主要的是能降低科学研究的成本及风险。Matlab软件功能强大、使用简单方便,并且对问题的描述和求解符合人们的思维习惯和数学表达习惯,已经广泛应用于动态系统仿真[8-9]。Matlab软件不仅可以用于连续系统和离散系统,还可以用于线性系统和非线性系统。Simulink是Matlab软件最重要的组件之一,能够进行系统建模、仿真和综合分析等[10],通过和外界硬件的接口还可以建立半实物仿真和实时控制实验。利用Matlab软件进行混沌系统的仿真实验具有良好的可控性、重复性、易观察和经济性等优点,有望为科研和教学工作提供新的辅助手段。Matlab/Simulink软件非常适合进行混沌系统的建模和仿真[11-13],因此本文采用Matlab/Simulink软件建立混沌同步控制实验。
Lorenz系统作为第一个混沌的物理和数学模型,极大地激励和推动了混沌学的理论发展和后来混沌在许多工科学科中的应用。Lorenz系统作为混沌的一个数学抽象,说明了一个确定性的系统能够以最简单的方式展现出非常复杂的形态。Lorenz系统的方程为:
(1)
式中:x、y和z为系统的状态变量;a、b和c为固定值。当a=10,b=8/3,c=28时,Lorenz系统进入混沌状态。下面通过4种方法进行Lorenz混沌系统的建模和仿真。
在Matlab软件中,函数ode 45( )表示采用4-5阶Runge-Kutta算法进行常微分方程的数值求解。本文首先采用函数ode 45( )进行Lorenz系统的建模,脚本程序为:
clear; close all;
a=10; b=8/3; c=28;
Lorenz=@(t, x) ([a*(x(2)-x(1)); …
c*x(1)-x(1)*x(3)-x(2); x(1)*x(2)-
b*x(3)]);
op=odeset(’RelTol’, 1e-5);
[t, xyz]=ode45(Lorenz,[0 50],[2,-2,2],op);
figure; plot3(xyz(:, 3), xyz(:, 2), xyz(:, 1));
xlabel(’z’); ylabel(’y’); zlabel(’x’);
figure; plot(xyz(:, 1), xyz(:, 2));
xlabel(’x’); ylabel(’y’);
figure; plot(t, xyz(:, 1));
xlabel(’t /s’); ylabel(’x’);
在程序中用匿名函数来描述混沌系统的微分方程,然后采用函数ode 45( )对微分方程进行数值求解。系统的仿真的时间为50 s, Lorenz系统的初始值为x(0)=2,y(0)=-2,z(0)=2。Lorenz混沌系统中,3个状态变量的三维相空间曲线,如图1所示;状态变量x和y的二维相空间曲线,如图2所示;状态变量x随时间t的变化曲线,如图3所示。
图1 Lorenz系统的三维相空间曲线
图2 x和y的二维相空间曲线
图3 x随时间t的变化曲线
在Simulink中,采用基本的模块进行Lorenz系统的建模,如图4所示。微分方程中的每一个微分量对应一个积分模块,并对积分模块的初始值进行设置。在图4中,利用Simulink中的Scope模块显示各个状态变量的响应。系统的状态变量保存到Matlab软件的工作空间中,然后可以采用绘图函数绘制相空间曲线。
图4 采用基本模块进行Lorenz系统建模
在Simulink中很多模块都支持向量化输入,可以把多路信号用Mux模块变为一路信号,然后采用Simulink模块库中的Fcn模块进行建模。利用Fcn模块和积分模块对Lorenz系统进行建模,如图5所示,和图4的模型相比更加的简洁,而且不容易出错,易于修改。
图5 采用Fcn模块进行Lorenz系统建模
对于复杂的系统,还可以采用Simulink中用户自定义函数中的Matlab Function模块。Matlab Function模块简称M函数模块,可以直接采用Matlab语言直接描述微分方程,更加的方便和简洁。利用M函数模块和积分模块进行Lorenz系统建模,如图6所示。
在图6中,Matlab Function模块内的程序代码为:
function dxyz = fcn(xyz)
x=xyz(1); y=xyz(2); z=xyz(3);
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];
图6 采用M函数模块进行Lorenz系统建模
本文的同步控制实验,采用状态线性反馈方法。该方法是通过反馈差信号的调节作用,使响应系统的演化轨道逐渐靠近驱动系统的目标轨道,直到两者重合[14]。假设驱动系统和响应系统,分别用(x1,x2,x3)和(y1,y2,y3)表示其状态向量。驱动系统的状态方程表示为:
(2)
响应系统的状态方程表示为:
(3)
式中:u1、u2和u3为控制输入。当u1=u2=u3=0时,由于混沌系统对初值的敏感性,当初值不同时驱动系统和响应系统不能实现同步。
定义同步误差为e1=y1-x1;e2=y2-x2;e3=y3-x3。当u1=-k1e1;u2=-k2e2;u3=-k3e3时,基于状态线性反馈的响应系统为:
(4)
采用M函数模块和积分模块等建立混沌同步控制实验,如图7所示。在图7中,驱动系统的初始状态为x1(0)=2,x2(0)=-2,x3(0)=2,响应系统的初始状态为y1(0)=5,y2(0)=5,y3(0)=5。
图7 混沌同步控制实验
在仿真过程中,采用变步长的ode 45算法,最大步长为1 ms,仿真时间为50 s。混沌同步控制实验运行后,混沌同步控制曲线如图8所示(只显示了前30 s),很快就实现了响应系统和驱动系统的同步,并具有很好的稳定性。
(a) x1和y1的同步曲线
(b) x2和y2的同步曲线
(c) x3和y3的同步曲线
混沌同步控制实验运行后,状态变量的同步误差如图9所示(只显示了前8 s)。
图9 同步控制误差
采用状态线性反馈进行两个Lorenz混沌系统的同步控制,在0.8 s就实现了驱动系统和响应系统的同步,同步速度非常快。
本文采用Matlab/Simulink软件对Lorenz混沌系统进行建模和同步控制。根据Lorenz系统的微分方程,给出了4种建模方法进行Lorenz系统的建模,并对这些建模方法进行了分析。通过状态线性反馈方法进行了Lorenz混沌系统的同步控制。通过利用Matlab/Simulink软件进行混沌系统的建模和同步仿真实验,弥补了传统物理实验的不足,把抽象的混沌问题进行简明、直观的展示,可以加深学生对混沌现象本质的认识,了解混沌的同步控制方法,为混沌理论和实验教学提供了新途径。