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