数值方法是用来求近似解的算法。牛顿-拉夫森法用于寻找方程的根,例如 f(x)=0f(x)=0;而欧拉法和龙格-库塔法用于近似求解微分方程。

如果你只想快速区分它们,可以这样记:牛顿-拉夫森法是在不断更新对 xx 的猜测;欧拉法和龙格-库塔法是在时间上把解一步一步向前推进。它们是否好用,取决于一些条件,比如初始猜测是否合理、导数是否可用,或者步长 hh 对这个问题来说是否足够小。

每种数值方法分别用来做什么

牛顿-拉夫森法:求方程的根

如果你想找到一个满足 f(x)=0f(x)=0xx 值,牛顿-拉夫森法会沿着切线来更新猜测:

xn+1=xnf(xn)f(xn)x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}

直观理解很简单:如果根附近的图像足够光滑,那么切线可以看作局部线性模型,它与 xx 轴的交点往往比当前点给出更好的猜测。

ff 可导、f(xn)0f'(x_n) \ne 0,并且初始猜测已经比较接近一个单根时,这个方法通常效果很好。如果这些条件不满足,方法可能停滞、跳离目标根,甚至发散。

例如,取 f(x)=x22f(x)=x^2-2,且 x0=1.5x_0=1.5

x1=1.51.5222(1.5)=1.4167x_1 = 1.5 - \frac{1.5^2 - 2}{2(1.5)} = 1.4167

再做一步就得到大约 1.41421.4142,已经很接近 2\sqrt{2}

欧拉法:一次斜率,一个步长

对于初值问题

y=f(t,y),y(t0)=y0,y' = f(t,y), \qquad y(t_0)=y_0,

欧拉法使用当前斜率向前推进一步:

yn+1=yn+hf(tn,yn)y_{n+1} = y_n + h f(t_n, y_n)

这是最简单的近似方式:利用当前已知的斜率,按步长 hh 向前走。正因为如此,欧拉法容易学习、也容易实现;但如果 hh 太大,或者解变化很快,误差也可能迅速增大。

龙格-库塔法:一步内多次检查斜率

龙格-库塔法通过在同一步内部多次采样斜率信息,来改进欧拉法。在入门课程里,“龙格-库塔法”通常指经典四阶方法 RK4:

k1=f(tn,yn),k2=f(tn+h2,yn+h2k1),k_1 = f(t_n, y_n), \qquad k_2 = f\left(t_n + \frac{h}{2}, y_n + \frac{h}{2}k_1\right), k3=f(tn+h2,yn+h2k2),k4=f(tn+h,yn+hk3)k_3 = f\left(t_n + \frac{h}{2}, y_n + \frac{h}{2}k_2\right), \qquad k_4 = f(t_n + h, y_n + hk_3) yn+1=yn+h6(k1+2k2+2k3+k4)y_{n+1} = y_n + \frac{h}{6}(k_1 + 2k_2 + 2k_3 + k_4)

RK4 对多个斜率估计做加权平均,因此在相同步长下,它通常比欧拉法更能贴近真实曲线。

例题:在同一个常微分方程上比较欧拉法与龙格-库塔法

考虑

y=y,y(0)=1y' = y, \qquad y(0)=1

并用一步、步长为 h=0.1h=0.1 来估计 y(0.1)y(0.1)

欧拉法一步

t=0t=0 时,当前值为 y0=1y_0=1,所以斜率是

f(0,1)=1f(0,1)=1

欧拉法得到

y1=1+0.1(1)=1.1y_1 = 1 + 0.1(1) = 1.1

RK4 一步

现在对同一个问题使用 RK4:

k1=1k_1 = 1 k2=1+0.12(1)=1.05k_2 = 1 + \frac{0.1}{2}(1) = 1.05 k3=1+0.12(1.05)=1.0525k_3 = 1 + \frac{0.1}{2}(1.05) = 1.0525 k4=1+0.1(1.0525)=1.10525k_4 = 1 + 0.1(1.0525) = 1.10525

所以

y1=1+0.16(1+2(1.05)+2(1.0525)+1.10525)y_1 = 1 + \frac{0.1}{6}(1 + 2(1.05) + 2(1.0525) + 1.10525) y11.105170833y_1 \approx 1.105170833

对于这个方程,精确值是 e0.11.105170918e^{0.1} \approx 1.105170918,因此 RK4 这一步比欧拉法更接近真实值。

这就是最核心的结论。欧拉法只使用左端点处的斜率,而 RK4 会采样一步过程中斜率如何变化,因此通常能给出更好的局部近似。

什么时候用牛顿-拉夫森法、欧拉法或龙格-库塔法

当任务是求解非线性方程,并且你能够计算或近似导数时,用牛顿-拉夫森法。若你只是想理解常微分方程逐步推进的基本思想,或者需要一个快速的基线方法,可以用欧拉法。

如果你想在不改变问题设定的前提下,实际提升精度,那么可以用龙格-库塔法,尤其是 RK4。不过,如果常微分方程是刚性的,那么欧拉法和经典 RK4 都不一定合适;方法必须与方程本身匹配。

数值方法中的常见错误

混淆问题类型

牛顿-拉夫森法用于求方程的根。欧拉法和龙格-库塔法用于微分方程。如果方法类别选错了,那么还没开始计算,建模就已经错了。

以为方法一定会收敛

如果初始猜测不好,或者在迭代点附近 f(x)f'(x) 很小,牛顿-拉夫森法就可能失效。对于欧拉法和 RK 方法,如果步长相对问题来说太大,也可能出现很差的表现。

把步长当成无关紧要的细节

对于常微分方程数值方法,步长 hh 是方法的一部分,不是事后才考虑的小问题。更小的 hh 往往能提高精度,但也会增加计算成本;而对某些困难问题,你需要的可能不是更小的步长,而是专门处理刚性问题的方法。

忘记答案本来就是近似值

一个数值结果写出很多位数字,并不代表它就更可信。真正有意义的问题是:这个近似是否稳定、是否在收敛,以及它的精度是否足以满足你的用途。

数值方法用在哪里

只要模型本身是清楚的,但精确的符号解不方便求、或者根本求不到,数值方法就会出现。这包括物理、工程、优化、金融和科学计算等领域。

这里的共同模式更偏向实际应用,而不是纯理论:你需要的是一个对决策来说“足够准确”的答案。也正因如此,检查收敛性、步长影响,或对初始猜测的敏感性,和写下公式本身同样重要。

试试类似的问题

把同一个常微分方程例子中的步长从 0.10.1 改成 0.050.05,再比较一次欧拉法和 RK4 的结果。然后对 f(x)=x23f(x)=x^2-3x0=2x_0=2 开始使用牛顿-拉夫森法,看看迭代值会多快逼近 3\sqrt{3}

需要解题帮助?

上传你的问题,几秒钟内获得经过验证的分步解答。

打开 GPAI Solver →