数值方法是用来求近似解的算法。牛顿-拉夫森法用于寻找方程的根,例如 ;而欧拉法和龙格-库塔法用于近似求解微分方程。
如果你只想快速区分它们,可以这样记:牛顿-拉夫森法是在不断更新对 的猜测;欧拉法和龙格-库塔法是在时间上把解一步一步向前推进。它们是否好用,取决于一些条件,比如初始猜测是否合理、导数是否可用,或者步长 对这个问题来说是否足够小。
每种数值方法分别用来做什么
牛顿-拉夫森法:求方程的根
如果你想找到一个满足 的 值,牛顿-拉夫森法会沿着切线来更新猜测:
直观理解很简单:如果根附近的图像足够光滑,那么切线可以看作局部线性模型,它与 轴的交点往往比当前点给出更好的猜测。
当 可导、,并且初始猜测已经比较接近一个单根时,这个方法通常效果很好。如果这些条件不满足,方法可能停滞、跳离目标根,甚至发散。
例如,取 ,且 ,
再做一步就得到大约 ,已经很接近 。
欧拉法:一次斜率,一个步长
对于初值问题
欧拉法使用当前斜率向前推进一步:
这是最简单的近似方式:利用当前已知的斜率,按步长 向前走。正因为如此,欧拉法容易学习、也容易实现;但如果 太大,或者解变化很快,误差也可能迅速增大。
龙格-库塔法:一步内多次检查斜率
龙格-库塔法通过在同一步内部多次采样斜率信息,来改进欧拉法。在入门课程里,“龙格-库塔法”通常指经典四阶方法 RK4:
RK4 对多个斜率估计做加权平均,因此在相同步长下,它通常比欧拉法更能贴近真实曲线。
例题:在同一个常微分方程上比较欧拉法与龙格-库塔法
考虑
并用一步、步长为 来估计 。
欧拉法一步
在 时,当前值为 ,所以斜率是
欧拉法得到
RK4 一步
现在对同一个问题使用 RK4:
所以
对于这个方程,精确值是 ,因此 RK4 这一步比欧拉法更接近真实值。
这就是最核心的结论。欧拉法只使用左端点处的斜率,而 RK4 会采样一步过程中斜率如何变化,因此通常能给出更好的局部近似。
什么时候用牛顿-拉夫森法、欧拉法或龙格-库塔法
当任务是求解非线性方程,并且你能够计算或近似导数时,用牛顿-拉夫森法。若你只是想理解常微分方程逐步推进的基本思想,或者需要一个快速的基线方法,可以用欧拉法。
如果你想在不改变问题设定的前提下,实际提升精度,那么可以用龙格-库塔法,尤其是 RK4。不过,如果常微分方程是刚性的,那么欧拉法和经典 RK4 都不一定合适;方法必须与方程本身匹配。
数值方法中的常见错误
混淆问题类型
牛顿-拉夫森法用于求方程的根。欧拉法和龙格-库塔法用于微分方程。如果方法类别选错了,那么还没开始计算,建模就已经错了。
以为方法一定会收敛
如果初始猜测不好,或者在迭代点附近 很小,牛顿-拉夫森法就可能失效。对于欧拉法和 RK 方法,如果步长相对问题来说太大,也可能出现很差的表现。
把步长当成无关紧要的细节
对于常微分方程数值方法,步长 是方法的一部分,不是事后才考虑的小问题。更小的 往往能提高精度,但也会增加计算成本;而对某些困难问题,你需要的可能不是更小的步长,而是专门处理刚性问题的方法。
忘记答案本来就是近似值
一个数值结果写出很多位数字,并不代表它就更可信。真正有意义的问题是:这个近似是否稳定、是否在收敛,以及它的精度是否足以满足你的用途。
数值方法用在哪里
只要模型本身是清楚的,但精确的符号解不方便求、或者根本求不到,数值方法就会出现。这包括物理、工程、优化、金融和科学计算等领域。
这里的共同模式更偏向实际应用,而不是纯理论:你需要的是一个对决策来说“足够准确”的答案。也正因如此,检查收敛性、步长影响,或对初始猜测的敏感性,和写下公式本身同样重要。
试试类似的问题
把同一个常微分方程例子中的步长从 改成 ,再比较一次欧拉法和 RK4 的结果。然后对 从 开始使用牛顿-拉夫森法,看看迭代值会多快逼近 。
常见问题
- 用简单的话说,什么是数值方法?
- 数值方法是一步一步逼近答案的算法,适用于精确的符号解很难求、太慢,或根本不存在的情况。
- 牛顿-拉夫森法是用来做什么的?
- 牛顿-拉夫森法用于近似求方程的根,也就是使 $f(x) = 0$ 的 $x$ 值。当函数足够光滑,且初始猜测离目标根比较近时,它通常效果最好。
- 欧拉法和龙格-库塔法有什么区别?
- 欧拉法每一步只取一次斜率样本,因此简单但精度较低。龙格-库塔法会在一步内部取多个斜率样本,所以在相同步长下通常能得到更高精度。