为ODE和PDE求解器创建或修改选项结构
奥德塞特
如果没有输入参数,则显示所有可能的选项名及其可能的值。默认值用{}
(在适用情况下)。
创建包含的值的选项结构雷托
和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:[]斜率:[]
oldopts
—旧期权结构旧选项结构,指定为以前使用创建的结构奥德塞特
.
数据类型:结构体
新选择
—新期权结构新选项结构,指定为先前使用奥德塞特
.
数据类型:结构体
指定可选的逗号分隔的对名称,值
论据。的名字
参数名和价值观
是对应的值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值
.
选项=odeset('absol',1e-3,'Reltol',1e-2,'Jacobian',@J,'Mass',M)
指定绝对和相对误差公差的阈值、返回雅可比矩阵的函数和数值质量矩阵。
雷托
—相对误差公差1 e - 3
(默认)|正标量相对误差容限,指定为逗号分隔对,由“雷托”
一个正标量。这个公差测量相对于每个解决方案组件的大小的误差。粗略地说,它控制了除小于绝对公差外的所有溶液组分中正确位数的数量AbsTol
.
在每一步,ODE求解器估计局部误差E
在我
溶液的第一个分量。为了成功,步骤必须有可接受的误差,由相对误差和绝对误差公差决定:
|e(i)<=max(RelTol*abs(y(i)),absol(i))
例子:选择= odeset (RelTol, 1 e-5 AbsTol, 1 e)
数据类型:单
|双
AbsTol
—绝对误差公差1 e-6
(默认)|正标量|矢量绝对容错,指定为逗号分隔对,由“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”
和“上”
或“关”
. 什么时候NormControl
是“上”
,求解器控制误差E
在每个步骤中,使用溶液的范数而不是其绝对值:
范数(e(i))<=max(RelTol*norm(y(i)),absol(i))
例子:选择= odeset(“NormControl”,“上”)
数据类型:烧焦
|字符串
非负
—非负解分量[]
(默认)|标量|矢量非负解组件,指定为逗号分隔对,由“非负”
一个标量或向量。标量或向量选择哪个解分量必须是非负的。
注
非负
不适用于ode23s
或ode15i
.此外ode15s
,ode23t
,及ode23tb
它不适用于有质量矩阵的问题。
例子:opts=odeset('非负',1)
指定第一个解决方案组件必须是非负的。
数据类型:单
|双
输出FCN
—输出函数[]
或@odeplot
(默认)|函数处理输出函数,指定为逗号分隔对,由“OutputFcn”
和一个函数句柄。ODE求解器在每个成功的时间步骤之后调用输出函数。如果调用没有输出的ODE求解器,则输出函数默认为@odeplot
,在计算时绘制所有解决方案组件。否则,默认值为[]
.
这些是可以使用的内置输出函数输出FCN
:
函数名 | 描述 |
---|---|
奥德普洛特 |
绘制解决方案的所有组成部分与时间的对比图 |
odephas2 |
前两个溶液组分的二维相平面图 |
odephas3 |
前三个溶液组分的三维相平面图 |
奥德列特 |
打印解决方案和时间步长 |
如果您编写一个自定义输出函数,那么它的形式必须是
状态= myOutputFcn (t、y、旗)
输出函数还必须适当响应这些标志:
旗 | 描述 |
---|---|
“初始化” |
解算器调用 |
[] |
解算器调用
|
“完成” |
解算器调用 |
数据类型:功能手柄
输出端
—输出功能的组件选择输出函数的组件选择,指定为由逗号分隔的对组成“OutputSel”
和一个索引向量。该向量指定要传递给输出函数的解的哪些分量。
例子:opts = odeset('OutputFcn',@myFcn,'OutputSel',[1 3])
将解决方案的第一个和第三个组件传递给输出函数。
完善
—溶液细化因子解的细化因子,指定为逗号分隔对组成“精炼”
和一个标量。标量指定在每个步骤中输出点的数量应该增加的一个因子。
的默认值完善
对于大多数求解器来说是1.
,但ode45
使用默认值4.
,而奥德78
和ode89
使用默认值8.
. 这些解算器使用较大的默认值来补偿他们采取较大步骤的倾向。
如果细化因子为1.
,则求解器仅在每一步结束时返回解。万博 尤文图斯
如果细化因子为n>1
,然后求解器将每个步骤细分为N
较小的间隔,并在每个点返回解决方案。万博 尤文图斯
通过连续扩展公式计算出细化因子产生的额外值。这些是ODE求解器使用的专门公式,用于在计算时间步之间获得精确的解,而不会显著增加计算时间。万博 尤文图斯
注
完善
不适用于以下情况:长度(tspan) > 2
,或当ODE解算器以结构形式返回解决方案时。
例子:选择= odeset(“细化”,5)
将输出点数增加五倍。
统计数据
—解算器统计数据“关”
(默认)|“上”
解算器统计信息,指定为逗号分隔对,由“统计数据”
和“上”
或“关”
. 什么时候“上”
,解算器在完成解决方案后显示信息:
成功的步骤数
失败尝试的次数
调用ODE函数进行计算的次数
隐式求解器显示关于解决方案的附加信息:
偏导数矩阵 形成
逻辑单元分解的数量
线性系统解的个数万博 尤文图斯
例子:opts=odeset('Stats','on')
数据类型:烧焦
|字符串
InitialStep
—建议的初始步长建议的初始步长,指定为逗号分隔对,由“InitialStep”
一个正标量。InitialStep
设置解算器尝试的第一步大小大小的上限。
如果未指定初始步长,则解算器将初始步长基于初始时间点的解的坡度,尖沙咀(1)
。如果所有解决方案组件的坡度均为零,则解算器可能会尝试过大的步长。如果您知道这一情况,或者如果您希望确保解算器在积分开始时解决重要行为,请使用InitialStep
提供合适的初始步长。
例子:opts=odeset('InitialStep',1e-3)
设置的上限1 e - 3
初始步骤的大小。
最大步长
—最大步长0.1*abs(t0-tf)
(默认)|标量最大步长,指定为逗号分隔的对,由“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
不改变求解器所采取的步骤。
看见歌唱活动的位置例如,ODE事件函数可检测球的反弹和天体的轨道。
看见用事件记录求解振荡PDE例如,PDE事件函数检测振荡解的过零。
数据类型:功能手柄
雅可比矩阵
—雅可比矩阵雅可比矩阵,指定为逗号分隔对,由的雅可比矩阵
以及求雅可比矩阵的矩阵或函数。雅可比矩阵是定义微分方程的函数的偏导数的矩阵。
对于刚性ODE求解器(ode15s
,ode23s
,ode23t
,ode23tb
,及ode15i
),提供有关雅可比矩阵的信息对于可靠性和效率至关重要。如果不提供雅可比矩阵,则ODE解算器将使用有限差分在数值上对其进行近似。
对于ode15i
只有字体雅可比矩阵
选项必须为两者指定矩阵
和
。您可以将这些矩阵作为两个常量矩阵的单元格数组提供
,或作为计算矩阵并具有一般形式的函数
[dfdy,dfdp]=Fjac(t,y,yp)
对于非常大的系统,它是不可行的提供整个解析雅可比矩阵,使用JPattern
属性传递雅可比矩阵的稀疏模式。解算器使用稀疏模式计算稀疏雅可比矩阵。
例子:选择= odeset(雅可比矩阵,@J)
指定函数J
计算雅可比矩阵。
例子:opts=odeset('Jacobian',[01;-21])
指定一个常数雅可比矩阵。
例子:opts=odeset('Jacobian',{A,Ap})
指定两个常数雅可比矩阵用于ode15i
.
数据类型:单
|双
|细胞
|功能手柄
JPattern
—雅可比稀疏模式雅可比稀疏模式,指定为逗号分隔对,由“JPattern”
和一个稀疏矩阵。稀疏矩阵包含1.
s,其中雅可比矩阵中可能有非零项。ODE解算器使用稀疏模式以数字方式生成稀疏雅可比矩阵。当ODE系统较大且无法提供分析雅可比矩阵时,使用此选项可缩短执行时间。
对于ode15i
只有:设置JPattern
选项使用包含两个稀疏矩阵的单元数组{dfdyPattern,dfdypPattern}
,这是稀疏模式
和
.
注
如果你指定一个雅可比矩阵雅可比矩阵
,则解算器将忽略该对象的任何设置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,多元印刷},矢量化,{‘上’,‘’})
指定函数是相对于向量化的Y
和yp
,并设置用于的雅可比稀疏模式ode15i
.
数据类型:烧焦
|细胞
|字符串
ode15i
)
质量
—质量矩阵质量矩阵,指定为逗号分隔对,由“质量”
和一个矩阵或函数句柄。ODE求解器可以解决包含这种形式的质量矩阵的问题
,在那里
是一个质量矩阵,可以是完整的或稀疏的(ode23s
求解器只能解决常数质量矩阵的方程)。
当质量矩阵非奇异时,方程简化为 ODE对于任何初始值都有一个解决方案。然而,直接使用质量矩阵表示模型通常更方便、更自然 ,并且避免了矩阵逆的计算,减少了解决问题所需的存储和执行时间。
什么时候?
是奇异矩阵,则问题是微分代数方程组(DAE)。DAE只有在以下情况下才有解决方案y0
是一致的;也就是说,存在一个初始斜率yp0
这样M(t0,y0)yp0=f(t0,y0)
,在那里yp0
使用初始坡度
选项DAE的特征是其微分指数,或将系统简化为等效ODE系统所需的导数数量。对于索引为1的DAE,解决具有一致初始条件的初始值问题与解决ODE非常相似。这个ode15s
和ode23t
求解器可以求解索引为1的DAEs。在求解微分方程时,将质量矩阵表示为对角矩阵(半显微分方程)是很有好处的。
在所有情况下,依赖于时间或状态(而不是常数)的质量矩阵都需要使用其他选项:
关于表格的问题
,设置MStateDependence
选择“没有”
.这确保了求解器调用质量矩阵函数时只有一个输入参数T
.
如果质量矩阵取决于Y
,然后设置MStateDependence
要么“弱”
(默认)或“强”
.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y)
,但“弱”
选项导致隐式解算器在求解代数方程时使用近似值。
如果系统包含许多具有强状态依赖质量矩阵的方程
,然后设置MvPattern
稀疏矩阵s
指定稀疏模式。
例子:示例文件fem2ode
和巴托诺
说明质量矩阵的不同用途。
数据类型:单
|双
|功能手柄
MStateDependence
—质量矩阵的状态依赖性“弱”
(默认)|“没有”
|“强”
质量矩阵的状态依赖性,指定为逗号分隔对,由“依赖性
和“弱”
,“强”
,或“没有”
.
关于表格的问题
,设置MStateDependence
选择“没有”
.这确保了求解器调用质量矩阵函数时只有一个输入参数T
.
如果质量矩阵取决于Y
,然后设置MStateDependence
要么“弱”
(默认)或“强”
.在这两种情况下,求解器调用具有两个输入的质量矩阵函数(t, y)
,但“弱”
选项导致隐式解算器在求解代数方程时使用近似值。
例子:选择= odeset (@M‘质量’,‘MStateDependence’,‘没有’)
指定质量矩阵M
只取决于T
.
数据类型:烧焦
|字符串
MvPattern
—质量矩阵稀疏模式质量矩阵稀疏模式,指定为逗号分隔对组成“MvPattern”
和稀疏矩阵。使用此选项指定矩阵的稀疏模式
.稀疏矩阵s
有(i, j) = 1
如果对任何K
这个(我,k)
组成部分
取决于组件J
属于Y
.
注
MvPattern
供…使用ode15s
,ode23t
,及ode23tb
当MStateDependence
是“强”
.
例子:opts=odeset('MStateDependence'、'strong'、'MvPattern',S)
质量奇异
—奇异质量矩阵切换“也许”
(默认)|“是的”
|“不”
奇异质量矩阵切换,指定为逗号分隔对组成“MassSingular”
和“也许”
,“是的”
,或“不”
。的默认值“也许”
通过测试质量矩阵是否奇异,使解算器测试问题是否为DAE。通过指定“是的”
如果您知道系统是DAE,或“不”
如果不是的话。
数据类型:烧焦
|字符串
初始坡度
—一致的初始斜率一致的初始斜率,指定为逗号分隔对,由“初始坡度”
和一个向量。使用此选项ode15s
和ode23t
解算DAE时的解算器。指定的向量是初始坡度
这样
. 如果指定的初始条件不一致,则解算器将其视为猜测,尝试计算接近猜测的一致值,并继续解决问题。
数据类型:单
|双
ode15s
和ode15i
MaxOrder
—公式的最大阶数5.
(默认)|4.
|3.
|2.
|1.
公式的最大顺序,指定为逗号分隔对,由“MaxOrder”
和之间的整数1.
和5.
. 使用此选项可以指定可变阶解算器使用的数值微分公式(NDF)或后向微分公式(BDF)中使用的最大阶数ode15s
和ode15i
.
BDF
—切换以将BDF与ode15s
“关”
(默认)|“上”
切换以将后向微分公式(BDF)与ode15s
,指定为逗号分隔的对,由“BDF”
或者“关”
或“上”
. 默认的数值微分公式(NDF)通常比BDF更有效,但两者密切相关。
例子:选择= odeset(‘快速公车提供’,‘上’,‘MaxOrder’,4)
支持bdf的使用ode15s
最大值为4.
.
数据类型:烧焦
|字符串
选项
-期权结构期权结构。选项
可以用作的第四个输入参数ode45
,ode23
,奥德113
,ode15s
,ode23s
,ode23t
,ode23tb
,或ode15i
.
看见ODE示例和文件摘要查看一列ODE示例,这些示例演示了各种选项的使用。
使用注意事项及限制:
所有输入必须是常量。
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。