主要内容

奥德塞特

为ODE和PDE求解器创建或修改选项结构

描述

例子

选项= odeset (名称,值,……)创建可作为参数传递给ODE和PDE解算器的选项结构。在该结构中,选项,命名的选项具有指定的值。任何未指定的选项都具有默认值。例如,选项=odeset('RelTol',1e-3)返回一个带有雷托设置为1 e - 3

例子

选项= odeset (oldopts,名称,值,……)修改现有的选项结构,oldopts,使用新指定的名称值参数。这将覆盖指定选项的所有旧值,并将新选项的值添加到结构中。

例子

选项= odeset (oldopts,新选择)修改现有的选项结构,oldopts,通过将其与新的期权结构相结合,新选择.任何新选项不等于[]覆盖中对应的选项oldopts

奥德塞特如果没有输入参数,则显示所有可能的选项名及其可能的值。默认值用{}(在适用情况下)。

例子

全部折叠

创建包含的值的选项结构雷托AbsTol

选项=odeset(“雷托”,1e-8,“AbsTol”,1e-10);

更新AbsTol在现有的期权结构中。

选项=odeset(选项,“AbsTol”,1e-9)
选择=结构体字段:文章摘要:1.0000e-09 BDF:[]事件:[]初始步骤:[]雅可比数:[]JConstant:[]j模式:[]质量:[]质量奇异:[]最大阶数:[]最大阶数:[]非负:[]标准控制:[]输出FCN:[]输出选择:[]优化:[]RelTol:1.0000e-08统计:[]矢量化:[]MSStateDependence:[]MvPattern:[]初始斜率:[]

创建两个选项结构。

opts_1=odeset(“雷托”,1e-8,“AbsTol”,1e-9,“OutputFcn”@odeplot,“统计数据”,“上”);
opts_2 = odeset (“质量”,@(t)[t0;0-t],“MStateDependence”,“没有”,...“MassSingular”,“不”,“OutputFcn”,@odephas2);

合并期权结构,给予优先选择2。因为两个结构都包含不同的输出FCN的值选择2取代在里面的选项1

opts=odeset(opts_1,opts_2)
选择=结构体字段:文章摘要:1.0000e-09 BDF:[]事件:[]初始步骤:[]雅可比数:[]联合常数:[]JPattern:[]质量:@(t)[t,0;0,-t]质量奇异:“否”最大顺序:[]最大步骤:[]非负性:[]标准控制:[]输出FCN:@odephas2输出选择:[]优化:[]相关:1.0000e-08统计:“on”矢量化:[]MSStateDependence:“none”MvPattern:[]斜率:[]

输入参数

全部折叠

旧选项结构,指定为以前使用创建的结构奥德塞特

数据类型:结构体

新选项结构,指定为先前使用奥德塞特

数据类型:结构体

名称值参数

指定可选的逗号分隔的对名称,值论据。的名字参数名和价值观是对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值

例子:选项=odeset('absol',1e-3,'Reltol',1e-2,'Jacobian',@J,'Mass',M)指定绝对和相对误差公差的阈值、返回雅可比矩阵的函数和数值质量矩阵。
差错控制

全部折叠

相对误差容限,指定为逗号分隔对,由“雷托”一个正标量。这个公差测量相对于每个解决方案组件的大小的误差。粗略地说,它控制了除小于绝对公差外的所有溶液组分中正确位数的数量AbsTol

在每一步,ODE求解器估计局部误差E溶液的第一个分量。为了成功,步骤必须有可接受的误差,由相对误差和绝对误差公差决定:

|e(i)<=max(RelTol*abs(y(i)),absol(i))

例子:选择= odeset (RelTol, 1 e-5 AbsTol, 1 e)

数据类型:|

绝对容错,指定为逗号分隔对,由“AbsTol”一个正的标量或向量。这个公差是一个阈值,低于这个阈值的解决方案的值将变得不重要。如果解决方案|y|小于AbsTol,则解算器不需要在中获取任何正确的数字|y|.因此AbsTol应考虑解决方案组件的规模。

如果AbsTol是一个向量,那么它的长度必须与解相同。如果AbsTol是标量,则该值适用于所有解决方案组件。

在每一步,ODE求解器估计局部误差E溶液的第一个分量。为了成功,步骤必须有可接受的误差,由相对误差和绝对误差公差决定:

|e(i)<=max(RelTol*abs(y(i)),absol(i))

例子:选择= odeset (RelTol, 1 e-5 AbsTol, 1 e)

数据类型:|

相对于解决方案范数的控制错误,指定为逗号分隔对,由“NormControl”“上”“关”. 什么时候NormControl“上”,求解器控制误差E在每个步骤中,使用溶液的范数而不是其绝对值:

范数(e(i))<=max(RelTol*norm(y(i)),absol(i))

例子:选择= odeset(“NormControl”,“上”)

数据类型:烧焦|字符串

解算器输出

全部折叠

非负解组件,指定为逗号分隔对,由“非负”一个标量或向量。标量或向量选择哪个解分量必须是非负的。

非负不适用于ode23sode15i.此外ode15s,ode23t,及ode23tb它不适用于有质量矩阵的问题。

例子:opts=odeset('非负',1)指定第一个解决方案组件必须是非负的。

数据类型:|

输出函数,指定为逗号分隔对,由“OutputFcn”和一个函数句柄。ODE求解器在每个成功的时间步骤之后调用输出函数。如果调用没有输出的ODE求解器,则输出函数默认为@odeplot,在计算时绘制所有解决方案组件。否则,默认值为[]

这些是可以使用的内置输出函数输出FCN:

函数名 描述
奥德普洛特 绘制解决方案的所有组成部分与时间的对比图
odephas2 前两个溶液组分的二维相平面图
odephas3 前三个溶液组分的三维相平面图
奥德列特 打印解决方案和时间步长

如果您编写一个自定义输出函数,那么它的形式必须是

状态= myOutputFcn (t、y、旗)

输出函数还必须适当响应这些标志:

描述
“初始化”

解算器调用myOutputFcn ([tspan (1) tspan(结束)],y0,“init”)在开始集成之前,允许输出函数初始化。tspany0是ODE求解器的输入参数。

[]

解算器调用状态=myOutputFcn(t,y,[])在请求输出的每个集成步骤之后。T包含在步骤中生成输出的点,以及Y是中各点的数值解T.如果T是向量,那么th列Y对应于th元素T

  • 如果长度(tspan) > 2,则会在中的每个点生成输出tspan

  • 如果长度(tspan) = 2,然后根据完善选择权。

肌注必须返回状态为01..如果状态= 1,则解算器停止集成。例如,您可以使用此机制来实现停止按钮。

“完成”

解算器调用myOutputFcn([],[],“完成”)集成完成后,允许输出函数执行清理任务。

数据类型:功能手柄

输出函数的组件选择,指定为由逗号分隔的对组成“OutputSel”和一个索引向量。该向量指定要传递给输出函数的解的哪些分量。

例子:opts = odeset('OutputFcn',@myFcn,'OutputSel',[1 3])将解决方案的第一个和第三个组件传递给输出函数。

解的细化因子,指定为逗号分隔对组成“精炼”和一个标量。标量指定在每个步骤中输出点的数量应该增加的一个因子。

的默认值完善对于大多数求解器来说是1.,但ode45使用默认值4.,而奥德78ode89使用默认值8.. 这些解算器使用较大的默认值来补偿他们采取较大步骤的倾向。

  • 如果细化因子为1.,则求解器仅在每一步结束时返回解。万博 尤文图斯

  • 如果细化因子为n>1,然后求解器将每个步骤细分为N较小的间隔,并在每个点返回解决方案。万博 尤文图斯

通过连续扩展公式计算出细化因子产生的额外值。这些是ODE求解器使用的专门公式,用于在计算时间步之间获得精确的解,而不会显著增加计算时间。万博 尤文图斯

完善不适用于以下情况:长度(tspan) > 2,或当ODE解算器以结构形式返回解决方案时。

例子:选择= odeset(“细化”,5)将输出点数增加五倍。

解算器统计信息,指定为逗号分隔对,由“统计数据”“上”“关”. 什么时候“上”,解算器在完成解决方案后显示信息:

  • 成功的步骤数

  • 失败尝试的次数

  • 调用ODE函数进行计算的次数 F ( T , Y )

隐式求解器显示关于解决方案的附加信息:

  • 偏导数矩阵 F / Y 形成

  • 逻辑单元分解的数量

  • 线性系统解的个数万博 尤文图斯

例子:opts=odeset('Stats','on')

数据类型:烧焦|字符串

步长

全部折叠

建议的初始步长,指定为逗号分隔对,由“InitialStep”一个正标量。InitialStep设置解算器尝试的第一步大小大小的上限。

如果未指定初始步长,则解算器将初始步长基于初始时间点的解的坡度,尖沙咀(1)。如果所有解决方案组件的坡度均为零,则解算器可能会尝试过大的步长。如果您知道这一情况,或者如果您希望确保解算器在积分开始时解决重要行为,请使用InitialStep提供合适的初始步长。

例子:opts=odeset('InitialStep',1e-3)设置的上限1 e - 3初始步骤的大小。

最大步长,指定为逗号分隔的对,由“MaxStep”一个正标量。最大步长设置解算器采取的任何步骤的大小上限。例如,如果方程具有周期性行为,则设置最大步长以确保求解器不会将步长扩大到超出感兴趣区域的程度。

  • 不要使用最大步长只是为了获得更多的输出点,因为这会显著降低集成速度完善以较低的计算成本计算附加点的选项。

  • 不要使用最大步长提高溶液的准确度。如果溶液不够准确,则降低雷托并使用该溶液确定合适的AbsTol

  • 避免使用最大步长确保解算器不会跳过某些在积分间隔中只发生一次的行为。如果您知道该行为发生的时间,请将间隔分成两部分,并调用解算器两次。如果您不知道更改发生的时间,请尝试减少雷托AbsTol.使用最大步长这是不得已而为之。

例子:opts=odeset('MaxStep',1e-2)

活动地点

全部折叠

事件函数,指定为逗号分隔对,由“事件”和函数句柄,例如@myEventsFcn

函数签名

颂歌:由函数句柄指定的事件函数必须具有通用形式

(价值、isterminal方向)= myEventsFcn (t, y)

对pde:由函数句柄指定的事件函数必须具有通用形式

[value,isterminal,direction]=myEventsFcn(m,t,xmesh,umesh)

在这两种情况下,价值,伊斯特米纳尔,及方向向量是谁的th元素对应于th事件功能:

  • 价值(一)是这个值吗th事件函数。

  • isterminal (i) = 1如果积分终止于此事件函数的0,则为0

  • 方向(i)=0如果要定位所有零(默认)。值为+1只在事件函数增加的地方定位为零,并且-1只在事件函数减少的地方定位为零。

看见参数化函数查看如何向事件函数传递额外的输入。

事件输出

如果指定事件函数,则可以使用三个额外的输出参数调用解算器,例如

[t,y,te,ye,ie]=odeXY(odefun,tspan,y0,选项)

解算器返回的三个附加输出对应于检测到的事件:

  • te事件发生时间的列向量。

  • 解决方案的值是否与事件中的时间相对应te

  • 是由事件函数返回的向量的索引。这些值指示求解器检测到的事件。

或者,您可以使用单个输出作为调用求解器

sol=odeXY(odefun、tspan、y0、选项)

在这种情况下,事件信息存储在结构中,如下所示sol.te,sol.ye,及sol.ie

诊断

ODE/PDE求解器与事件函数结合使用的根查找机制有以下限制:

  • 如果在集成的第一步中发生终端事件,那么求解器将该事件注册为非终端事件并继续集成。

  • 如果在第一步中发生多个终端事件,则只注册第一个事件,求解器将继续集成。

  • 0是由步骤之间的交叉符号决定的。因此,步骤之间交叉次数为偶数的零可能会被忽略。

如果求解器步进过去的事件,尝试减少雷托AbsTol提高准确性。另外,组最大步长设置步长的上限。调整tspan不改变求解器所采取的步骤。

例子

数据类型:功能手柄

雅可比矩阵

全部折叠

雅可比矩阵,指定为逗号分隔对,由的雅可比矩阵以及求雅可比矩阵的矩阵或函数。雅可比矩阵是定义微分方程的函数的偏导数的矩阵。

J = F Y = [ F 1. Y 1. F 1. Y 2. F 2. Y 1. F 2. Y 2. ]

对于刚性ODE求解器(ode15s,ode23s,ode23t,ode23tb,及ode15i),提供有关雅可比矩阵的信息对于可靠性和效率至关重要。如果不提供雅可比矩阵,则ODE解算器将使用有限差分在数值上对其进行近似。

对于ode15i只有字体雅可比矩阵选项必须为两者指定矩阵 F Y F Y ' 。您可以将这些矩阵作为两个常量矩阵的单元格数组提供 { F Y , F Y ' } ,或作为计算矩阵并具有一般形式的函数

[dfdy,dfdp]=Fjac(t,y,yp)

对于非常大的系统,它是不可行的提供整个解析雅可比矩阵,使用JPattern属性传递雅可比矩阵的稀疏模式。解算器使用稀疏模式计算稀疏雅可比矩阵。

例子:选择= odeset(雅可比矩阵,@J)指定函数J计算雅可比矩阵。

例子:opts=odeset('Jacobian',[01;-21])指定一个常数雅可比矩阵。

例子:opts=odeset('Jacobian',{A,Ap})指定两个常数雅可比矩阵用于ode15i

数据类型:||细胞|功能手柄

雅可比稀疏模式,指定为逗号分隔对,由“JPattern”和一个稀疏矩阵。稀疏矩阵包含1.s,其中雅可比矩阵中可能有非零项。ODE解算器使用稀疏模式以数字方式生成稀疏雅可比矩阵。当ODE系统较大且无法提供分析雅可比矩阵时,使用此选项可缩短执行时间。

对于ode15i只有:设置JPattern选项使用包含两个稀疏矩阵的单元数组{dfdyPattern,dfdypPattern},这是稀疏模式 F Y F Y '

如果你指定一个雅可比矩阵雅可比矩阵,则解算器将忽略该对象的任何设置JPattern

例子:opts=odeset('JPattern',S)使用稀疏矩阵指定雅可比稀疏模式s

例子:opts=odeset('JPattern',{dFdy,dFdyp})指定两个常数的雅可比稀疏模式,用于ode15i

数据类型:|细胞

矢量化函数切换,指定为逗号分隔对,由“矢量化”或者“关”“上”。使用此选项通知ODE解算器该函数已编码,以便它接受并返回第二个参数的向量。即,f (t, y1 y2 y3……)返回[f(t,y1) f(t,y2) f(t,y3)…]. 与一次评估一个值相比,此矢量化允许解算器减少计算雅可比矩阵所有列所需的函数评估数量,并可能显著减少求解时间。看见数组与矩阵运算有关支持矢量化的元素运算符的说明。万博1manbetx

对于ode15i只有:设置矢量化选项使用两个元素的单元格数组。将第一个元素设置为“上”如果f(t[y1,y2,…],yp)返回[f(t,y1,yp),f(t,y2,yp),…]。将第二个元素设置为“上”如果f (t y [yp1, yp2,…])返回(f (t y yp1), f (t y yp2)…]。的默认值矢量化在这种情况下是{'off','off'}

如果你指定一个雅可比矩阵雅可比矩阵,则解算器将忽略“上”矢量化

例子:opts=odeset('JPattern',S,'vectoriated','on')指定函数被向量化,并设置雅可比矩阵稀疏模式。

例子:选择= odeset (JPattern, {dy,多元印刷},矢量化,{‘上’,‘’})指定函数是相对于向量化的Yyp,并设置用于的雅可比稀疏模式ode15i

数据类型:烧焦|细胞|字符串

质量矩阵和DAEs(不适用于ode15i)

全部折叠

质量矩阵,指定为逗号分隔对,由“质量”和一个矩阵或函数句柄。ODE求解器可以解决包含这种形式的质量矩阵的问题 M ( T , Y ) Y ' = F ( T , Y ) ,在那里 M ( T , Y ) 是一个质量矩阵,可以是完整的或稀疏的(ode23s求解器只能解决常数质量矩阵的方程)。

  • 当质量矩阵非奇异时,方程简化为 Y ' = M 1. F ( T , Y ) ODE对于任何初始值都有一个解决方案。然而,直接使用质量矩阵表示模型通常更方便、更自然 M ( T , Y ) Y ' = F ( T , Y ) ,并且避免了矩阵逆的计算,减少了解决问题所需的存储和执行时间。

  • 什么时候? M ( T , Y ) 是奇异矩阵,则问题是微分代数方程组(DAE)。DAE只有在以下情况下才有解决方案y0是一致的;也就是说,存在一个初始斜率yp0这样M(t0,y0)yp0=f(t0,y0),在那里yp0使用初始坡度选项DAE的特征是其微分指数,或将系统简化为等效ODE系统所需的导数数量。对于索引为1的DAE,解决具有一致初始条件的初始值问题与解决ODE非常相似。这个ode15sode23t求解器可以求解索引为1的DAEs。在求解微分方程时,将质量矩阵表示为对角矩阵(半显微分方程)是很有好处的。

在所有情况下,依赖于时间或状态(而不是常数)的质量矩阵都需要使用其他选项:

  • 关于表格的问题 M ( T ) Y ' = F ( T , Y ) ,设置MStateDependence选择“没有”.这确保了求解器调用质量矩阵函数时只有一个输入参数T

  • 如果质量矩阵取决于Y,然后设置MStateDependence要么“弱”(默认)或“强”.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y),但“弱”选项导致隐式解算器在求解代数方程时使用近似值。

  • 如果系统包含许多具有强状态依赖质量矩阵的方程 M ( T , Y ) ,然后设置MvPattern稀疏矩阵s指定稀疏模式。

例子:示例文件fem2ode巴托诺说明质量矩阵的不同用途。

数据类型:||功能手柄

质量矩阵的状态依赖性,指定为逗号分隔对,由“依赖性“弱”,“强”,或“没有”

  • 关于表格的问题 M ( T ) Y ' = F ( T , Y ) ,设置MStateDependence选择“没有”.这确保了求解器调用质量矩阵函数时只有一个输入参数T

  • 如果质量矩阵取决于Y,然后设置MStateDependence要么“弱”(默认)或“强”.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y),但“弱”选项导致隐式解算器在求解代数方程时使用近似值。

例子:选择= odeset (@M‘质量’,‘MStateDependence’,‘没有’)指定质量矩阵M只取决于T

数据类型:烧焦|字符串

质量矩阵稀疏模式,指定为逗号分隔对组成“MvPattern”和稀疏矩阵。使用此选项指定矩阵的稀疏模式 Y [ M ( T , Y ) v ] .稀疏矩阵s(i, j) = 1如果对任何K这个(我,k)组成部分 M ( T , Y ) 取决于组件J属于Y

MvPattern供…使用ode15s,ode23t,及ode23tbMStateDependence“强”

例子:opts=odeset('MStateDependence'、'strong'、'MvPattern',S)

奇异质量矩阵切换,指定为逗号分隔对组成“MassSingular”“也许”,“是的”,或“不”。的默认值“也许”通过测试质量矩阵是否奇异,使解算器测试问题是否为DAE。通过指定“是的”如果您知道系统是DAE,或“不”如果不是的话。

数据类型:烧焦|字符串

一致的初始斜率,指定为逗号分隔对,由“初始坡度”和一个向量。使用此选项ode15sode23t解算DAE时的解算器。指定的向量是初始坡度 Y ' 0 这样 M ( T 0 , Y 0 ) Y ' 0 = F ( T 0 , Y 0 ) . 如果指定的初始条件不一致,则解算器将其视为猜测,尝试计算接近猜测的一致值,并继续解决问题。

数据类型:|

只为ode15sode15i

全部折叠

公式的最大顺序,指定为逗号分隔对,由“MaxOrder”和之间的整数1.5.. 使用此选项可以指定可变阶解算器使用的数值微分公式(NDF)或后向微分公式(BDF)中使用的最大阶数ode15sode15i

切换以将后向微分公式(BDF)与ode15s,指定为逗号分隔的对,由“BDF”或者“关”“上”. 默认的数值微分公式(NDF)通常比BDF更有效,但两者密切相关。

例子:选择= odeset(‘快速公车提供’,‘上’,‘MaxOrder’,4)支持bdf的使用ode15s最大值为4.

数据类型:烧焦|字符串

输出参数

全部折叠

期权结构。选项可以用作的第四个输入参数ode45,ode23,奥德113,ode15s,ode23s,ode23t,ode23tb,或ode15i

提示

扩展功能

在R2006a之前引入