创建或修改ODE和PDE求解器的选项结构
odeset
如果没有输入参数,则显示所有可能的选项名称及其可能的值。默认值用{}
,如适用。
创建包含值的选项结构RelTol
而且AbsTol
.
选项= odeset(“RelTol”1 e-8“AbsTol”1平台以及);
更新的值AbsTol
在现有的期权结构中。
选项= odeset(选项,“AbsTol”1 e-9)
选择=带字段的结构:AbsTol: 1.0000 -09 BDF: [] Events: [] InitialStep: [] Jacobian: [] JConstant: [] JPattern: [] Mass: [] MassSingular: [] MaxOrder: [] MaxStep: [] NonNegative: [] NormControl: [] OutputFcn: [] OutputSel: [] Refine: [] RelTol: 1.0000 -08 Stats: [] Vectorized: [] mstate dependency: [] MvPattern: [] InitialSlope: []
创建两个选项结构。
Opts_1 = odeset(“RelTol”1 e-8“AbsTol”1 e-9“OutputFcn”@odeplot,“统计数据”,“上”);
Opts_2 = odeset(“质量”,@(t) [t 0;0 - t),“MStateDependence”,“没有”,...“MassSingular”,“不”,“OutputFcn”, @odephas2);
结合选项结构,给予优先opts_2
.因为两个结构都包含不同的值OutputFcn
的值。opts_2
覆盖inopts_1
.
Opts = odeset(opts_1,opts_2)
选择=带字段的结构:AbsTol: 1.0000 -09 BDF: [] Events: [] InitialStep: [] Jacobian: [] JConstant: [] JPattern: [] Mass: @(t)[t,0;0,-t] MassSingular: 'no' MaxOrder: [] MaxStep: [] NonNegative: [] NormControl: [] OutputFcn: @odephas2 OutputSel: [] Refine: [] RelTol: 1.0000 -08 Stats: 'on' Vectorized: [] MStateDependence: 'none' MvPattern: [] InitialSlope: []
oldopts
- - - - - -旧的期权结构旧的选项结构,指定为以前使用创建的结构odeset
.
数据类型:结构体
newopts
- - - - - -新的期权结构新的选项结构,指定为以前使用创建的结构odeset
.
数据类型:结构体
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
选择= odeset (AbsTol, 1 e - 3,‘Reltol’,1飞行,雅可比矩阵,@J,“质量”,米)
指定绝对和相对容错的阈值,返回雅可比矩阵的函数和数值质量矩阵。
RelTol
- - - - - -相对容错1 e - 3
(默认)|积极的标量相对容错,指定为逗号分隔的对,由“RelTol”
一个正标量。此公差测量相对于每个溶液组分的大小的误差。粗略地说,它控制了除小于绝对公差外的所有解决方案组件的正确位数AbsTol
.
在每一步,ODE求解器估计局部误差e
在我
解的第Th分量。为了成功,该步骤必须具有可接受的误差,这由相对和绝对误差容忍度决定:
|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i)))
例子:opts = odeset('RelTol',1e-5,'AbsTol',1e-7)
数据类型:单
|双
AbsTol
- - - - - -绝对容错1 e-6
(默认)|积极的标量|向量绝对容错,指定为由逗号分隔的对组成“AbsTol”
一个正的标量或向量。这个容忍度是一个阈值,低于这个阈值,解决方案的值就不重要了。如果解决方案y | |
小于AbsTol
,则求解器不需要在中获取任何正确的数字y | |
.因此,的值AbsTol
应考虑到解决方案组件的规模。
如果AbsTol
是一个向量,那么它必须和解的长度相同。如果AbsTol
为标量,则该值应用于所有解决方案组件。
在每一步,ODE求解器估计局部误差e
在我
解的第Th分量。为了成功,该步骤必须具有可接受的误差,这由相对和绝对误差容忍度决定:
|e(i)| <= max(RelTol*abs(y(i)),AbsTol(i)))
例子:opts = odeset('RelTol',1e-5,'AbsTol',1e-7)
数据类型:单
|双
NormControl
- - - - - -相对于标准的控制误差“关闭”
(默认)|“上”
相对于解决方案范数的控制错误,指定为逗号分隔的对,由“NormControl”
而且“上”
或“关闭”
.当NormControl
是“上”
,由解算器控制误差e
在每一步使用解的范数,而不是它的绝对值:
norm(e(i)) <= max(RelTol*norm(y(i)),AbsTol(i)))
例子:opts = odeset('NormControl','on')
数据类型:字符
|字符串
非负
- - - - - -非负溶液组分[]
(默认)|标量|向量非负的溶液组件,指定为逗号分隔的对,由非负的
一个标量或向量。标量或向量选择哪些解的分量必须是非负的。
请注意
非负
不可用于ode23s
或ode15i
.此外,为ode15s
,ode23t
,ode23tb
它不适用于有质量矩阵的问题。
例子:opts = odeset('非负',1)
指定第一个解决方案组件必须是非负的。
数据类型:单
|双
OutputFcn
- - - - - -输出函数[]
或@odeplot
(默认)|函数处理输出函数,指定为逗号分隔的对,由“OutputFcn”
和一个函数句柄。ODE求解器在每个成功的时间步骤之后调用输出函数。如果调用没有输出的ODE求解器,则输出函数默认为@odeplot
,它将计算出的所有解决方案组件绘制成图。否则,默认为[]
.
这些是您可以使用的内置输出函数OutputFcn
:
函数名 | 描述 |
---|---|
odeplot |
画出解决方案的所有组成部分与时间的关系 |
odephas2 |
前两个溶液组分的二维相平面图 |
odephas3 |
前三种溶液组分的三维相平面图 |
odeprint |
打印溶液和时间步长 |
如果您编写一个自定义输出函数,那么它必须是这样的形式
status = myOutputFcn(t,y,flag)
输出函数也必须适当地响应这些标志:
国旗 | 描述 |
---|---|
“init” |
求解器调用 |
[] |
求解器调用
|
“完成” |
求解器调用 |
数据类型:function_handle
OutputSel
- - - - - -输出函数的组件选择输出函数的组件选择,指定为逗号分隔的对,由“OutputSel”
还有一个指标向量。向量指定将解决方案的哪些组件传递给输出函数。
例子:opts = odeset('OutputFcn',@myFcn,'OutputSel',[1 3])
将解决方案的第一个和第三个组件传递给输出函数。
完善
- - - - - -解细化因子解决方案细化因子,指定为由逗号分隔的对组成“完善”
一个标量。标量指定在每一步中增加输出点数量的一个因子。
的默认值完善
对于大多数求解器来说是1
,但数值
使用默认值4
,而ode78
而且ode89
使用默认值8
.这些解算器使用更大的默认值来补偿它们采取大步骤的倾向。
如果细化因子是1
,则求解器仅在每一步结束时返回解。金宝搏官方网站
如果细化因子是N > 1
,求解器将每一步细分为n
更小的间隔并返回每个点的解。金宝搏官方网站
利用连续展开式计算了由细化因子产生的附加值。这些是ODE求解器使用的专门公式,用于在计算时间步长之间获得精确的解,而不会显著增加计算时间。金宝搏官方网站
请注意
完善
不适用于以下情况长度(tspan) >
,或者当ODE求解器以结构形式返回解时。
例子:opts = odeset('Refine',5)
将输出点的数量增加到原来的五倍。
统计数据
- - - - - -解算器统计数据“关闭”
(默认)|“上”
求解器统计信息,指定为逗号分隔的对,由“统计数据”
而且“上”
或“关闭”
.当“上”
,解算器在完成解后显示信息:
成功的步数
失败的次数
调用ODE函数求值的次数
隐式求解器显示关于解决方案的附加信息:
偏导矩阵的次数 成立
LU分解的个数
线性系统解的个数金宝搏官方网站
例子:opts = odeset('Stats','on')
数据类型:字符
|字符串
InitialStep
- - - - - -建议初始步长建议的初始步长,指定为逗号分隔的对,由“InitialStep”
一个正标量。InitialStep
设置求解器尝试的第一步大小的大小的上界。
如果不指定初始步长,则求解器将初始步长基于初始时间点解的斜率,tspan (1)
.如果所有解分量的斜率都为零,那么求解器可能会尝试一个太大的步长。如果您意识到这种情况正在发生,或者如果您想确保求解器在集成的开始就解决了重要的行为,那么请使用InitialStep
提供合适的初始步长。
例子:opts = odeset('InitialStep',1e-3)
的上限1 e - 3
初始步长的大小。
MaxStep
- - - - - -最大步长0.1 * abs (t0-tf)
(默认)|标量最大步长,指定为逗号分隔的对,由“MaxStep”
一个正标量。MaxStep
设置求解器所采取的任何步骤的大小的上限。如果方程具有周期性,例如,设置MaxStep
到周期的一小部分确保求解器不会将步长扩大到超出感兴趣的区域。
不要使用MaxStep
只是为了获得更多的输出点,因为它可以显著减缓积分。相反,使用完善
选项计算额外的点,以较低的计算成本。
不要使用MaxStep
提高解的精度。如果解不够准确,则降低值RelTol
并利用该解决方案确定一个合适的值AbsTol
.
避免使用MaxStep
确保求解器不会跳过某些在积分区间中只发生一次的行为。如果您知道行为发生的时间,那么将间隔分成两部分,并调用求解器两次。如果你不知道变化发生的时间,试着减少RelTol
而且AbsTol
.使用MaxStep
只是在这种情况下不得已而为之。
例子:opts = odeset('MaxStep',1e-2)
事件
- - - - - -事件函数事件函数,指定为逗号分隔的对,由“事件”
和函数句柄,如@myEventsFcn
.
对常微分方程:由函数句柄指定的事件函数必须具有通用形式
[value, terminal,direction] = myEventsFcn(t,y)
对pde:由函数句柄指定的事件函数必须具有通用形式
[value, terminal,direction] = myEventsFcn(m,t,xmesh,umesh)
在这两种情况下,价值
,isterminal
,方向
是向量我
Th元素对应于我
事件函数:
值(我)
是值我
事件函数。
终点(i) = 1
如果积分终止于这个事件函数的零点。否则,就是0
.
方向i = 0
如果要定位所有的零(默认值)。值为+1
仅定位事件函数增加的零点,和-1
仅定位事件函数递减的零点。
看到参数化功能查看如何将额外的输入传递给事件函数。
如果指定事件函数,则可以使用三个额外的输出参数调用求解器,例如
[t,y,te,ye,ie] = odeXY(odefun,tspan,y0,options)
求解器返回的另外三个输出对应于检测到的事件:
te
是事件发生时间的列向量。
叶
解值是否与in中的事件时间对应te
.
即
是事件函数返回的向量的索引。这些值指示解算器检测到的事件。
或者,您可以调用具有单个输出的求解器为
sol = odeXY(odefun,tspan,y0,options)
在这种情况下,事件信息存储在结构as中sol.te
,sol.ye
,sol.ie
.
ODE/PDE求解器与事件函数一起使用的根查找机制有以下限制:
如果在集成的第一步中发生了终结事件,那么求解器将该事件注册为非终结事件并继续集成。
如果在第一步中发生了多个终端事件,那么只有第一个事件注册,求解器继续进行集成。
零是通过步骤之间的符号交叉来确定的。因此,步骤之间交叉次数为偶数的零可能会被忽略。
如果解算器步骤过去的事件,尝试减少RelTol
而且AbsTol
提高准确性。另外,组MaxStep
在步长上设置一个上界。调整tspan
不改变求解器所采取的步骤。
看到ODE事件位置用于检测球的反弹和天体轨道的ODE事件函数的示例。
看到用事件日志解决振荡偏微分方程用于检测振荡解的过零点的偏微分方程事件函数的示例。
数据类型:function_handle
雅可比矩阵
- - - - - -雅可比矩阵雅可比矩阵,指定为逗号分隔的对,由的雅可比矩阵
和求雅可比矩阵的矩阵或函数。雅可比矩阵是定义微分方程的函数的偏导数的矩阵。
对于生硬的ODE求解器(ode15s
,ode23s
,ode23t
,ode23tb
,ode15i
),提供有关雅可比矩阵的信息对于可靠性和效率至关重要。如果您不提供雅可比矩阵,那么ODE求解器使用有限差分在数值上逼近它。
为ode15i
只有:雅可比矩阵
选项必须为两者指定矩阵
而且
.您可以将这些矩阵作为两个常量矩阵的单元格数组提供
,或作为计算矩阵的函数,具有一般形式
[dfdy, dfdp] = Fjac(t,y,yp)
对于无法提供整个解析雅可比矩阵的非常大的系统,使用JPattern
属性传递给雅可比矩阵的稀疏模式。求解器使用稀疏模式来计算稀疏雅可比矩阵。
例子:opts = odeset('雅可比矩阵',@J)
指定函数J
计算雅可比矩阵的方法。
例子:opts = odeset('雅可比矩阵',[0 1;2 (1)
指定一个常数雅可比矩阵。
例子:opts = odeset('雅可比矩阵',{A,Ap})
指定用于的两个常数雅可比矩阵ode15i
.
数据类型:单
|双
|细胞
|function_handle
JPattern
- - - - - -雅可比稀疏图雅可比稀疏模式,指定为由逗号分隔的对组成“JPattern”
和一个稀疏矩阵。稀疏矩阵包含1
s中可能有非零项在雅可比矩阵中。ODE求解器使用稀疏模式数值生成稀疏雅可比矩阵。当ODE系统很大且无法提供解析雅可比矩阵时,使用此选项可缩短执行时间。
为ode15i
只有:设置JPattern
选项,使用包含两个稀疏矩阵的单元格数组{dfdyPattern, dfdypPattern}
的稀疏模式
而且
.
请注意
如果你指定一个雅可比矩阵使用雅可比矩阵
,则解算器忽略为的任何设置JPattern
.
例子:opts = odeset('JPattern',S)
使用稀疏矩阵指定雅可比稀疏模式年代
.
例子:opts = odeset('JPattern',{dFdy, dFdyp})
指定用于的两个常数雅可比稀疏模式ode15i
.
数据类型:双
|细胞
矢量化
- - - - - -向量化函数切换“关闭”
(默认)|“上”
|单元阵列向量化函数切换,指定为逗号分隔的对,由矢量化的
,要么“关闭”
或“上”
.使用此选项通知ODE求解器函数已编码,以便它接受并返回用于第二个参数的向量。也就是说,F (t,[y1 y2 y3…])
返回[f(t,y1) f(t,y2) f(t,y3)…]
.与一次计算一个值相比,这种向量化允许求解器减少计算雅可比矩阵的所有列所需的函数计算的数量,并可能显著减少求解时间。看到数组运算与矩阵运算有关支持向量化的元素操作符的描述。金宝app
为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,'Vectorized','on')
指定函数是向量化的,并设置雅可比稀疏模式。
例子:选择= odeset (JPattern, {dy,多元印刷},矢量化,{‘上’,‘’})
指定函数对的向量化y
而且yp
,并且还设置了用于的雅可比稀疏模式ode15i
.
数据类型:字符
|细胞
|字符串
ode15i
)
质量
- - - - - -质量矩阵质量矩阵,指定为由逗号分隔的对组成“质量”
一个矩阵或函数句柄。ODE求解器可以求解包含这种形式的质量矩阵的问题
,在那里
是一个质量矩阵,可以是满的或稀疏的(ode23s
求解器只能求解常量质量矩阵的方程)。
当质量矩阵非奇异时,方程化简为 ODE对任何初值都有解。但是,直接用质量矩阵来表示模型往往更方便自然 ,避免了矩阵逆的计算,减少了解决问题所需的存储和执行时间。
当
是奇异矩阵,则问题是微分代数方程组。DAE只有在以下情况下才有解决方案y0
是一致的;也就是说,存在一个初始斜率yp0
这样M(t0,y0)yp0 = f(t0,y0)
,在那里yp0
使用InitialSlope
选择。dae的特征是它们的微分指数,或将系统简化为ode的等效系统所需的导数的数量。对于索引1的dae,求解具有一致初始条件的初值问题与求解ODE非常相似。的ode15s
而且ode23t
求解器可以求解索引1的dae。在求解DAE时,将问题表述为质量矩阵为对角矩阵(半显式DAE)是有利的。
在所有情况下,依赖于时间或状态的质量矩阵(而不是常数)需要使用额外的选项:
对于表格中的问题
,设置MStateDependence
选项“没有”
.这确保求解器调用质量矩阵函数时使用单个输入参数t
.
如果质量矩阵依赖于y
,然后设置MStateDependence
要么“弱”
(默认)或“强”
.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y)
,但“弱”
选项导致隐式求解器在求解代数方程时使用近似。
如果系统包含许多具有强状态依赖的质量矩阵的方程
,然后设置MvPattern
到一个稀疏矩阵年代
指定稀疏模式。
例子:示例文件fem2ode
而且batonode
说明质量矩阵的不同用法。
数据类型:单
|双
|function_handle
MStateDependence
- - - - - -质量矩阵的状态依赖性“弱”
(默认)|“没有”
|“强”
质量矩阵的状态依赖关系,以逗号分隔的对组成“MStateDependence
而且“弱”
,“强”
,或“没有”
.
对于表格中的问题
,设置MStateDependence
选项“没有”
.这确保求解器调用质量矩阵函数时使用单个输入参数t
.
如果质量矩阵依赖于y
,然后设置MStateDependence
要么“弱”
(默认)或“强”
.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y)
,但“弱”
选项导致隐式求解器在求解代数方程时使用近似。
例子:opts = odeset('Mass',@M,' mstate dependency ','none')
指定质量矩阵米
只取决于t
.
数据类型:字符
|字符串
MvPattern
- - - - - -质量矩阵稀疏模式质量矩阵稀疏模式,指定为逗号分隔对组成“MvPattern”
和一个稀疏矩阵。使用此选项可指定矩阵的稀疏模式
.稀疏矩阵年代
有S(i,j) = 1
如果有k
,(我,k)
的组成部分
取决于组件j
的y
.
请注意
MvPattern
是供ode15s
,ode23t
,ode23tb
当MStateDependence
是“强”
.
例子:opts = odeset(' mstate dependency ','strong','MvPattern',S)
MassSingular
- - - - - -奇异质量矩阵切换“也许”
(默认)|“是的”
|“不”
奇异质量矩阵开关,指定为由逗号分隔的对组成“MassSingular”
而且“也许”
,“是的”
,或“不”
.的默认值“也许”
通过测试质量矩阵是否奇异,使解算器测试问题是否为DAE。通过指定避免此检查“是的”
如果你知道这个系统是DAE,或者“不”
如果不是的话。
数据类型:字符
|字符串
InitialSlope
- - - - - -一致的初始斜率一致的初始斜率,指定为由逗号分隔的对组成“InitialSlope”
还有一个向量。属性使用此选项ode15s
而且ode23t
求解dae时的解算器。指定的向量是初始斜率
这样
.如果指定的初始条件不一致,则求解器将其视为猜测,尝试计算与猜测接近的一致值,并继续解决问题。
数据类型:单
|双
ode15s
而且ode15i
MaxOrder
- - - - - -公式最大阶数5
(默认)|4
|3.
|2
|1
公式的最大顺序,指定为逗号分隔的对,由“MaxOrder”
和一个整数1
而且5
.使用此选项可指定变阶求解器使用的数值微分公式(ndf)或向后微分公式(BDFs)中使用的最大阶数ode15s
而且ode15i
.
快速公车提供
- - - - - -切换使用BDFsode15s
“关闭”
(默认)|“上”
切换到使用反向微分公式(BDFs)ode15s
,指定为逗号分隔的对,由“快速公车提供”
,要么“关闭”
或“上”
.默认的数值微分公式(ndf)通常比BDFs更有效,但两者密切相关。
例子:opts = odeset('BDF','on','MaxOrder',4)
允许使用BDFsode15s
最大阶数为4
.
数据类型:字符
|字符串
选项
-选项结构选择结构。选项
可以作为第四个输入参数数值
,ode23
,ode113
,ode15s
,ode23s
,ode23t
,ode23tb
,或ode15i
.
看到ODE示例和文件摘要以获取说明各种选项使用的ODE示例列表。
使用注意事项和限制:
所有输入必须是常数。
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。