主要内容

ode23tb

解决刚性微分方程-梯形规则+向后微分公式

描述

例子

(t,y)= ode23tb (odefun,tspan,y0),在那里tspan = (t0 tf)集成系统的微分方程 y = f ( t , y ) t0特遣部队与初始条件y0。数组中的每一行解决方案y对应于一个返回值的列向量t

所有MATLAB®ODE解决可以解决系统方程的形式 y = f ( t , y ) ,或涉及质量矩阵的问题, ( t , y ) y = f ( t , y ) 。解决所有使用类似的语法。的ode23s解算器只能解决问题与质量矩阵,如果质量矩阵是常数。ode15sode23t可以解决问题的质量矩阵是奇异的,称为微分方程(拓扑)。指定使用的质量矩阵质量选择odeset

例子

(t,y)= ode23tb (odefun,tspan,y0,选项)还使用集成设置定义的选项使用的创建,这是一个论点odeset函数。例如,使用AbsTolRelTol选项来指定绝对和相对误差公差,或者质量选项提供一个质量矩阵。

(t,y,te,,)= ode23tb (odefun,tspan,y0,选项)另外发现的功能(t,y),称为事件函数,是零。在输出中,te事件的时间,是解决方案时的事件,然后呢触发事件的索引。

对于每个事件函数,指定是否终止的集成是一个零和是否零交叉的方向很重要。通过设置的呢“事件”属性函数,如myEventFcn@myEventFcn,创建一个对应的功能:价值,isterminal,方向]=myEventFcn(t,y)。有关更多信息,请参见歌唱活动的位置

索尔= ode23tb (___)返回一个结构,您可以使用德瓦尔评估解决方案在任何时候间隔(t0 tf)。您可以使用任何输入参数的组合在以前的语法。

例子

全部折叠

简单的常微分方程,也可以指定一个单一的解决方案组件在调用解决一个匿名函数。匿名函数必须接受两个输入(t, y),即使一个不使用输入的函数。

解决歌唱

y = - - - - - - 1 0 t

指定的时间间隔(0 - 2)和初始条件y0 = 1

tspan = [0 2];y0 = 1;[t、y] = ode23tb (@ (t, y) -10 * t, tspan, y0);

策划解决方案。

情节(t y“o”)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象。

僵硬的方程组的一个例子是范德波尔方程在弛豫振荡。极限环的地区问题的解决方案组件变化缓慢,很僵硬,与地区急剧变化的交替不僵硬。

方程组是:

数组$ $ \开始{}{cl} y_1 ' & # 38; = y_2 \ \ y_2’& # 38; = 1000 (1-y_1 ^ 2) y_2-y_1 \{数组}$ $

初始条件是美元y_1(0) = 2美元美元y_2(0) = 0美元。这个函数vdp1000船只与MATLAB®和编码方程。

函数dydt = vdp1000 (t, y)% VDP1000评估范德堡尔常微分方程为μ= 1000。%%参见ODE15S、ODE23S ODE23T ODE23TB。% Jacek Kierzenka和劳伦斯·f·Shampine% 1984 - 2014版权MathWorks公司。dydt = [y (2);1000 * (1 y (1) ^ 2) * y (2) - y (1)];

解决该系统使用数值用默认的相对和绝对误差公差(1 e - 31 e-6分别是极其缓慢的,需要几分钟来解决和策划解决方案。数值需要数以百万计的时间步骤完成集成,由于刚度的领域,努力满足公差。

这是一个阴谋的解决方案了数值,这需要很长时间来计算。注意到大量的时间步骤通过刚度。

解决的系统使用ode23tb解算器,然后策划解决方案的第一列y的时间点t。的ode23tb解算器经过激烈的地区比更少的步骤数值

[t、y] = ode23tb (@vdp1000, 3000年[0],[2 0]);情节(t y (: 1),“o”)

ode23s仅适用于使用两个输入参数的函数,ty。不过,您可以通过额外参数通过定义外部函数和传递他们当你指定函数处理。

解决歌唱

$ $ y = \压裂{一}{B} t y。$ $

重写方程一阶系统产量

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

odefcn.m代表这个方程组作为一个函数,接受四个输入参数:t,y,一个,B

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

解决ODE使用ode23tb。指定函数处理,使其通过预定义的值一个Bodefcn

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

策划的结果。

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

ode15s解算器是一个很好的首选最僵硬的问题。然而,其他的解决可能会更有效的对于某些类型的问题。这个例子解决了一个僵硬的测试解决方程使用所有四个僵硬的颂歌。

考虑测试方程

y = - - - - - - λ y

方程变得越来越僵硬的大小 λ 增加。使用 λ = 1 × 1 0 9 和初始条件 y ( 0 ) = 1 在时间间隔0.5 [0]。与这些值,问题是足够硬,数值ode23努力把方程。此外,使用odeset通过在恒定的雅可比矩阵 J = f y = - - - - - - λ 和打开解算器的显示统计数据。

λ= 1 e9;y0 = 1;tspan = 0.5 [0];选择= odeset (的雅可比矩阵λ,“统计数据”,“上”);

解决了方程ode15s,ode23s,ode23t,ode23tb。让比较次要情节。

次要情节(2 2 1)抽搐,ode15s (@ (t、y)λ* y, tspan, y0,选择),toc
104成功的步骤1失败212 0偏导数函数值21 LU分解210解线性系统运行时间是2.031443秒。金宝搏官方网站
标题(“ode15s”次要情节(2,2,2)抽搐,ode23s (@ (t、y)λ* y, tspan, y0,选择),toc
63成功的步骤0失败191 0偏导数函数值63 LU分解189解线性系统运行时间是0.415775秒。金宝搏官方网站
标题(“ode23s”次要情节(2,2,3)抽搐,ode23t (@ (t、y)λ* y, tspan, y0,选择),toc
95成功的步骤0失败125次函数评价123年0偏导数28日LU分解解线性系统运行时间是0.673081秒。金宝搏官方网站
标题(“ode23t”次要情节(2,2,4)抽搐,ode23tb (@ (t、y)λ* y, tspan, y0,选择),toc
71成功步骤0失败236 167 0偏导数函数值23 LU分解解线性系统运行时间是0.771691秒。金宝搏官方网站
标题(“ode23tb”)

图包含4轴对象。坐标轴对象1标题ode15s包含2线类型的对象。坐标轴对象2标题ode23s包含2线类型的对象。坐标轴对象3 2标题ode23t包含对象类型的线。坐标轴对象4标题ode23tb包含2线类型的对象。

僵硬的解决者都表现良好,但是ode23s完成集成最少的步骤和运行最快的为这个特定的问题。自指定恒雅可比矩阵,没有解决需要计算偏导数计算的解决方案。指定的雅可比矩阵的好处ode23s最,因为它通常在每一步计算雅可比矩阵。

一般的问题,解决僵硬的性能取决于问题的格式和指定的选项。提供雅可比矩阵或稀疏模式总是提高求解效率的问题。但由于僵硬的解决者使用雅可比矩阵不同,改善有很大的差别。实际上,如果一个方程组非常大或需要解决很多次,那么值得调查的性能不同的连接器来减少执行时间。

输入参数

全部折叠

函数来解决,指定为一个函数处理,定义了功能集成。

这个函数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 (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。相反,解算器使用自己内部的步骤来计算解决方案,然后评估请求的点的解决方案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函数来创建或修改选项结构。看到摘要歌唱选项选项列表的每个解算器兼容。

例子:选项= odeset (e-5 RelTol, 1,“统计”,“对”,“OutputFcn”, @odeplot)指定一个相对误差的宽容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.solver

解算器的名字。

此外,如果你指定事件选择odeset和事件被检测到,那么索尔还包括这些字段:

结构域 描述

sol.xe

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

sol.ye

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

sol.ie

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

算法

ode23tbTR-BDF2的实现,一个隐式龙格-库塔公式以梯形法则一步为第一阶段和向后微分公式的秩序两个为第二阶段。通过建设、相同的迭代矩阵用于评估两个阶段。就像ode23sode23t解决,这可能是更有效的比ode15s与原油公差问题[1],[2]

引用

[1]银行,r E。,W. C. Coughran, Jr., W. Fichtner, E. Grosse, D. Rose, and R. Smith, “Transient Simulation of Silicon Devices and Circuits,”IEEE反式。计算机辅助设计4(1985),页436 - 451。

[2]Shampine、l f和m . e .何西阿书“TR-BDF2的分析和实现,”应用数值数学20,1996年。

版本历史

之前介绍过的R2006a