ode23s
求解刚性微分方程-低阶方法
语法
描述
例子
具有单解组件的ODE
具有单个解决方案组件的简单ode可以在求解器调用中指定为匿名函数。匿名函数必须接受两个输入(t, y)
,即使函数中没有使用其中一个输入。
求解ODE
指定的时间间隔(0 - 2)
初始条件Y0 = 1
.
Tspan = [0 2];Y0 = 1;[t,y] = ode23s(@(t,y) -10*t, tspan, y0);
画出解。
情节(t y“o”)
解决刚性ODE
一个刚性方程组的例子是松弛振荡中的范德波尔方程。极限环有一些区域,其中解的分量变化缓慢,问题相当僵硬,与一些变化非常剧烈的区域交替,而这些区域不是僵硬的。
方程组为:
初始条件是而且
.这个函数
vdp1000
船舶与MATLAB®和编码方程。
函数Dydt = vdp1000(t,y)计算mu = 1000时的范德波尔ode。%参见ODE15S, ODE23S, ODE23T, ODE23TB。雅塞克·基尔曾卡和劳伦斯·f·夏皮恩The MathWorks, Inc.版权所有Dydt = [y(2);1000 * (1 y (1) ^ 2) * y (2) - y (1)];
用数值
使用默认的相对和绝对容错(1 e - 3
而且1 e-6
,分别)非常慢,需要几分钟来求解和绘制解。数值
需要数百万个时间步来完成集成,由于刚度的区域,它很难满足公差。
这是得到的解的图数值
,这需要很长时间来计算。请注意通过刚性区域所需的大量时间步骤。
求解刚性系统ode23s
求解器,然后画出解的第一列y
相对于时间点t
.的ode23s
解算器通过僵硬区域的步骤比数值
.
[t,y] = ode23s(@vdp1000,[0 3000],[2 0]);情节(t y (: 1),“o”)
传递额外的参数给ODE函数
ode23s
仅适用于使用两个输入参数的函数,t
而且y
.但是,您可以通过在函数外部定义额外的参数并在指定函数句柄时传入它们来传递额外的参数。
求解ODE
将方程改写为一阶方程组
odefcn.m
将这个方程组表示为接受四个输入参数的函数:t
,y
,一个
,B
.
函数dydt = odefcn(t,y,A,B) dydt = 0 (2,1);Dydt (1) = y(2);dydt(2) = (A/B)*t.*y(1);
使用以下方法求解ODEode23s
.指定函数句柄,以便它传递为的预定义值一个
而且B
来odefcn
.
A = 1;B = 2;Tspan = [0 5];Y0 = [0 0.01];[t、y] = ode23s (@ (t, y) odefcn (t, y, A、B), tspan, y0);
画出结果。
情节(t y (: 1),“o”、t、y (:, 2),“-”。)
比较Stiff ODE求解器
的ode15s
求解器是解决大多数棘手问题的首选。然而,对于某些类型的问题,其他复杂的求解器可能更有效。本例使用所有四个硬ODE求解器求解一个硬测试方程。
考虑测试方程
的大小使方程变得越来越僵硬
增加。使用
初始条件
在时间间隔内0.5 [0]
.有了这些值,问题就足够复杂了数值
而且ode23
努力去积分方程。此外,使用odeset
来传递常数雅可比矩阵
并打开解算器统计数据的显示。
Lambda = 1e9;Y0 = 1;Tspan = [0 0.5];Opts = odeset(的雅可比矩阵λ,“统计数据”,“上”);
用ode15s
,ode23s
,ode23t
,ode23tb
.制作子图进行比较。
Subplot (2,2,1) tic, ode15s(@(t,y) -lambda*y, tspan, y0, opts), toc
104个成功步骤1个失败尝试212个函数求值0个偏导数21个LU分解210个线性系统解耗时0.957820秒。金宝搏官方网站
标题(“ode15s”) subplot(2,2,2) tic, ode23s(@(t,y) -lambda*y, tspan, y0, opts), toc
63个成功步骤0个失败尝试191个函数求值0个偏导数63个LU分解189个线性系统的解耗时为0.170566秒。金宝搏官方网站
标题(“ode23s”) subplot(2,2,3) tic, ode23t(@(t,y) -lambda*y, tspan, y0, opts), toc
95个成功步骤0个失败尝试125个函数求值0个偏导数28个LU分解123个线性系统的解耗时为0.206009秒。金宝搏官方网站
标题(“ode23t”) subplot(2,2,4) tic, ode23tb(@(t,y) -lambda*y, tspan, y0, opts), toc
71个成功步骤0个失败尝试167个函数求值0个偏导数23个LU分解236个线性系统解耗时为0.242249秒。金宝搏官方网站
标题(“ode23tb”)
刚性解算器都表现得很好,但是ode23s
对于这个特定的问题,以最少的步骤完成集成并以最快的速度运行。由于指定了常数雅可比矩阵,求解器不需要计算偏导数来计算解。指定雅可比矩阵的好处ode23s
因为它通常在每一步都求雅可比矩阵。
对于一般的刚性问题,刚性求解器的性能取决于问题的格式和指定的选项。提供雅可比矩阵或稀疏模式可以提高求解刚性问题的效率。但由于刚性求解器使用不同的雅可比矩阵,改进可能会有显著差异。实际上,如果一个方程组非常大或者需要求解很多次,那么研究不同求解器的性能以最小化执行时间是值得的。
输入参数
odefun
- - - - - -需要求解的函数
函数处理
要解决的函数,指定为定义要集成的函数的函数句柄。
这个函数Dydt = odefun(t,y)
,对于标量t
和一个列向量y
,必须返回一个列向量dydt
数据类型的单
或双
这对应于
.odefun
必须接受两个输入参数t
而且y
,即使函数中没有使用其中一个参数。
例如,解 ,使用函数:
函数Dydt = odefun(t,y) Dydt = 5*y-3;结束
对于方程组,的输出odefun
是一个向量。向量中的每个元素都是一个方程的解。例如,解
使用函数:
函数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
数据类型:function_handle
tspan
- - - - - -积分区间
向量
积分的区间,用向量表示。至少,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
被求解器用来计算合适的值InitialStep
而且MaxStep
:
如果
tspan
包含几个中间点(t0, t1, t2,…,tf)
,则指定的点给出了问题的尺度指示,这可以影响的值InitialStep
由求解器使用。因此,求解器获得的解可能不同,这取决于您是否指定tspan
作为一个两元向量或作为一个中间点向量。中的初始值和最终值
tspan
用于计算最大步长MaxStep
.因此,更改中的初始值或最终值tspan
可能导致求解器使用不同的步骤序列,这可能会改变解决方案。
例子:10 [1]
例子:[1 3 5 7 9 10]
数据类型:单
|双
y0
- - - - - -初始条件
向量
初始条件,指定为一个向量。y0
必须与的向量输出的长度相同odefun
,所以y0
中定义的每个方程的初始条件odefun
.
数据类型:单
|双
输出参数
t
-评价点
列向量
计算点,作为列向量返回。
如果
tspan
包含两个元素(t0 tf)
,然后t
包含用于执行集成的内部评估点。如果
tspan
那么,包含两个以上的元素t
和tspan
.
y
——金宝搏官方网站解决方案
数组
金宝搏官方网站解,作为数组返回。每一行y
的对应行中返回值处的解t
.
te
-事件发生时间
列向量
事件的时间,作为列向量返回。事件时间te
对应于返回的解金宝搏官方网站叶
,即
指定发生的事件。
叶
-事件发生时的解决方案
数组
事件发生时的解,作为数组返回。事件时间te
对应于返回的解金宝搏官方网站叶
,即
指定发生的事件。
即
-触发事件函数索引
列向量
触发事件函数的索引,作为列向量返回。事件时间te
对应于返回的解金宝搏官方网站叶
,即
指定发生的事件。
索尔
-评估结构
结构数组
结构进行计算,作为结构数组返回。元素使用此结构德瓦尔
函数求出区间内任意点的解(t0 tf)
.的索尔
结构数组总是包含这些字段:
结构域 | 描述 |
---|---|
|
解算器所选步骤的行向量。 |
|
金宝搏官方网站解决方案。每一列 |
|
解算器的名字。 |
此外,如果指定事件
选择odeset
然后检测事件索尔
还包括这些字段:
结构域 | 描述 |
---|---|
|
事件发生的时间点。 |
|
金宝搏官方网站中的事件对应的解决方案 |
|
属性中指定的函数返回的向量 |
算法
ode23s
是基于2阶修正Rosenbrock公式。因为它是一个单步求解器,它可能比ode15s
在解决允许粗公差的问题或解决方案迅速变化的问题时。金宝搏官方网站它可以解决一些棘手的问题ode15s
没有效果。的ode23s
求解器在积分的每一步都计算雅可比矩阵,因此提供雅可比矩阵对其可靠性和效率至关重要[1].
参考文献
[1]香波,L. F.和M. W. ReicheltMATLAB ODE套件”,SIAM科学计算杂志, Vol. 18, 1997, pp. 1-22。
版本历史
R2006a之前介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。