1. 引言
微分方程是经济学、统计学、工程、科学计算等领域数学建模的基础,也常常被用来描述动态系统,
是微分方程的一般形式,其全部信号都来自于时刻t的当前值。假若微分方程中既有时刻t的当前信号,也有早先时刻的信号值,这种微分方程就被称作延迟微分方程 [1] 。
2. 典型延迟微分方程的数值求解
延迟微分方程的一般形式为
式中
表示延迟常数,要求其为非负数且对应于
状态变量。与普通微分方程的差别在于,此处除了有当前时刻t的信号外,还有先前时刻的信号。因此延迟微分方程(组)的确定除必须有状态向量x和常规标量t外,还需设定
矩阵,
中第j列的列向量
对应于延迟时间向量
例1设
,
且当
时
,试求解方程组。
解:方程组中包含了t,
,
时刻的信号值,故必须设计专门的算法和编写特定的程序来求解该延迟微分方程组,同时要转换成显式一阶方程组。引进一组状态变量
是实现上述转换最便捷高效的方法。原方程组变形为:
再引入时间常数
对应状态变量
、
对应变量
,用MATLAB编写匿名函数描述延迟微分方程,调用MATLAB语句使零向量对应常数初始值,在MATLAB运行程序即可得出该方程组的数值解 [2] ,如图1所示。
3. Simulink环境简介
假设一个系统能够用微分方程来进行描述,则使用前文介绍的求解函数就可以直接得出解。但如果微分方程仅仅是复杂系统中的一部分,输入信号本身由前一个模块传入,整个系统模型又无法用单独一个方程(组)来描述,这种情况下前面使用的求解函数则无能为力。
(a) (b)
Figure 1. (a) The numerical solution of the delay differential equation (The initial condition is zero); (b) The numerical solution of the delay differential equation (The initial condition is non-zero)
图1. (a) 延迟微分方程的数值解(初始条件为零时);(b) 延迟微分方程的数值解(初始条件为非零时)
解决这个问题的最有效途径就是仿真策略并基于框图实现。Matlab下的Simulink环境就是基于框图仿真策略的理想工具。
Math Works公司出品的Simulink,名字中Simu代表仿真,link表示连接,合起来的意思就是连接输入输出信号并且用框图来对某个系统进行仿真。求解微分方程(组)只是其众多的强大功能之一。
Simulink下支持的模块很多,如信号源输入模块组、自定义函数组等,如图2表示的常用模块组中可以自定义的模块组。
Figure 2. Commonly-used custom module groups
图2. 常用模块组中可以自定义的模块组
如图中Transport Delay表示延迟模块,本文正是用该模块来实现延迟微分方程的仿真建模与求解。
4. 延迟微分方程的Simulink建模
Simulink的Continuous组中提供了几个延迟模块,如图3所示,用于提取信号的延迟信息。
Figure 3. The Various delay modules provided by continuous function groups in Simulink
图3. Simulink的Continuous组提供的各种延迟模块
例如,Transport Delay模块描述的是传递函数
,L为延迟时间常数,若模块的输入信号为
,则其输出为
;若Variable Time Delay模块第二输入信号为t0,则输出信号为
,而Variable Transport Delay模块是建立在Variable Time Delay模块基础上的可变传输延迟,第二端口为传输延迟ti,由该值推算出一个等效的时间延迟td,则模块的输出信号为
,其中
。下面将通过例子演示框图构建与仿真方法。
例2考虑例1中的方程组,重写如下:
已知
时
,用Simulink对该延迟微分方程组建模并仿真求解。
解:将方程式二中的
移到等式左边得
表示在等号右边信号的激励下,x(t)传输函数模型
的信号输出;另一个方程式表示在y(t)信号激励下,x(t)传递函数模块
的信号输出。
再在x(t)、y(t)上接入延迟模块Transport Delay,就可以生成这些信号的延迟。如此构建出如图4所示的Simulink仿真模型 [3] 。
Figure 4. Simulink Modeling of the delay differential equation
图4. 延迟微分方程的Simulink建模
再调用语句
;
; %绘图显示仿真结果
得到与上文例1中图1(a)、图1(b)完全相同的曲线。
5. 延迟微分方程的Simulink模型仿真求解
例3已知延迟微分方程
其中,输入信号
,且已知矩阵为
试用Simulink搭建系统模型,并求出该方程的数值解。
解:因为方程中同时包含
和
项,所以单纯采用函数直接求解是无能为力的。可以采用Simulink仿真模型来求解。在构建框图前,在Matlab中先通过语句来生成已知矩阵,
因为状态向量
已经存在,只需添加一个积分器就可以构成输入端
、输出端
,之后给这两端信号接入延迟环节,设置适当的延迟时间常数,这样经过一系列处理就构建出如图5的Simulink框图模型。
Figure 5. Simulink Modeling with the delay differential equation
图5. 带有导数延迟的微分方程的Simulink模型
再调用程序
;
; %将仿真结果绘图
得仿真解如图6所示 [4] 。
Figure 6. The Simulated experimental result of the delay differential equation
图6. 延迟微分方程的仿真实验结果
例4已知
各状态变量的初始条件均为零。试用仿真框图求解方程组。
解:要定义状态变量向量
,也需要添加一个向量型积分器,由信号
,
,
,t
等构成Mux模块的向量输出,得图7所示的仿真框图 [5] 。
Figure 7. The Simulink model of the variable time delay differential equation
图7. 变时间延迟微分方程的 Simulink模型
图7中,使用Variable Time Delay模块实现变延迟时间,
代表第二路输入延迟,求得延迟微分方程的数值解如图8所示。
Figure 8. The simulated experimental numerical solution of the variable time delay differential equation
图8. 变时间延迟微分方程的仿真实验数值解