常微分方程
常微分方程
(ODE) 包含与一个自变量 t(通常称为时间)相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为
,对于二阶导数为
,依此类推。ODE 的
阶数
等于 y 在方程中出现的最高阶导数。
例如,这是一个二阶 ODE:
在
初始值问题
中,从初始状态开始解算 ODE。利用初始条件
以及要在其中求得答案的时间段
,以迭代方式获取解。在每一步,求解器都对之前各步的结果应用一个特定算法。在第一个这样的时间步,初始条件将提供继续积分所需的必要信息。最终结果是,ODE 求解器返回一个时间步向量
以及在每一步对应的解
。
复数 ODE
考虑复数 ODE 方程
其中
。为解算该方程,需要将实部和虚部分解为不同的解分量,最后重新组合相应的结果。从概念上讲,这类似于
例如,如果 ODE 为
,则可以使用函数文件来表示该方程:
function f = complexf(t,y)
f = y.*t + 2*i;
end
然后,分解实部和虚部的代码为
在运行求解器以获取解时,初始条件
y0
也会分解为实部和虚部,以提供每个解分量的初始条件。
获得解后,将实部和虚部分量组合到一起可获得最终结果。
基本求解器选择
ode45
适用于大多数 ODE 问题,一般情况下应作为您的首选求解器。但对于精度要求更宽松或更严格的问题而言,
ode23
、
ode78
、
ode89
和
ode113
可能比
ode45
更加高效。
一些 ODE 问题具有较高的计算
刚度
或难度。术语“刚度”无法精确定义,但一般而言,当问题的某个位置存在标度差异时,就会出现刚度。例如,如果 ODE 包含的两个解分量在时间标度上差异极大,则该方程可能是刚性方程。如果非刚性求解器(例如
ode45
)无法解算某个问题或解算速度极慢,则可以将该问题视为刚性问题。如果您观察到非刚性求解器的速度很慢,请尝试改用
ode15s
等刚性求解器。在使用刚性求解器时,可以通过提供雅可比矩阵或其稀疏模式来提高可靠性和效率。
您可以使用
ode
对象根据问题的属性自动选择求解器。如果您不确定要使用哪个求解器,请参考下表,其中提供关于每个求解器的适用情形的一般指导。
求解器
|
问题类型
|
精度
|
何时使用
|
ode45
|
非刚性
|
中
|
大多数情况下,您应当首先尝试求解器
ode45
。
|
ode23
|
低
|
对于容差较宽松的问题或在刚度适中的情况下,
ode23
可能比
ode45
更加高效。
|
ode113
|
低到高
|
对于具有严格误差容限的问题或在 ODE 函数需要大量计算开销的情况下,
ode113
可能比
ode45
更加高效。
|
ode78
|
高
|
对于具有高准确度要求的平滑解的问题,
ode78
可能比
ode45
更加高效。
|
ode89
|
高
|
对于非常平滑的问题,当在较长的时间区间内进行积分时,或当容差特别严格时,
ode89
可能比
ode78
更加高效。
|
ode15s
|
刚性
|
低到中
|
若
ode45
失败或效率低下并且您怀疑面临刚性问题,请尝试
ode15s
。此外,当解算微分代数方程 (DAE) 时,请使用
ode15s
。
|
ode23s
|
低
|
对于误差容限较宽松的问题,
ode23s
可能比
ode15s
更加高效。它可以解算一些刚性问题,而使用
ode15s
解算这些问题的效率不高。
ode23s
会在每一步计算雅可比,因此通过
odeset
提供雅可比有利于最大限度地提高效率和精度。
如果存在质量矩阵,则它必须为常量矩阵。
|
ode23t
|
低
|
对于仅仅是刚度适中的问题,并且您需要没有数值阻尼的解,请使用
ode23t
。
ode23t
可解算微分代数方程 (DAE)。
|
ode23tb
|
低
|
与
ode23s
一样,对于误差容限较宽松的问题,
ode23tb
求解器可能比
ode15s
更加高效。
|
ode15i
|
完全隐式
|
低
|
对于完全隐式问题 f(t,y,y’) = 0 和微分指数为 1 的微分代数方程 (DAE),请使用
ode15i
。
|
有关何时使用每种求解器的详细信息和更多建议,请参阅
[5]
。
参考
[1] Shampine, L. F. and M. K. Gordon, Computer Solution of Ordinary Differential Equations: the Initial Value Problem, W. H. Freeman, San Francisco, 1975.
[2] Forsythe, G., M. Malcolm, and C. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, New Jersey, 1977.
[3] Kahaner, D., C. Moler, and S. Nash, Numerical Methods and Software, Prentice-Hall, New Jersey, 1989.
[4] Shampine, L. F., Numerical Solution of Ordinary Differential Equations, Chapman & Hall, New York, 1994.
[5] Shampine, L. F. and M. W. Reichelt, “The MATLAB ODE Suite,” SIAM Journal on Scientific Computing, Vol. 18, 1997, pp. 1–22.
[6] Shampine, L. F., Gladwell, I. and S. Thompson, Solving ODEs with MATLAB, Cambridge University Press, Cambridge UK, 2003.
Run the command by entering it in the MATLAB Command Window.
Web browsers do not support MATLAB commands.