文档帮助中心文档
求解非刚性微分方程的低阶方法
[t,y] = ode23(odefun,tspan,y0)
[t,y] = ode23(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode23(odefun,tspan,y0,options)
Sol = ode23(___)
例子
[t,y= ode23(odefun,tspan,y0),在那里Tspan = [t0 tf],对微分方程组进行积分 y ' = f ( t , y ) 从t0来特遣部队在初始条件下y0.解数组中的每一行y对应于列向量返回的值t.
[t,y= ode23(odefun,tspan,y0)
t
y
odefun
tspan
y0
Tspan = [t0 tf]
t0
特遣部队
所有MATLAB®ODE求解器可以求解这种形式的方程组 y ' = f ( t , y ) ,或者涉及质量矩阵的问题, 米 ( t , y ) y ' = f ( t , y ) .这些求解器都使用类似的语法。的ode23s求解器只能在质量矩阵为常数的情况下求解质量矩阵问题。ode15s而且ode23t可以解决质量矩阵奇异的问题,即微分代数方程(DAEs)。函数指定质量矩阵质量选择odeset.
ode23s
ode15s
ode23t
质量
odeset
[t,y= ode23(odefun,tspan,y0,选项)还使用定义的集成设置选项属性创建的参数odeset函数。例如,使用AbsTol而且RelTol选项用于指定绝对和相对误差容差,或质量选项提供质量矩阵。
[t,y= ode23(odefun,tspan,y0,选项)
选项
AbsTol
RelTol
[t,y,te,叶,即= ode23(odefun,tspan,y0,选项)的函数(t,y),称为事件函数,则为零。在输出中,te是事件发生的时间,叶解决方案是在事件发生时,和即触发事件的索引。
[t,y,te,叶,即= ode23(odefun,tspan,y0,选项)
te
叶
即
对于每个事件函数,指定积分是否终止于零点,以及零点交叉的方向是否重要。通过设置“事件”属性设置为函数,例如myEventFcn或@myEventFcn,并创建相应的函数:[价值,isterminal,方向] =myEventFcn(t,y).有关更多信息,请参见ODE事件位置.
“事件”
myEventFcn
@myEventFcn
价值
isterminal
方向
索尔= ode23 (___)返回一个可以使用的结构德瓦尔求区间上任意点的解(t0 tf).您可以使用以前语法中的任何输入参数组合。
索尔= ode23 (___)
索尔
德瓦尔
(t0 tf)
全部折叠
具有单个解决方案组件的简单ode可以在求解器调用中指定为匿名函数。匿名函数必须接受两个输入(t, y),即使函数中没有使用其中一个输入。
(t, y)
求解ODE
y ” = 2 t .
指定的时间间隔[0 5]初始条件Y0 = 0.
[0 5]
Y0 = 0
Tspan = [0 5];Y0 = 0;[t,y] = ode23(@(t,y) 2*t, tspan, y0);
画出解。
情节(t y“o”)
范德波尔方程是一个二阶ODE
在哪里是标量参数。通过代换,把这个方程写成一阶ode的方程组.一阶ode的结果系统为
函数文件vdp1.m为范德波尔方程.的变量而且是条目吗y (1)而且y (2)一个二元向量dydt.
vdp1.m
y (1)
y (2)
dydt
函数Dydt = vdp1(t,y)求mu = 1时的范德波尔ode%参见ODE113, ODE23, ODE45。雅塞克·基尔曾卡和劳伦斯·f·夏皮恩The MathWorks, Inc.版权所有Dydt = [y(2);(1 y (1) ^ 2) * y (2) - y (1)];
方法求解ODEode23函数在时间间隔上20 [0]有初始值[2 0].结果输出是时间点的列向量t和一个解数组y.每一行y的对应行中返回的时间t.的第一列y对应于,第二列对应.
ode23
20 [0]
[2 0]
[t,y] = ode23(@vdp1,[0 20],[2;0]);
为以下问题绘制解决金宝搏官方网站方案而且反对t.
情节(t y (: 1),“o”、t、y (:, 2),“o”)标题(ODE23条件下van der Pol方程(\mu = 1)的解);包含(“t”);ylabel (“解决方案y”);传奇(“y_1”,“y_2”)
ode23仅适用于使用两个输入参数的函数,t而且y.但是,您可以通过在函数外部定义额外的参数并在指定函数句柄时传入它们来传递额外的参数。
将方程改写为一阶方程组
odefcn.m将这个方程组表示为接受四个输入参数的函数:t,y,一个,B.
odefcn.m
一个
B
函数dydt = odefcn(t,y,A,B) dydt = 0 (2,1);Dydt (1) = y(2);dydt(2) = (A/B)*t.*y(1);
使用以下方法求解ODEode23.指定函数句柄,以便它传递为的预定义值一个而且B来odefcn.
odefcn
A = 1;B = 2;Tspan = [0 5];Y0 = [0 0.01];[t,y] = ode23(@(t,y) odefcn(t,y,A,B), tspan, y0);
画出结果。
情节(t y (: 1),“o”、t、y (:, 2),“-”。)
相比数值,ode23Solver更擅长解决具有粗糙容错的问题。
数值
比较性能数值而且ode23通过求解中等刚度ODE
y ” = - λ y
为 λ = 1 0 0 0 .这个ODE是一个测试方程,它变得越来越僵硬 λ 增加。使用odeset打开求解器统计信息的显示。
Opts = odeset(“统计数据”,“上”);Tspan = [0 2];Y0 = 1;Lambda = 1e3;Subplot (1,2,1) tic, ode45(@(t,y) -lambda*y, tspan, y0, opts), toc
615 successful steps 35 failed attempts 3901 function evaluation耗时1.965109秒。
标题(“数值”) subplot(1,2,2) tic, ode23(@(t,y) -lambda*y, tspan, y0, opts), toc
822成功步骤2失败尝试2473函数计算耗时为0.966825秒。
标题(“ode23”)
对于这个中等难度的问题,ode23执行速度略快于数值失败的步骤也更少。的步长数值而且ode23对于这个问题,限制的是方程的稳定性要求,而不是精度。自从美国政府采取措施ode23都比数值,ode23求解器执行更快,即使它需要更多的步骤。
要解决的函数,指定为定义要集成的函数的函数句柄。
这个函数Dydt = odefun(t,y),对于标量t和一个列向量y,必须返回一个列向量dydt数据类型的单或双这对应于 f ( t , y ) .odefun必须接受两个输入参数t而且y,即使函数中没有使用其中一个参数。
Dydt = odefun(t,y)
单
双
例如,解 y ' = 5 y − 3. ,使用函数:
函数Dydt = odefun(t,y) Dydt = 5*y-3;结束
对于方程组,的输出odefun是一个向量。向量中的每个元素都是一个方程的解。例如,解
y ' 1 = y 1 + 2 y 2 y ' 2 = 3. y 1 + 2 y 2
使用函数:
函数Dydt = odefun(t,y) Dydt = 0 (2,1);Dydt (1) = y(1)+2*y(2);Dydt (2) = 3*y(1)+2*y(2);结束
有关如何向函数提供附加参数的信息odefun,请参阅参数化功能.
例子:@myFcn
@myFcn
数据类型:function_handle
function_handle
积分的区间,用向量表示。至少,tspan一定是二元向量(t0 tf)指定初始时间和最终时间。在特定的时间之间获得金宝搏官方网站解决方案t0而且特遣部队,使用一个较长的向量的形式(t0, t1, t2,…,tf).元素tspan必须是全增加或全减少。
(t0, t1, t2,…,tf)
求解器施加的初始条件为y0在初始时间tspan (1),然后从tspan (1)来tspan(结束):
tspan (1)
tspan(结束)
如果tspan有两个要素(t0 tf),则求解器返回在区间内每个内部积分步骤求值的解。
如果tspan有两个以上的元素(t0, t1, t2,…,tf),求解器返回给定点处的解。然而,求解器并不精确地步进到中指定的每个点tspan.相反,求解器使用自己的内部步骤来计算解决方案,然后在请求的点处计算解决方案tspan.在指定点金宝搏官方网站产生的解与在每个内部步骤计算的解具有相同的精度。
指定几个中间点对计算效率影响不大,但会影响大型系统的内存管理。
的价值tspan被求解器用来计算合适的值InitialStep而且MaxStep:
InitialStep
MaxStep
如果tspan包含几个中间点(t0, t1, t2,…,tf),则指定的点给出了问题的尺度指示,这可以影响的值InitialStep由求解器使用。因此,求解器获得的解可能不同,这取决于您是否指定tspan作为一个两元向量或作为一个中间点向量。
中的初始值和最终值tspan用于计算最大步长MaxStep.因此,更改中的初始值或最终值tspan可能导致求解器使用不同的步骤序列,这可能会改变解决方案。
例子:10 [1]
10 [1]
例子:[1 3 5 7 9 10]
[1 3 5 7 9 10]
数据类型:单|双
初始条件,指定为一个向量。y0必须与的向量输出的长度相同odefun,所以y0中定义的每个方程的初始条件odefun.
选项结构,指定为结构数组。使用odeset函数来创建或修改选项结构。看到ODE选项摘要获取与每个求解器兼容的选项列表。
例子:options = odeset('RelTol',1e-5,'Stats','on','OutputFcn',@ odeploy)的相对容错能力1 e-5,打开解算器统计显示,并指定输出函数@odeplot在计算的过程中画出解。
options = odeset('RelTol',1e-5,'Stats','on','OutputFcn',@ odeploy)
1 e-5
@odeplot
数据类型:结构体
结构体
计算点,作为列向量返回。
如果tspan包含两个元素(t0 tf),然后t包含用于执行集成的内部评估点。
如果tspan那么,包含两个以上的元素t和tspan.
金宝搏官方网站解,作为数组返回。每一行y的对应行中返回值处的解t.
事件的时间,作为列向量返回。事件时间te对应于返回的解金宝搏官方网站叶,即指定发生的事件。
事件发生时的解,作为数组返回。事件时间te对应于返回的解金宝搏官方网站叶,即指定发生的事件。
触发事件函数的索引,作为列向量返回。事件时间te对应于返回的解金宝搏官方网站叶,即指定发生的事件。
结构进行计算,作为结构数组返回。元素使用此结构德瓦尔函数求出区间内任意点的解(t0 tf).的索尔结构数组总是包含这些字段:
sol.x
解算器所选步骤的行向量。
sol.y
金宝搏官方网站解决方案。每一列sol.y(:,我)包含当时的解决方案sol.x(我).
sol.y(:,我)
sol.x(我)
sol.solver
解算器的名字。
此外,如果指定事件选择odeset然后检测事件索尔还包括这些字段:
事件
sol.xe
事件发生的时间点。sol.xe(结束)包含终端事件的确切点(如果有的话)。
sol.xe(结束)
sol.ye
金宝搏官方网站中的事件对应的解决方案sol.xe.
sol.ie
属性中指定的函数返回的向量事件选择。这些值指示解算器检测到的事件。
ode23是Bogacki和Shampine的显式Runge-Kutta(2,3)对的实现。它可能比数值在粗公差和中等刚度的情况下。ode23是单步求解器吗[1],[2].
[1] Bogacki, P.和L. F. Shampine,“3(2)对龙格-库塔公式,”达成。数学。信,第2卷,1989,第321-325页。
[2]香波,L. F.和M. W. ReicheltMATLAB ODE套件”,SIAM科学计算杂志, Vol. 18, 1997, pp. 1-22。
使用注意事项和限制:
所有odeset选项参数必须是常量。
代码生成不支持选项结构中的常量质量矩阵。金宝app提供一个质量矩阵作为函数。
您必须至少提供两个输出参数T而且Y.
T
Y
输入类型必须是同构的——全部为双精度或全部为单精度。
必须启用可变大小支持。金宝app代码生成需要动态内存分配tspan有两个元素或者使用事件函数。
数值|ode78|ode89|ode113|odeset|odeget|德瓦尔|odextend
ode78
ode89
ode113
odeget
odextend
您有这个示例的修改版本。要使用编辑打开此示例吗?
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在可用的地方获得翻译的内容,并查看当地的活动和优惠。根据您所在的位置,我们建议您选择:.
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
联系当地办事处