微分方程{\displaystyle y'=y,\ y(0)=1}的数值积分求解图。
  蓝：欧拉法
  绿：中点法
  红：精确解：{\displaystyle y=e^{t}}
步长{\displaystyle h=1.0}。
{\displaystyle h=0.25}时的同一图。{\displaystyle h\to 0}时，中点法比欧拉法收敛得更快。
**常微分方程数值方法**是用以寻找常微分方程（ODE）解的数值近似值的方法。其使用也称作"数值积分"，此术语也可指积分的计算。

很多微分方程无法精确求解。但在工程学等领域的实际应用中，通常只需得到数值近似解。本文介绍的算法可用于计算这种近似值，另一种方法是用微积分技术得到解的级数展开表达。

常微分方程出现于物理学、化学、生物学、经济学等学科中。此外，偏微分方程数值方法中的一部分将偏微分方程转为常微分方程，然后可用本文所述方法求解。

问题
--

一阶微分方程是有如下形式的初值问题（IVP）：


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y'(t)=f(t,y(t)),\qquad y(t\_{0})=y\_{0},} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**1**)** |

其中*f*是函数{\displaystyle f:[t\_{0},\infty )\times \mathbb {R} ^{d}\to \mathbb {R} ^{d}}，初始条件{\displaystyle y\_{0}\in \mathbb {R} ^{d}}是已知向量。"一阶"是说方程中只出现了*y*的一阶导。

在不失高阶系统一般性的前提下，我们限制l在一阶微分方程上，因为高阶ODE可通过引入额外变量转换为更大的一阶方程组。例如，二阶方程{\displaystyle y''=-y}可重写为2个一阶方程：{\displaystyle y'=z,\ z'=-y}。

本文介绍IVP的数值方法，并指出边值问题（BVP）需要一套不同的工具：需要在多个点上定义解*y*的值或成分，因此要用不同方法求解BVP，如打靶法（及其变体），或差分、伽辽金法、配置法之类全局方法，都适用于此类问题。

Picard–Lindelöf定理指出，只要*f*是利普希茨连续的，就有唯一解。

方法
--

解一阶IVP的数值方法可分为两大类：线性多步法与龙格-库塔法。还可进一步划为显式或隐式，例如隐式线性多步法包括亚当斯-莫尔顿法（Adams-Moulton methods）与向后微分公式（BDF），隐式龙格-库塔法包括对角隐式龙格-库塔法（DIRK）、单对角隐式龙格-库塔法（SDIRK）与基于高斯求积的高斯–拉道法等等。线性多步法中的显式方法有亚当斯-巴什福思法，布彻表（Butcher tableau）为下对角的龙格-库塔法都是显式方法。根据经验，刚性微分方程需要用隐式方案，而非刚性问题则可用显示方案更有效地求解。

所谓一般线性方法（GLM）是上述两大类方法的概括。

### 欧拉法

更多：欧拉法
从曲线上任意一点出发，沿与曲线相切的直线移动一小段距离，就能得到曲线上邻近点的近似值。

从微分方程(**1**)开始，我们用差分近似代替导数*y*′：


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y'(t)\approx {\frac {y(t+h)-y(t)}{h}},} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**2**)** |

重新排列后得到以下公式

{\displaystyle y(t+h)\approx y(t)+hy'(t)}
利用(**1**)可得


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y(t+h)\approx y(t)+hf(t,y(t)).} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**3**)** |

此式的应用通常如下：择步长*h*，构造序列{\displaystyle t\_{0},t\_{1}=t\_{0}+h,t\_{2}=t\_{0}+2h,...}记精确解{\displaystyle y(t\_{n})}的数值估计值为{\displaystyle y\_{n}}。受(**3**)启发，我们用下面的递归方法计算估计值：


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y\_{n+1}=y\_{n}+hf(t\_{n},y\_{n}).} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**4**)** |

这就是**（前向）欧拉法**，是莱昂哈德·欧拉（1768）描述的方法。

欧拉法是显式方法的一个例子，这是说新值{\displaystyle y\_{n+1}}是根据已知值（如{\displaystyle y\_{n}}）定义的。

### 反向欧拉法

更多：反向欧拉法
若不用(**2**)，而用近似值


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y'(t)\approx {\frac {y(t)-y(t-h)}{h}},} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**5**)** |

则得到**反向欧拉法**：


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y\_{n+1}=y\_{n}+hf(t\_{n+1},y\_{n+1}).} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**6**)** |

反向欧拉法是隐式方法，这是说需要求解一个方程才能得到新值{\displaystyle y\_{n+1}}。通常用定点迭代或牛顿-拉弗森法（的某种修改版）实现之。

隐式方法求解这方程比显示方法直接代入要花更多时间，选择方法时必须考虑这一成本。隐式方法（如(**6**)）的优点是求解刚性方程时通常更稳定，便可以使用更大的步长*h*。

### 一阶指数积分器法

更多：指数积分器
指数积分器描述了一大类积分器，近来得到了长足发展。它们至少可以追溯到20世纪60年代。

我们不用(**1**)，假设微分方程形式为


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y'(t)=-A\,y+{\mathcal {N}}(y),} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**7**)** |

或已被局部线性化，围绕背景状态产生线性项{\displaystyle -Ay}与非线性项{\displaystyle {\mathcal {N}}(y)}。

将(**7**)乘以{\textstyle e^{At}}，并在时间区间{\displaystyle [t\_{n},t\_{n+1}=t\_{n}+h]}内精确积分，便构造得到了指数积分器：

{\displaystyle y\_{n+1}=e^{-Ah}y\_{n}+\int \_{0}^{h}e^{-(h-\tau )A}{\mathcal {N}}\left(y\left(t\_{n}+\tau \right)\right)\,d\tau .}
此积分方程是精确的，但并没有定义积分。

使{\displaystyle {\mathcal {N}}(y(t\_{n}+\tau ))}在整个区间内不变，可实现一阶指数积分器：


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle y\_{n+1}=e^{-Ah}y\_{n}+A^{-1}(1-e^{-Ah}){\mathcal {N}}(y(t\_{n}))\ .} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(**8**)** |

### 推广

欧拉法往往不够精确。更准确地说，只有一阶（下面将介绍阶的概念），这就促使数学家寻找高阶方法。

一种方法是，用{\displaystyle y\_{n}}以及更多之前的值确定{\displaystyle y\_{n+1}}，所谓*多步法*便实现了这种想法。最简单的可能是蛙跳积分法，其是二阶方法，（粗略地说）依赖于2个时间值。

几乎所有实用的多步法都属于线性多步法，形式为





α

k

y

n
+
k

+

α

k
−
1

y

n
+
k
−
1

+
⋯
+

α

0

y

n



=
h

[

β

k

f
(

t

n
+
k

,

y

n
+
k

)
+

β

k
−
1

f
(

t

n
+
k
−
1

,

y

n
+
k
−
1

)
+
⋯
+

β

0

f
(

t

n

,

y

n

)

]

.



{\displaystyle {\begin{aligned}&{}\alpha \_{k}y\_{n+k}+\alpha \_{k-1}y\_{n+k-1}+\cdots +\alpha \_{0}y\_{n}\\&{}\quad =h\left[\beta \_{k}f(t\_{n+k},y\_{n+k})+\beta \_{k-1}f(t\_{n+k-1},y\_{n+k-1})+\cdots +\beta \_{0}f(t\_{n},y\_{n})\right].\end{aligned}}}

{\displaystyle {\begin{aligned}&{}\alpha _{k}y_{n+k}+\alpha _{k-1}y_{n+k-1}+\cdots +\alpha _{0}y_{n}\\&{}\quad =h\left[\beta _{k}f(t_{n+k},y_{n+k})+\beta _{k-1}f(t_{n+k-1},y_{n+k-1})+\cdots +\beta _{0}f(t_{n},y_{n})\right].\end{aligned}}}
另一种方法是在区间{\displaystyle [t\_{n},t\_{n+1}]}内取更多点。这产生了得名于卡尔·龙格与马丁·威廉·库塔的龙格-库塔法，其中一种4阶方法尤为流行。

### 高级特征

要用这些方法求解ODE，需要的不仅是时间步长公式。始终相同的步长效率不高，于是开发了**可变步长方法**。通常，步长的选择应使每步的（局部）误差低于某容差水平，这意味着方法还要计算**误差指标**，即对局部误差的估计。

这一思想的延伸是在不同阶方法之间动态选择（称作**可变阶数方法**）。基于理查德森外推法的Bulirsch–Stoer算法之类方法通常用于构建各种不同阶的方法。

其他理想特征还有：

* **输出稠密**：不仅对点{\displaystyle t\_{0},\ t\_{1},\ t\_{2},\ \dots }，还对整个积分区间进行低成本数值逼近；
* **事件定位**：找到事件发生的位置，例如某函数取0的时间。通常用求根算法；
* 支持并行计算；
* 用于时间积分时，具有时间可逆性。

### 其他方法

很多方法不在讨论的框架内，如

* **多阶导数法'*，不仅使用*f*，还用其导数。这类方法包括****Hermite–Obreschkoff法**、**龙格-库塔-费尔贝格法*与递归计算解*y*的泰勒级数系数的Parker–Sochacki法、Bychkov–Scherbakov法等。
* **二阶常微分方程组法**。前面说过，所有高阶常微分方程都可化为形式如(1)的一阶常微分方程组，这固然没错，但未必是最佳方法。**尼斯特伦法**可直接用于二阶方程。
* **几何积分法**专门针对几类特殊的常微分方程（如解哈密顿力学方程的辛积分法），这些方法在数值求解时会尊重这些类的底结构或几何结构。
* **量化状态系统方法**是基于状态量化思想的一系列ODE积分方法，在模拟频繁不连续的稀疏系统时非常有效。

### 实时并行方法

有些IVP要求积分具有很高的时间分辨率和/或很长的时间区间，传统的序列时间步进法无法实时计算（如数值天气预报、等离子体建模与分子动力学中的IVP）。针对这些问题，人们开发了实时并行（PinT）法以便用并行计算缩短运行时间。

早期的PinT法（最早提出于20世纪60年代）最初被研究人员忽视，因为其所需的并行计算架构尚未普及。2000年代初，随着算力的提高，灵活易用的PinT算法——Parareal算法重新吸引了兴趣，它适用于求解各种IVP。百亿亿次级运算的出现使PinT算法获得更多关注，并启动了能用于世界上最强大的超级计算机的算法开发。截至2023年，最流行的方法有Parareal、PFASST、ParaDiag、MGRIT等，

分析
--

数值分析不仅包括数值方法的设计，还包括其分析。分析中的3个核心概念是：

* *收敛性*：方法是否逼近解；
* *阶数*：近似解的程度；
* *数值稳定性*：误差是否能得到抑制。

### 收敛性

条目：序列、极限 (数学)和数列极限
若数值解随着步长*h*趋近于0而逼近精确解，则称此数值方法具有**收敛性**（convergent）。更确切地说，要求对利普希茨函数*f*与每个{\displaystyle t^{\*}>0}，ODE (1)

{\displaystyle \lim \_{h\to 0^{+}}\max \_{n=0,1,\dots ,\lfloor t^{\*}/h\rfloor }\left\|y\_{n,h}-y(t\_{n})\right\|=0.}
上述所有方法都收敛。

### 一致性与阶数

更多：截断误差
设数值方法

{\displaystyle y\_{n+k}=\Psi (t\_{n+k};y\_{n},y\_{n+1},\dots ,y\_{n+k-1};h).\,}
方法的**局部（截断）误差**定义为迭代一步产生的误差。即，假设之前的迭代无误差，则是此方法结果与精确解之间的差

{\displaystyle \delta \_{n+k}^{h}=\Psi \left(t\_{n+k};y(t\_{n}),y(t\_{n+1}),\dots ,y(t\_{n+k-1});h\right)-y(t\_{n+k}).}
若

{\displaystyle \lim \_{h\to 0}{\frac {\delta \_{n+k}^{h}}{h}}=0.}
则称此方法一致（consistent）。若

{\displaystyle \delta \_{n+k}^{h}=O(h^{p+1})\quad {\mbox{as }}h\to 0.}
则称此方法阶数为*p*。因此，阶数不为0的方法是一致的。上文介绍的两种欧拉法(4、6)都是1阶的，因此是一致的。实践中使用的大多数方法阶数更高。一致性是收敛的必要条件[來源請求]，但不是充分条件；方法要收敛，必须同时具有一致性与零稳性（zero-stable）。

一个相关概念是**全局（截断）误差**，即达到固定时间*t*所需所有步骤中持续存在的误差。明确地说，*t*时刻的全局误差是{\displaystyle y\_{N}-y(t)}，其中{\displaystyle N=(t-t\_{0})/h}。第*p*阶一步法是收敛的，其全局误差是{\displaystyle O(h^{p})}。对多阶方法，这一说法不一定成立。

### 稳定性与刚性

更多：刚性方程
对某些微分方程，欧拉法、显式龙格-库塔法、多步法（如亚当斯-巴什福思法）之类标准方法会表现出解的不稳定性，其他方法则可能产生稳定的解。方程中的这种"困难行为"（本身不一定复杂）称作"刚性"（stiffness），通常是由于底问题中存在不同时间尺度造成的。例如，机械系统中的碰撞（如碰撞振子中的）发生的时间尺度通常比物体运动的时间尺度小得多，这种差异使状态参数曲线变得非常陡峭。

刚性问题在化学动力学、控制论、固体力学、天气预报、生物学、等离子体物理、电子学等领域中无处不在。克服刚性的一种方法是将微分方程推广到微分包含式，从而允许非光滑性并建立其模型。

历史
--

下面是该领域一些重要进展的时间线。

* 1768 - 莱昂哈德·欧拉发现欧拉法。
* 1824 - 奥古斯丁-路易·柯西证明了欧拉法的收敛性。此证明中，柯西使用了隐性欧拉法。
* 1855 - Francis Bashforth在一封信中首次提到约翰·柯西·亚当斯的多步法。
* 1895 - 卡尔·龙格发现第一个龙格-库塔法。
* 1901 - 马丁·威廉·库塔描述了现在流行的4阶龙格-库塔法。
* 1910 - 路易斯·弗莱·理查德森公布了他的外推法——理查德森外推法。
* 1952 - Charles F. Curtiss与Joseph Oakland Hirschfelder提出刚性方程概念。
* 1963 - Germund Dahlquist引入积分法的A稳定性。

二阶一维边值问题的数值解法
-------------

边值问题（BVPs）通常要离散化，得到近似相等的矩阵问题再数值求解。最常用的一维BVP数值求解方法称作有限差分法。这种方法用点值的线性组合构造描述函数导数的有限差分系数，例如一阶导数的二阶中心差分近似为：

{\displaystyle {\frac {u\_{i+1}-u\_{i-1}}{2h}}=u'(x\_{i})+{\mathcal {O}}(h^{2}),}
二阶导数的二阶中心差分近似为：

{\displaystyle {\frac {u\_{i+1}-2u\_{i}+u\_{i-1}}{h^{2}}}=u''(x\_{i})+{\mathcal {O}}(h^{2}).}
两式中，{\displaystyle h=x\_{i}-x\_{i-1}}是离散域上相邻*x*值间的距离。这样就构建了线性系统，然后可用标准矩阵法求解。例如，待解方程：

{\displaystyle {\begin{aligned}&{}{\frac {d^{2}u}{dx^{2}}}-u=0,\\&{}u(0)=0,\\&{}u(1)=1.\end{aligned}}}
下一步是将问题离散化，用线性导数近似，如

{\displaystyle u''\_{i}={\frac {u\_{i+1}-2u\_{i}+u\_{i-1}}{h^{2}}}}
并解所得线性方程组。将有如下方程

{\displaystyle {\frac {u\_{i+1}-2u\_{i}+u\_{i-1}}{h^{2}}}-u\_{i}=0,\quad \forall i={1,2,3,...n-1}.}
初看之下，这个方程组似乎有困难，因为方程中没有不与变量相乘的项，但事实上这是错误的。*i* = 1或*n* − 1时，有一项涉及边值{\displaystyle u(0)=u\_{0}}、{\displaystyle u(1)=u\_{n}}，由于两值已知，可以简单地代入，就得到了具有非平凡解的非齐次线性方程组。

另见
--

* CFL条件
* 能量漂移
* 一般线性方法
* Modelica语言及OpenModelica软件

参考文献
----

* Bradie, Brian.. Upper Saddle River, New Jersey: Pearson Prentice Hall. 2006. ISBN 978-0-13-013054-9.
* J. C. Butcher, *Numerical methods for ordinary differential equations*, ISBN 0-471-96758-0
* Ernst Hairer, Syvert Paul Nørsett and Gerhard Wanner, *Solving ordinary differential equations I: Nonstiff problems,* second edition, Springer Verlag, Berlin, 1993. ISBN 3-540-56670-8.
* Ernst Hairer and Gerhard Wanner, *Solving ordinary differential equations II: Stiff and differential-algebraic problems,* second edition, Springer Verlag, Berlin, 1996. ISBN 3-540-60452-9.   
 *(This two-volume monograph systematically covers all aspects of the field.)*
* Hochbruck, Marlis; Ostermann, Alexander.. Acta Numerica. May 2010, **19**: 209–286. Bibcode:2010AcNum..19..209H. CiteSeerX 10.1.1.187.6794 可免费查阅. S2CID 4841957. doi:10.1017/S0962492910000048.
* Arieh Iserles, *A First Course in the Numerical Analysis of Differential Equations,* Cambridge University Press, 1996. ISBN 0-521-55376-8 (hardback), ISBN 0-521-55655-4 (paperback).   
 *(Textbook, targeting advanced undergraduate and postgraduate students in mathematics, which also discusses numerical partial differential equations.)*
* John Denholm Lambert, *Numerical Methods for Ordinary Differential Systems,* John Wiley & Sons, Chichester, 1991. ISBN 0-471-92990-5.   
 *(Textbook, slightly more demanding than the book by Iserles.)*

外部链接
----

* Joseph W. Rudmin, *Application of the Parker–Sochacki Method to Celestial Mechanics*, 1998.
* Dominique Tournès, *L'intégration approchée des équations différentielles ordinaires (1671-1914)*, thèse de doctorat de l'université Paris 7 - Denis Diderot, juin 1996. Réimp. Villeneuve d'Ascq : Presses universitaires du Septentrion, 1997, 468 p. (Extensive online material on ODE numerical analysis history, for English-language material on the history of ODE numerical analysis, see, for example, the paper books by Chabert and Goldstine quoted by him.)
* Pchelintsev, A.N.. Journal of Applied Nonlinear Dynamics. 2020, **9** (2): 207–221. S2CID 225853788. arXiv:2011.10664 可免费查阅. doi:10.5890/JAND.2020.06.004.
* GitHub上的kv頁面 (C++ library with rigorous ODE solvers)
* INTLAB (A library made by MATLAB/GNU Octave which includes rigorous ODE solvers)

|  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
数值积分 |
| --- |
|  |
| 一阶方法 | 
* 欧拉法
* 反向欧拉法
* 半隐式欧拉法
* 指数欧拉法

 |
|  |
| 二阶方法 | 
* Verlet 积分
* Velocity Verlet
* 牛顿科特斯公式
* 比曼算法
* 中点公式
* Heun方法
* 纽马克贝塔法
* 蛙跳积分法

 |
|  |
| 高阶方法 | 
* 龙格-库塔法
* 龙格-库塔法列表
* 线性多步法

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
应用数学 |
| --- |
|  |
| 运算数学 | 
* 算法
	+ 算法设计
	+ 算法分析
* 自動機理論
* 自动化定理证明
* 编码理论
* 计算几何
* 约束满足
	+ 约束编程
* 计算机逻辑
* 密码学
* 信息论
* 计算统计学

 |
|  |
| 离散数学 | 
* 计算机代数
* 计算数论
* 组合数学
* 图论
* 离散几何学

 |
|  |
| 数学分析 | 
* 逼近理论
* 克利福德分析（英语：）
	+ 克利福德代数
* 微分方程
	+ 常微分方程
	+ 偏微分方程
	+ 随机微分方程
* 微分几何
	+ 微分形式
	+ 规范理论 (数学)（英语：）

* + 几何分析（英语：）
* 动力系统
	+ 混沌理论
	+ 控制理论
* 泛函分析
	+ 算子代数
	+ 算子理论
* 调和分析
	+ 傅里叶分析
* 多重线性代数
	+ 外代数
	+ 几何代数
	+ 张量
	+ 向量代数

* 多元微积分
	+ 外微积分
	+ 几何微积分（英语：）
	+ 张量微积分（英语：）
	+ 向量微积分
* 数值分析
	+ 数值线性代数
	+ 常微分方程数值方法
	+ 偏微分方程数值方法
* 变分法

 |
|  |
| 概率论 | 
* 概率分布（随机变量）
* 随机过程 / 随机分析
* 泛函积分
* 马利阿温微积分（英语：）

 |
|  |
| 数学物理 | 
* 分析力学
	+ 拉格朗日力学
	+ 哈密顿力学
* 场论
	+ 经典场论
	+ 共形场论
	+ 有效场论
	+ 规范场论
	+ 量子场论
	+ 统计场论
	+ 拓扑量子场论
* 摄动理论
	+ 微扰理论 (量子力学)
* 位势论
* 弦理论
	+ 玻色弦理论
	+ 拓扑弦论
* 超对称
	+ 超对称量子力学（英语：）
	+ 随机力学超对称理论（英语：）

|  |  |
| --- | --- |
| 代数结构 | 
* 物理空间代数
* 路径积分表述
* 泊松代数
* 量子群
* 重整化群
* 粒子物理与表示论（英语：）
* 时空代数
* 超代数（英语：）
* 超对称代数（英语：）

 |

 |
|  |
| 决策论 | 
* 博弈论
* 运筹学
* 最优化
* 社会选择理论
* 统计学
* 数理经济学
* 数理金融学

 |
|  |
| 其他应用 | 
* 数理生物学
* 数学化学（英语：）
* 数学心理学
* 数理社会学

 |
|  |
| 相关领域 | 
* 数学
* 数学软件

 |
|  |
| 社会组织 | 
* 工业与应用数学学会（英语：）
	+ 日本应用数理学会（英语：）
* 法国应用与工业数学学会（英语：）
* 国际工业与应用数学理事会（英语：）

 |
|  |
| 
* **分类**
* 话题

 |

 |