基于Simulink的简单时滞微分方程组仿真 | 您所在的位置:网站首页 › simulink延迟环节模块 › 基于Simulink的简单时滞微分方程组仿真 |
今天学习了一些基于Simulink的简单时滞微分方程组仿真,主要用到的模块是“Variable Time Delay”,从效果上来看,目前可以实现一般的时变时滞和中立时滞系统的仿真,但是分布式时滞还不能实现。相对于之前的无时滞的情形,考虑时滞在模块搭建上只需要添加一个时滞的影响,我们还是以例子说话,考虑如下的带有时滞的神经网络系统: $$\dot{x}(t)=-Ax(t)+Bf(x(t))+Cf(x(t-\tau(t))),$$其中,$x(t)=[x_{1}(t),x_{2}(t)]^{T}$,$A=I_{2}$,$f(\cdot)=tanh(\cdot)$,$\tau(t)=1+0.1\sin(t)$,$B=\left[ \begin{matrix} 2 & -0.1\ -5 & 3 \end{matrix} \right]$, $C=\left[ \begin{matrix} -1.5 & -0.1\ -0.2 & -2.5 \end{matrix} \right]$. 如果不考虑最后一项,很容易用下面的框图得到结果: ![]() 相比于之前的代码,这里多了个“Scope”模块,这个模块可以比较方便看到状态图,但是不能直接做出相图,设置好积分器的初值为“[0.1;0.1]”之后,保存此框图,命名为“test2”,双击“Scope”模块,得到下图: ![]() ![]() ![]() ![]() 这一部分就解决了前面两项没有时滞的部分,下面仔细看看时滞怎么处理的。积分器输出的信号是系统的状态,我们可以看到,这个状态传送到了“Variable Time Delay”模块,这个模块有两个输入一个输出,我们假设上面的输入是"u(t)",下面的输入是"To(t)",那么它的输出就是“u(t-To(t))”,这里需要输入的“u(t)”直接就是系统的状态,所以留给我们的任务是“To(t)”该怎么设计。我们可以看到,下面的输入来自一个“Matlab Function2”模块,而“Matlab Function2”模块的输入是一个“Clock”模块,这里“Clock”模块的没有输入,只有输出,它输出当前的仿真时刻,即“t”的值,这里的“Matlab Function2”模块则是时变延迟的表达式,代码如下: function y = fcn(u) y=1+0.1*sin(u);这样逐个解释之后,大家应该能明白,咱们的“Variable Time Delay”模块输出的结果就是“$x(t-\tau(t))$”,我们将这个数据输入到“Matlab Function1”模块,能猜到“Matlab Function1”模块的代码吗?这个模块的输出和上面无时滞的汇合就是咱们整个系统的表达式,所以“Matlab Function1”模块的代码如下: function y = fcn(u) y=u; C=[-1.5 -0.1;-0.2 -2.5]; y=C*tanh(u);以上就是本框图的所有解释,为了得到相图,咱们还是像之前一样,写个m文件,读取输出数据,看看混沌行为,m文件和相图如下: clear all; clc; [t,x]=sim('test2',[0,150]); plot(x(:,1),x(:,2),'b'); xlabel('x_{1}(t)'); ylabel('x_{2}(t)');
2019.10.20 王飞 |
CopyRight 2018-2019 实验室设备网 版权所有 |