dde23
求解带有固定时滞的时滞微分方程 (DDE)
语法
sol = dde23(ddefun,lags,history,tspan)
sol = dde23(ddefun,lags,history,tspan,options)
参数
| 用于对微分方程 右侧进行计算的函数句柄。此函数必须为以下形式: dydt = ddefun(t,y,Z) 其中 |
| 固定正时滞向量 τ1, ..., τk。 |
| 按以下三种方式之一指定
|
| 从 |
| 可选积分参数。使用 |
说明
sol = dde23(ddefun,lags,history,tspan)
计算 DDE 结构体
在 [t0,tf] 区间上的积分,其中 τ1, ..., τk 为固定正时滞和 t0,tf。输入参数 ddefun
是一个函数句柄。
参数化函数解释了如何为函数 ddefun
提供其他参数(如果需要)。
dde23
以结构体 sol
的形式返回解。使用辅助函数 deval
和输出 sol
来计算区间 tspan = [t0,tf]
中的特定点 tint
的解。
yint = deval(sol,tint)
dde23
返回的结构体 sol
包含下列字段。
|
|
|
|
|
|
| 求解器名称 |
sol = dde23(ddefun,lags,history,tspan,options)
的解算方法与上述方法相同,只是将默认积分属性替换为了 options
(使用 ddeset
创建的参数)中的值。有关详细信息,请参阅 ddeset
和解算时滞微分方程。
常用选项包括标量相对误差容限 'RelTol'
(默认为 1e-3
)和绝对误差容限的向量 'AbsTol'
(默认情况下,所有分量均为 1e-6
)。
使用 'Jumps'
选项解决历史记录或求解中的不连续问题。将此选项设置为一个包含不连续性问题位置的向量,这些不连续性位于 t0
之前的求解中(历史记录),或者位于 t0
之后的 t 已知值位置的等式系数中。
使用 'Events'
选项指定一个函数,dde23
调用该函数来找出函数 消失位置。此函数必须为以下形式
[value,isterminal,direction] = events(t,y,Z)
并包含一个事件函数以测试每个事件。对于 events
中的第 k
个事件函数:
value(k)
是第k
个事件函数的值。如果想要积分在此事件函数为零时终止,则
isterminal(k) = 1
;否则为0
。如果想要
dde23
计算此事件函数的所有零,则direction(k) = 0
;如果仅计算事件函数呈上升趋势时的零,则+1
,如果仅计算事件函数呈下降趋势时的零,则-1
。
如果指定了 'Events'
选项,并且检测到事件,输出结构体 sol
还包括下列字段:
| 包含所有事件位置的行向量,即事件函数消失的时间 |
| 包含特定列数据的矩阵,其列值为与 |
| 索引向量,其中的索引值用于指定在 |
示例
以下示例显示如何在 [0, 5] 区间上对 DDE 求解,其中 lags 为 1 和 0.2。ddex1de
函数计算时滞微分方程,ddex1hist
计算 t <= 0
的历史记录。
注意
文件 ddex1.m
包含此示例的完整代码。要在编辑中查看该代码,请在命令行中键入 edit ddex1
。要运行该代码,请在命令行中键入 ddex1
。
sol = dde23(@ddex1de,[1, 0.2],@ddex1hist,[0, 5]);
此代码在 [0,5]
的区间上以 100 个等间距点计算解,然后绘制结果。
tint = linspace(0,5); yint = deval(sol,tint); plot(tint,yint);
ddex1
显示如何使用局部函数解决此问题。有关更多示例,请参阅 ddex2
。
算法
dde23
跟踪不连续性并使用显式 Runge-Kutta (2,3) 对和插值对 ode23
求积分。它通过迭代来采用超过时滞的步长。
参考
[1] Shampine, L.F. and S. Thompson, “Solving DDEs in MATLAB,” Applied Numerical Mathematics, Vol. 37, 2001, pp. 441-458.
[2] Kierzenka, J., L.F. Shampine, and S. Thompson, “Solving Delay Differential Equations with dde23”
版本历史记录
在 R2006a 之前推出