ddesd
求解带有常规时滞的时滞微分方程 (DDE)
语法
sol = ddesd(ddefun,delays,history,tspan)
sol = ddesd(ddefun,delays,history,tspan,options)
参量
| 用于对微分方程 y′(t) = f(t,y(t),y(d(1),...,y(d(k))) 的右侧进行计算的函数句柄。此函数必须为以下形式: dydt = ddefun(t,y,Z) 其中 |
| 返回时滞 d(j) 的列向量的函数句柄。时滞取决于 t 和 y(t) 两者。 如果所有时滞函数都采用 d(j) = t – τj 形式,则您可以将参量 |
| 按以下三种方式之一指定
|
| 从 |
| 可选积分参量。使用 |
说明
sol = ddesd(ddefun,delays,history,tspan)
计算 DDE 结构体
在 [t0,tf] 区间上的积分,其中时滞 d(j) 取决于 t 和 y(t) 两者,且 t0 < tf。输入 ddefun
和 delays
均为函数句柄。有关详细信息,请参阅创建函数句柄。
参数化函数解释了如何为函数 ddefun
、delays
和 history
提供其他参数(如果需要)。
ddesd
以结构体 sol
的形式返回解。使用辅助函数 deval
和输出 sol
来计算区间 tspan = [t0,tf]
中的特定点 tint
的解。
yint = deval(sol,tint)
ddesd
返回的结构体 sol
包含下列字段。
|
|
|
|
|
|
| 求解器名称 |
sol = ddesd(ddefun,delays,history,tspan,options)
的解算方法与上述方法相同,只是将默认积分属性替换为了 options
(使用 ddeset
创建的参量)中的值。有关详细信息,请参阅 ddeset
和解算时滞微分方程。
常用选项包括标量相对误差容限 'RelTol'
(默认为 1e-3
)和绝对误差容限的向量 'AbsTol'
(默认情况下,所有分量均为 1e-6
)。
使用 'Events'
选项指定一个 ddesd
调用来找出函数 g(t、y(t)、y(d(1)),...,y(d(k))) 消失位置的函数。此函数必须为以下形式
[value,isterminal,direction] = events(t,y,Z)
并包含一个事件函数以测试每个事件。对于 events
中的第 k
个事件函数:
value(k)
是第k
个事件函数的值。如果想要积分在此事件函数为零时终止,则
isterminal(k) = 1
;否则为0
。如果想要
ddesd
计算此事件函数的所有零,则direction(k) = 0
;如果仅计算事件函数呈上升趋势时的零,则+1
,如果仅计算事件函数呈下降趋势时的零,则-1
。
如果指定了 'Events'
选项,并且检测到事件,输出结构体 sol
还包括下列字段:
| 包含所有事件位置的行向量,即事件函数消失的时间 |
| 包含特定列数据的矩阵,其列值为与 |
| 索引向量,其中的索引值用于指定在 |
示例
方程
sol = ddesd(@ddex1de,@ddex1delays,@ddex1hist,[0,5]);
使用函数 ddex1delays
指定的时滞以及 ddex1de
计算的微分方程对 [0,5]
区间上的 DDE 求解。t ≤ 0 条件下的历史记录由函数 ddex1hist
计算求得。计算时在 [0,5]
区间内放入了 100 个等间距点,以此来求解:
tint = linspace(0,5); yint = deval(sol,tint);
同时使用以下函数绘图:
plot(tint,yint);
此问题涉及固定时滞。delay
函数的格式为
function d = ddex1delays(t,y) %DDEX1DELAYS Delays for using with DDEX1DE. d = [ t - 1 t - 0.2];
该问题也可以使用与固定时滞对应的语法求解
delays = [1, 0.2]; sol = ddesd(@ddex1de,delays,@ddex1hist,[0, 5]);
或使用 dde23
:
sol = dde23(@ddex1de,delays,@ddex1hist,[0, 5]);
有关解时滞微分方程的更多示例,请参阅 ddex2
和 ddex3
。
参考
[1] Shampine, L.F., “Solving ODEs and DDEs with Residual Control,” Applied Numerical Mathematics, Vol. 52, 2005, pp. 113-127.