主要内容

ode113

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

描述

例子

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

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

例子

ty) = ode113 (odefuntspany0选项还使用定义的集成设置选项,它是使用odeset函数。例如,使用theAbsTolRelTol选项指定绝对和相对误差公差,或质量选择提供质量矩阵。

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

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

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

例子

全部折叠

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

解决歌唱

y 2 t

使用的时间间隔[0, 5]以及初始条件y0 = 0

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

策划解决方案。

情节(t y“o”

图中包含一个坐标轴。轴包含一个线型对象。

范德波尔方程是一个二阶微分方程

$ $ y“_1 - \μ\离开(1 - y_1 ^ 2 \右)y ' _1 + y_1 = 0, $ $

在哪里美元\μ& # 62;0美元为标量参数。将这个方程写成一阶ode的方程组,用代换法$ y ' _1 = y_2美元.得到的一阶ode系统为

数组$ $ & # xA; \开始{}{cl} & # xA; y“_1 & # 38;= y_2 \ \ & # xA; y ' _2 & # 38; = \μ(1-y_1 ^ 2) y_2结束——y_1。\{数组}& # xA; $ $

函数文件vdp1.m表示范德波尔方程\μ= 1美元.的变量y_1美元y_2美元的条目y (1)y (2)对于二元向量,dydt

函数dydt = vdp1 (t, y)计算mu = 1时的范德堡尔ode%参见ODE113, ODE23, ODE45。亚采克·基尔赞卡和劳伦斯·f·沙宾版权所有1984-2014 The MathWorks, Inc.dydt = [y (2);(1 y (1) ^ 2) * y (2) - y (1)];

解决ODE使用ode113命令用于设置时间间隔20 [0]与初始值[2 0].结果输出是时间点的列向量t还有一个解数组y.在每一行y的对应行中返回的时间t.第一列y对应于y_1美元,第二列为y_2美元

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

画出万博 尤文图斯y_1美元y_2美元t

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

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

解决歌唱

$$y

把方程写成一阶方程组

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_2 \ \ y ' _2 & # 38; = \压裂{一}{B} t y_1强生# xA; \{数组}$ $

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

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

使用以下方法解决ODEode113.指定函数句柄,以便它传入的预定义值一个Bodefcn

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

策划的结果。

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

相比数值,ode113解决者更擅长解决具有严格误差公差的问题。一种常见的情况ode113Excels是在轨道动力学问题中,这类问题的解曲线是平滑的,对精度要求很高。

二体问题考虑两个相互作用的质量m1平方米在普通的飞机上飞行。在这个例子中,一个质量明显比另一个大。当重物在原点时,运动方程是

数组$ $ \开始{}{cl} x

在哪里

$ $ r = \√6 {x ^ 2 + y ^ 2}。$ $

要解这个方程组,首先要用代入法将它转换成一个有四个一阶ode的方程组

数组$ $ \开始{}{cl} y_1 & # 38; = x \ \ y_2 & # 38; = x ' \ \ y_3 & # 38; = y \ \ y_4 & # 38; = & # xA; y '。\{数组}$ $

替换产生了一阶系统

数组$ $ \开始{}{cl} y ' _1 & # 38; = y_2 \ \ y ' _2 & # 38; y = -y_1 / r ^ 3 \ \ ' _3 & # 38; = y_4 \ \ y ' _4& # xA; & # 38; = -y_3 / r ^ 3。\{数组}$ $

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

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

保存twobodyode.m在工作目录中,然后使用ode113.使用严格的误差公差1 e-13RelTol1 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必须接受两个输入参数,ty,即使其中一个参数没有在函数中使用。

例如,解决 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,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.相反,求解器使用它自己的内部步骤来计算解,然后在请求的点上计算解tspan.在指定的万博 尤文图斯点上产生的解与在每个内部步骤上计算的解具有相同的精度顺序。

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

的值tspan是由求解器用来计算合适的值InitialStepMaxStep

  • 如果tspan包含几个中间点(t0, t1, t2,…,tf),则指定的点给出了问题的规模指示,这可以影响值InitialStep由求解器使用。因此,求解器获得的解可能会因您是否指定而不同tspan作为一个二元素向量或作为一个中间点的向量。

  • 中的初始值和最终值tspan用于计算最大步长MaxStep.因此,改变初始值或最终值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包含两个以上的元素t是一样的tspan

万博 尤文图斯解决方案,作为数组返回。在每一行y的对应行中返回值处的解决方案t

事件的时间,作为列向量返回。事件的时间te对应于返回的解万博 尤文图斯,指定发生的事件。

事件发生时的解决方案,作为数组返回。事件的时间te对应于返回的解万博 尤文图斯,指定发生的事件。

触发事件函数的索引,作为列向量返回。事件的时间te对应于返回的解万博 尤文图斯,指定发生的事件。

结构,作为结构数组返回。在the中使用这个结构德瓦尔函数来求区间内任意点的解(t0 tf).的索尔结构数组总是包含以下字段:

结构域 描述

sol.x

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

sol.y

万博 尤文图斯解决方案。每一列sol.y(:,我)包含时间的解决方案sol.x(我)

sol.solver

解算器的名字。

此外,如果指定事件然后检测选项和事件索尔还包括以下字段:

结构域 描述

sol.xe

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

sol.ye

万博 尤文图斯中的事件对应的解决方案sol.xe

sol.ie

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

算法

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

ode113可能比数值在严格的公差或ODE函数特别昂贵的评估。ode113是多步解算器吗?它通常需要在前几个时间点的解来计算当前的解万博 尤文图斯[1][2]

参考

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

[2] Shampine, l.f.和M. W. Reichelt, "MATLAB ODE套件”,SIAM科学计算杂志,第18卷,1997年,第1-22页。

之前介绍过的R2006a