文档

ode113

求解非刚性微分方程-变阶法

语法

[t、y] = ode113 (odefun tspan, y0)
[t、y] = ode113 (odefun tspan, y0,选项)
[t y te,你们()= ode113 (odefun tspan, y0,选项)
索尔= ode113 (___

描述

例子

ty) = ode113 (odefuntspany0,在那里Tspan = [t0 tf],对微分方程组进行积分 y f t y t0特遣部队与初始条件y0.解数组中的每一行y对应列向量中返回的值t

所有MATLAB®ODE求解器可以求解这种形式的方程组 y f t y ,或者涉及质量矩阵的问题, t y y f t y .这些求解器都使用类似的语法。的ode23s求解器只有在质量矩阵恒定的情况下才能求解质量矩阵问题。ode15s而且ode23t可以解决质量矩阵是奇异的问题,称为微分代数方程(DAEs)。指定质量矩阵使用质量选择odeset

例子

ty) = ode113 (odefuntspany0选项还使用定义的集成设置选项方法创建的参数odeset函数。例如,使用AbsTol而且RelTol选项来指定绝对和相对误差容忍质量选项提供质量矩阵。

tyte) = ode113 (odefuntspany0选项另外找到函数的位置ty,称为事件函数,为零。在输出中,te是事件发生的时间,解决方案在事件发生时,和触发事件的索引。

对于每个事件函数,指定积分是否终止于0点,以及过0点的方向是否重要。通过设置“事件”属性设置为函数,例如myEventFcn@myEventFcn,并创建相应的函数:[价值isterminal方向] =myEventFcnty).有关更多信息,请参见歌唱活动的位置

索尔= ode113 (___返回可以使用的结构德瓦尔求区间上任意点的解(t0 tf).您可以使用前面语法中的任何输入参数组合。

例子

全部折叠

具有单个解决方案组件的简单ode可以在对求解器的调用中指定为匿名函数。匿名函数必须接受两个输入(t, y)即使其中一个输入没有被使用。

解决歌唱

的时间间隔[0, 5]初始条件y0 = 0

Tspan = [0 5];y0 = 0;[t,y] = ode113(@(t,y) 2*t, tspan, y0);

策划解决方案。

情节(t y“o”

范德堡尔方程是二阶ODE

在哪里是一个标量参数。通过代换,将这个方程改写为一阶ode的方程组.得到的一阶ode系统为

函数文件vdp1.m表示范德堡尔方程.的变量而且的条目y (1)而且y (2)对于二元向量,dydt

函数dydt = vdp1 (t, y)求mu = 1时的van der Pol ode亦见ODE113, ODE23, ODE45。Jacek Kierzenka和Lawrence F. Shampine。版权所有The MathWorks, Inc.dydt = [y (2);(1 y (1) ^ 2) * y (2) - y (1)];

求解ODEode113函数在时间间隔上20 [0]与初始值[2 0].结果输出是时间点的列向量t一个解数组y.在每一行y的对应行中返回的时间t.的第一列y对应于,第二列为

[t,y] = ode113(@vdp1,[0 20],[2;0]);

规划解决方案金宝搏官方网站而且反对t

情节(t y (: 1),“o”、t、y (:, 2),“o”)标题(“ODE113下van der Pol方程(\mu = 1)的解”);包含(“t”);ylabel (“解决方案y”);传奇(“y_1”“y_2”

ode113只适用于使用两个输入参数的函数,t而且y.但是,可以通过在函数外部定义参数并在指定函数句柄时传入额外的参数。

解决歌唱

将方程改写为一阶方程组

odefcn.m将这个方程组表示为一个接受四个输入参数的函数:ty一个,B

函数dydt = odefcn(t,y,A,B) dydt = 0 (2,1);dydt (1) = y (2);dydt (2) = (A / B) * t。* y (1);

求解ODEode113.指定函数句柄,以便传递为的预定义值一个而且Bodefcn

= 1;B = 2;Tspan = [0 5];Y0 = [0 0.01];[t、y] = ode113 (@ (t, y) odefcn (t, y, A、B), tspan, y0);

策划的结果。

情节(t y (: 1),“o”、t、y (:, 2),“-”。

相比数值,ode113求解器更擅长解决具有严格容错的问题。常见的情况是ode113Excels是在轨道动力学问题,其中的解曲线是光滑的,要求精度高。

二体问题考虑两个相互作用的质量m1而且平方米在同一平面上绕轨道运行。在这个例子中,其中一个质量明显大于另一个。当重物在原点时,运动方程为

在哪里

为了求解该系统,首先使用替换将其转换为一个由四个一阶ode组成的系统

替换产生一阶方程组

这个函数twobodyode编码二体问题的方程组。

函数dy = twobodyode (t, y)两个物体的质量一个比另一个大得多。。R =√(y(1)²+ y(3)²);dy = [y (2);- y (1) / r ^ 3;y (4);- y (3) / r ^ 3);

保存twobodyode.m在你的工作目录中,然后用ode113.使用严格的误差容忍1 e-13RelTol而且1 e-14AbsTol

选择= odeset (“Reltol”1 e-13“AbsTol”1 e-14“统计数据”“上”);Tspan = [0 10*pi];Y0 = [2 0 0 0.5];[t,y] = ode113(@twobodyode, tspan, y0, opts);情节(t、y)传说(“x”“x””“y”“y””“位置”“东南”)标题(“位置和速度分量”
924个成功的步骤4个失败的尝试1853个函数计算

图绘制(y (: 1), y (:, 3),“o”, 0, 0,“罗”)轴平等的标题(“小质量轨道”

相比数值,ode113求解器能够更快地获得解,并且用较少的函数求值。

输入参数

全部折叠

函数,指定为函数句柄,它定义了要集成的函数。

这个函数dydt = odefun (t, y),对于标量t一个列向量y,必须返回列向量dydt的数据类型对应于 f t y 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) = (1) + 2 * y (2);dydt (2) = 3 * y (1) + 2 * y (2);

有关如何向函数提供附加参数的信息odefun,请参阅参数化功能

例子:@myFcn

数据类型:function_handle

积分区间,用向量表示。至少,tspan必须是两个元素的向量(t0 tf)指定初始和最终时间。在特定的时间得到解金宝搏官方网站t0而且特遣部队,使用更长的向量形式(t0, t1, t2,…,tf).中的元素tspan必须是全部增加或全部减少。

求解器施加初始条件,y0,在tspan (1),则从tspan (1)tspan(结束)

  • 如果tspan有两个元素,(t0 tf),则求解器返回在间隔内的每个内部集成步骤上求值的解。

  • 如果tspan包含两个以上的元素(t0, t1, t2,…,tf),求解器返回在给定点处的解。这并影响求解器用于遍历的内部步骤tspan (1)tspan(结束).因此,求解器不一定精确地步进到中指定的每一个点tspan.然而,在指定点产生的解与在金宝搏官方网站每个内部步骤计算的解具有相同的精度。

    指定几个中间点对计算效率影响不大,但对于大型系统来说,它可能会影响内存管理。

根据您是否指定,求解器获得的解可能不同tspan作为双元向量或作为中间点的向量。如果tspan包含几个中间点,然后它们给出问题规模的指示,这可能会影响求解者所采取的初始步骤的大小。

例子:10 [1]

例子:[1 3 5 7 9 10]

数据类型:|

初始条件,指定为一个向量。y0必须与的输出向量的长度相同odefun,所以y0中定义的每个方程包含初始条件odefun

数据类型:|

选项结构,指定为结构数组。使用odeset函数创建或修改选项结构。看到ODE选项摘要获取与每个求解器兼容的选项列表。

例子:选项= odeset (e-5 RelTol, 1,“统计”,“对”,“OutputFcn”,@odeplot)的相对容错1 e-5,打开求解器统计信息的显示,并指定输出函数@odeplot在计算的过程中绘制出解。

数据类型:结构体

输出参数

全部折叠

计算点,作为列向量返回。

  • 如果tspan包含两个元素,(t0 tf),然后t包含用于执行集成的内部评估点。

  • 如果tspan那么,包含两个以上的元素ttspan

金宝搏官方网站解决方案,作为数组返回。在每一行y的对应行中返回值处的解t

事件的时间,作为列向量返回。中的事件时间te对应于返回的解金宝搏官方网站,指定发生的事件。

事件发生时的解决方案,作为数组返回。中的事件时间te对应于返回的解金宝搏官方网站,指定发生的事件。

消失事件函数的索引,作为列向量返回。中的事件时间te对应于返回的解金宝搏官方网站,指定发生的事件。

结构进行计算,作为结构数组返回。将此结构与德瓦尔函数求区间内任意点的解(t0 tf).的索尔结构数组总是包含以下字段:

结构域 描述

sol.x

由求解器选择的步骤的行向量。

sol.y

金宝搏官方网站解决方案。每一列sol.y(:,我)包含及时的解决方案sol.x(我)

sol.solver

解算器的名字。

此外,如果指定事件然后检测到选项和事件索尔也包括这些字段:

结构域 描述

sol.xe

事件发生时的点。sol.xe(结束)包含终端事件的确切点(如果有的话)。

sol.ye

金宝搏官方网站中的事件对应的解sol.xe

sol.ie

类中指定的函数返回的向量事件选择。这些值指示解算器检测到的事件。

算法

ode113是1 ~ 13阶的变步长变阶(VSVO) Adams-Bashforth-Moulton PECE求解器。使用的最高阶似乎是12,然而,一个13阶的公式被用来形成误差估计和函数进行局部外推推进13阶的积分。

ode113可能比数值在严格的公差下,或者如果ODE函数的评估特别昂贵。ode113是多步求解器吗?它通常需要前面几个时间点的解来计算当前的解金宝搏官方网站[1][2]

参考文献

香波,l.f.和M. K.戈登,常微分方程的计算机解法:初值问题, w·h·弗里曼,旧金山,1975年。

香波,l.f.和m.w.瑞歇特,"MATLAB ODE套件”,SIAM科学计算杂志1997年,第18卷,第1-22页。

之前介绍过的R2006a

这个话题有帮助吗?