Main Content

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

ddeset

创建或更改时滞微分方程 options 结构体

语法

options = ddeset('name1',value1,'name2',value2,...)
options = ddeset(oldopts,'name1',value1,...)
options = ddeset(oldopts,newopts)
ddeset

说明

options = ddeset('name1',value1,'name2',value2,...) 用于创建积分器 options 结构体 options,其中给定的属性具有指定的值。任何未指定的属性都具有默认值。仅键入唯一标识属性的前导字符即可。ddeset 不区分属性名称的大小写。

options = ddeset(oldopts,'name1',value1,...) 更改现有 options 结构体 oldopts。这会覆盖 oldopts 中使用名称/值对指定的所有值,并返回修改后的结构体作为输出参数。

options = ddeset(oldopts,newopts) 合并现有 options 结构体 oldopts 和新 options 结构体 newoptsnewopts 中设置的任何值将覆盖 oldopts 中的对应值。

ddeset(不带输入参数)显示所有属性名称及其可能的值,并使用花括号 {} 指示默认值。

使用函数 ddeget 可以在 options 结构体中查询特定属性的值。

DDE 属性

以下各节将介绍可使用 ddeset 设置的属性。属性有多种类别:

误差控制属性

在每个步长中,DDE 求解器都会计算误差 edde23 函数计算局部截断误差,另一个求解器计算残差。在任一情况下,此误差必须小于或等于可接受的误差,可接受的误差由指定的相对误差 RelTol 和指定的绝对误差 AbsTol 共同决定。

|e(i)|*max(RelTol*abs(y(i)),AbsTol(i))

对于常规问题,求解器提供的准确性与所需准确性大致相当。对于在“长”区间中求积分的问题和不稳定性适中的问题,ODE 求解器的准确性较低。复杂问题可能需要比默认值更严格的容差。对于相对准确性,请调整 RelTol。对于绝对误差容限,解分量的标量非常重要:如果 |y| 略小于 AbsTol,则求解器不受获取 y 中的任何正确数字的限制。您可能需要多次解算某个问题,以便发现解分量的标量。

总地说来,这意味着您希望 RelTol 更正所有解分量中的数字(但小于阈值 AbsTol(i) 的解分量除外)。当分量 y(i) 非常小时,即使您对此分量不感兴趣,您仍必须指定足够小的 AbsTol(i),以便获取 y(i) 中的某些正确数字,从而准确计算您更感兴趣的分量。

下表介绍了误差控制属性。

DDE 误差控制属性

属性

描述

RelTol

正标量 {1e-3}

适用于解向量 y 中所有分量的一个相对误差容限。此容差是一种相对于各解分量的大小计算误差的方式。总地说来,它控制所有解分量中的正确数字的数目,但小于阈值 AbsTol(i) 的解分量除外。默认值 1e-3 与精度 0.1% 相对应。

每个积分步长中的计算误差满足 |e(i)|max(RelTol*abs(y(i)),AbsTol(i))

AbsTol

正标量或向量 {1e-6}

适用于解向量中各单个分量的绝对误差容限。AbsTol(i) 是一个阈值,低于此阈值的第 i 个解分量的值将不重要。绝对误差容限确定解趋近于零时的准确性。当分量 y(i) 非常小时,即使您对此分量不感兴趣,您仍必须指定足够小的 AbsTol(i),以便获取 y(i) 中的某些正确数字,从而准确计算您更感兴趣的分量。

如果 AbsTol 为向量,AbsTol 的长度必须与解向量 y 的长度相同。如果 AbsTol 为标量,该值适用于 y 的所有分量。

NormControl

on | {off}

根据解范数控制误差。将此属性设置为 on 可以请求求解器使用 norm(e)<= max(RelTol*norm(y),AbsTol) 控制每个积分步长中的误差。默认情况下,求解器使用更严格的按分量误差控制。

求解器输出参数

可以使用求解器输出属性控制求解器生成的输出。

DDE 求解器输出属性

属性

描述

OutputFcn

函数句柄 {@odeplot}

输出函数是求解器在每个成功积分步长后调用的函数。要指定输出函数,请将 'OutputFcn' 设置为函数句柄。例如,

options = ddeset('OutputFcn',...
@myfun)

OutputFcn 设置为 @myfun,即函数 myfun 的句柄。有关详细信息,请参阅创建函数句柄

输出函数必须采用以下格式

status = myfun(t,y,flag)

参数化函数 解释了如何为 myfun 提供其他参数(如果需要)。

求解器调用具有下列标志的指定输出函数。请注意,调用语法不同于标志。函数必须适当响应:

  • init - 求解器在开始积分之前调用 myfun([tspan(1) tspan(end)],y0,'init') 以允许输出函数初始化。tspan 是求解器的输入参数。y0 是解的初始值,来自 history(t0) 或在 initialY 选项中指定。

  • {none} - 求解器在每个请求输出的积分步长之后调用 status = myfun(t,y),系统将在积分步长中请求输出。t 包含在步长执行过程中生成输出的点,y 是这些点在 t 中的数值解。如果 t 为向量,y 的第 i 个列与 t 的第 i 个元素相对应。

    myfun 必须返回 status 输出值 01。如果 status = 1,求解器会中断积分。例如,您可以使用此机制实现停止按钮。

  • done - 积分完成后,求解器调用 myfun([],[],'done') 以便允许输出函数执行任何清除工作。

您可以使用下列通用输出函数,也可以编辑这些函数以便创建您自己的输出函数。请在命令行中键入 help functionname 以便获取详细信息。

  • odeplot - 时间序列图(调用没有输出参数的求解器且未指定输出函数时的默认设置)

  • odephas2 - 二维相平面图

  • odephas3 - 三维相平面图

  • odeprint – 在求解器计算解时打印解

OutputSel

索引向量

索引向量,用于指定求解器将解的哪些分量传递到输出函数。例如,如果要使用 odeplot 输出函数,但是只想绘制解的第一个和第三个分量,则可以使用以下命令执行此操作

options = ddeset...
('OutputFcn',@odeplot,...
'OutputSel',[1 3]);

默认情况下,求解器将解的所有分量传递给输出函数。

Stats

on | {off}

指定求解器是否应显示有关其计算的统计信息。默认情况下,Statsoff。如果为 on,求解器会在解算问题后显示:

  • 成功步长的数目

  • 失败尝试次数

  • DDE 函数被调用的次数

步长属性

步长属性可用于指定求解器尝试的第一个步长的大小,这可能有助于更好地确定问题的范畴。此外,您还可以指定后续时间步长的大小的边界。

下表介绍了步长属性。

DDE 步长属性

属性

描述

InitialStep

正标量

建议的初始步长。InitialStep 设置求解器尝试的第一个步长的量值的上限。如果不设置 InitialStep,求解器将基于初始时间 tspan(1) 处的解的斜率确定初始步长。初始步长受最短时滞限制。如果所有解分量的斜率为零,则过程尝试的步长可能太大。如果您知道会发生此情况,或者如果您希望确保求解器解析开始积分时的重要行为,请通过提供适当的 InitialStep 来帮助启动代码。

MaxStep

正标量
{0.1*
abs(t0-tf)
}

求解器步长的上限。如果微分方程具有周期性系数或解,最好将 MaxStep 设置为周期的某个小数(例如,1/4)。这可以确保求解器不会将时间步长放大得太大并越过相关周期。切勿减小 MaxStep

  • 当解似乎不够准确时。应减小相对误差容限 RelTol,并使用刚刚计算的解来确定绝对误差容限向量 AbsTol 的相应值。(有关误差容限属性的说明,请参阅误差控制属性。)

  • 为确保求解器不会越过在模拟区间中仅出现一次的某个行为。如果您知道发生更改的时间,请将模拟区间划分为两个部分,并调用两次求解器。如果您不知道发生更改的时间,请尝试减小误差容限 RelTolAbsTolMaxStep 应作为最后一种方法使用。

事件位置属性

在有些 DDE 问题中,特定事件的时间非常重要。当解算问题时,求解器可以通过定位用户定义函数的零值之间的转换来检测此类事件。

下表介绍了 Events 属性。

DDE 事件属性

属性

描述

Events

函数句柄

包含一个或多个事件函数的函数句柄。对于 dde23ddesd,此函数具有以下语法:

[value,isterminal,direction] = events(t,y,YDEL)

对于 ddensd,语法为:

[value,isterminal,direction] = events(t,y,YDEL,YPDEL)

输出参数 valueisterminaldirection 是第 i 个元素与第 i 个事件函数相对应的向量:

  • value(i) 是第 i 个事件函数的值。

  • 如果想要积分在此事件函数为零时终止,则 isterminal(i) = 1;否则为 0

  • 如果要求解器定位所有零(默认设置),则 direction(i) = 0;如果仅定位事件函数呈上升趋势的零值,则为 +1;如果仅定位事件函数呈下降趋势的零值,则为 -1

    如果指定了事件函数,并检测到事件,则求解器会在解结构体 sol 中返回三个附加字段:

  • sol.xe 是代表事件发生时间的行向量。

  • sol.ye 是包含特定列数据的矩阵,其列值为与 sol.xe 中的时间对应的解。

  • sol.ie 是一个索引向量,其中的索引值用于指定在 sol.xe 中的对应时间所发生的事件。

有关在求解常微分方程问题时使用事件函数的示例,请参阅 ODE 事件位置

不连续性属性

求解器函数可以求解历史记录或方程系数中的不连续性问题。下列属性可让您为这些求解器提供不同的初始值,以及为 dde23 提供已知不连续的位置。有关详细信息,请参阅 DDE 中的不连续性

下表介绍了不连续性属性。

DDE 不连续性属性

属性

描述

Jumps

向量

不连续位置。历史记录或解可能存在低阶导数跳跃不连续性的点 t。这只适用于 dde23 求解器。

InitialY

向量

解的初始值。默认情况下,解的初始值是 history 在初始点处返回的值。提供一个不同的初始值作为 InitialY 属性的值。

示例

要创建一个 options 结构体,以将求解器的相对误差容限从默认值 1e-3 更改为 1e-4,请输入

options = ddeset('RelTol',1e-4);

要从 options 恢复 'RelTol' 的值,请输入

ddeget(options,'RelTol')

ans =

  1.0000e-004

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2006a 之前推出

另请参阅

| | |