Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

ddensd

求解中立型时滞微分方程 (DDE)

说明

示例

sol = ddensd(ddefun,dely,delyp,history,tspan) 计算以下形式的中立型时滞微分方程组的积分:

y '(t) = f(t, y(t), y(dy1),..., y(dyp), y '(dyp1),..., y '(dypq))(1)
,其中

  • t 是表示时间的自变量。

  • dyi 是任何 p 解时滞。

  • dypi 是任何 q 导数时滞。

sol = ddensd(ddefun,dely,delyp,history,tspan,options) 将默认积分参数替换为在使用 ddeset 函数创建的结构体 options 中指定的参数。

示例

全部折叠

对 Paul 提出的以下中立型 DDE 求解 ($0 \le t \le \pi$)。

$$y'(t) = 1 + y(t) - 2y(t/2)^2 - y'(t-\pi)$$

$t \le 0$ 的解历史记录为 $y(t) = \cos(t)$

在编辑器中打开一个新程序文件。此文件包含一个主函数和四个局部函数。

将一阶 DDE 定义为名为 ddefun 的局部函数。

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end

将解时滞定义为名为 dely 的局部函数。

function dy = dely(t,y) 
    dy = t/2;
end

将导数时滞定义为名为 delyp 的局部函数。

function dyp = delyp(t,y) 
    dyp = t-pi;
end

将解历史记录定义为名为 history 的局部函数。

function y = history(t)
    y = cos(t);
end

定义积分区间并使用 ddensd 对 DDE 求解。将此代码添加到主函数。

tspan = [0 pi];
sol = ddensd(@ddefun,@dely,@delyp,@history,tspan);

$0$$\pi$ 之间以 100 个等间距点计算解。将此代码添加到主函数。

tn = linspace(0,pi);
yn = deval(sol,tn);

绘制结果。将此代码添加到主函数。

plot(tn,yn);
xlim([0 pi]);
ylim([-1.2 1.2]);
xlabel('time t');
ylabel('solution y');

运行整个程序以计算解并显示绘图。文件 ddex4.m 包含此示例的完整代码。要在编辑中查看该代码,请在命令行中键入 edit ddex4

输入参数

全部折叠

导函数,指定为函数句柄,其语法为 yp = ddefun(t,y,ydel,ypdel)ddefun 的参数见下表所述。

ddefun 参数描述
t表示当前时间值 t 的标量值。
y公式 1 表示 y(t) 的向量。此向量的大小为 n x 1,其中 n 是您需要求解的方程组中的方程数。
ydel由表示 y(dyi) 的列 ydel(:,i) 构成的矩阵。此矩阵的大小为 n x p,其中 n 是您需要求解的方程组中的方程数,p公式 1 中的 y(dy) 项的数量。
ypdel由表示 y(dypj) 的列 ypdel(:,j) 构成的矩阵。此矩阵的大小为 n x q,其中 n 是您需要求解的方程组中的方程数,q公式 1 中的 y '(dyp) 项的数量。
ypddefun 返回的结果。它是一个 n x 1 向量,其元素表示公式 1 的右侧。

解时滞,指定为函数句柄,会在公式 1 中返回 dy1,..., dyp。您也可以通过向量形式传递固定时滞。

如果将 dely 指定为函数句柄,语法必须为 dy = dely(t,y)。此函数的参数见下表所述。

dely 参数描述
t表示当前时间值 t 的标量值。
y公式 1 表示 y(t) 的向量。此向量的大小为 n x 1,其中 n 是您需要求解的方程组中的方程数。
dydely 函数返回的向量,其值为公式 1 中的解时滞 dyi。此向量的大小为 p x 1,其中 p 是方程中的解时滞数。每个元素必须小于或等于 t。

如果想要指定 dyi = t – τi 形式的固定解时滞,则 dely 必须是向量,其中 dely(i) = τi。此向量中的每个值必须大于或等于零。

如果问题中不存在 dy,则将 dely 设置为 []

数据类型: function_handle | single | double

导数时滞,指定为函数句柄,会在公式 1 中返回 dyp1,..., dypq。您也可以通过向量形式传递固定时滞。

如果 delyp 是一个函数句柄,则其语法必须是 dyp = delyp(t,y)。此函数的参数见下表所述。

delyp 参数描述
t表示当前时间值 t 的标量值。
y公式 1 表示 y(t) 的向量。此向量的大小为 n x 1,其中 n 是您需要求解的方程组中的方程数。
dypdelyp 函数返回的向量,其值为公式 1 中的导数时滞 dypj。此向量的大小必须为 q x 1,其中 q 是方程中的解时滞 dypj 的数量。dyp 的每个元素必须小于 t。此限制有一个例外:如果您是在求解初始值 DDE,则 dyp 的值在 t = t0 时可以等于 t。有关详细信息,请参阅初始值中立型时滞微分方程

如果想要指定 dypi = t – τi 形式的固定导数时滞,则 delyp 必须是向量,其中 delyp(j) = τj。此向量中的每个值必须大于零。对于这一限制,当求解中立型 DDE 初始值时,会出现例外情况。在这种情况下,当 t = t0 时,delyp 可以等于零。有关详细信息,请参阅初始值中立型时滞微分方程

如果问题中不存在 dyp,则将 delyp 设置为 []

数据类型: function_handle | single | double

解历史记录,指定为函数句柄、列向量、sol 结构体(来自之前积分)或元胞数组。这是 t ≤ t0 处的解。

  • 如果历史记录随着时间发生变化,则将解历史记录指定为一个语法为 y = history(t) 的函数句柄。此函数为 t <= t0 返回由 y(t) 的近似解组成的 n x 1 向量。此向量的长度为 n,是您需要求解的方程组中的方程数。

  • 如果 y(t) 是常量,您可以将 history 指定为一个 n-1 的常量值向量。

  • 如果想要调用 ddensd 以将之前的积分继续到 t0,可以将历史记录指定为来自之前积分的输出 sol

  • 如果要求解初始值 DDE,请将历史记录指定为元胞数组 {y0, yp0}。第一个元素 y0 是初始值 y(t0) 的列向量。第二个元素 yp0 是元素为初始导数 y '(t0) 的列向量。这些向量必须保持一致,也就是说它们必须满足 t0 处的公式 1。有关详细信息,请参阅初始值中立型时滞微分方程

数据类型: function_handle | single | double | struct | cell

积分区间,指定为向量 [t0 tf]。第一个元素 t0 是 t 的初始值。第二个元素 tf 是 t 的最终值。t0 的值必须小于 tf

数据类型: single | double

可选积分参数,指定为由 ddeset 函数创建和返回的结构体。一些常用属性包括:'RelTol''AbsTol''Events'。有关指定 options 的详细信息,请参阅 ddeset 参考页面。

输出参数

全部折叠

解,以包含下列字段的结构体形式返回。

sol.xddensd 选择的网格。
sol.y网格点处的 y(t) 近似值。
sol.yp网格点处的 y′(t) 近似值。
sol.solver标识求解器 'ddensd' 的字符向量。

您可以将 sol 传递到 deval 函数以计算特定点的解。例如,y = deval(sol, 0.5*(sol.x(1) + sol.x(end))) 计算积分区间中点处的解。

详细信息

全部折叠

初始值中立型时滞微分方程

初始值 DDE 具有 dyi≥t0 并且 dypj≥t0(对于所有 i 和 j)。在 t = t0 处,所有时滞项降低为 y(dyi) = y(t0) 和 y '(dypj) = y '(t0):

y '(t0) = f(t0, y(t0), y(t0),..., y(t0), y '(t0),..., y '(t0))(2)
对于 t > t0,所有导数时滞必须满足 dyp < t。

求解初始值中立型 DDE 时,必须为 ddensd 提供 y '(t0)。为此,请将 history 指定为元胞数组 {Y0,YP0}。其中,Y0 是初始值 y(t0) 的列向量,YP0 是初始导数 y '(t0) 的列向量。这些向量必须保持一致,也就是说它们必须满足 t0 处的公式 2

算法

有关此求解器使用的算法的信息,请参阅 Shampine [2]

参考

[1] Paul, C.A.H. “A Test Set of Functional Differential Equations.” Numerical Analysis Reports. No. 243. Manchester, UK: Math Department, University of Manchester, 1994.

[2] Shampine, L.F. “Dissipative Approximations to Neutral DDEs.” Applied Mathematics & Computation. Vol. 203, Number 2, 2008, pp. 641–648.

版本历史记录

在 R2012b 中推出

另请参阅

| | |