Courses
有些方程并没有整洁的代数解。
即使您尽情因式分解或代入,仍有些方程没有闭式解。比如,五次及以上多项式没有通用的代数解。将指数函数与多项式混合的函数,如 e^x = 3x,也属于同类。在这些情形下,您需要换一种方法。
牛顿法正是这种方法。它通过数值方式找根:基于当前估计点处函数切线的指引,不断做出更聪明的猜测。
在本文中,我将带您了解牛顿法背后的公式、逐步的工作流程、何时收敛以及何时不收敛——并辅以具体示例帮助巩固理论。
想了解数据科学家必备的更多数学主题?请阅读我们的博文 等比数列:公式、收敛性与示例,看看它如何应用于金融、物理与计算机科学。
什么是牛顿法?
牛顿法是一种迭代技术,用于寻找函数的根。根是使函数值等于零的自变量取值。
该过程从一个初始猜测开始。方法随后利用该点处函数的几何特性来给出更好的猜测。重复这一过程,每次迭代都会使您更接近真实的根。
核心理念就这么简单:只需要一个聪明、可重复的更新规则,并能收敛到答案。
牛顿法的公式
牛顿法的核心是一个单一的更新规则,反复应用,直到足够接近根。
公式如下:

牛顿法公式
每次迭代以当前估计 x_n 为基础,产生一个更好的估计 x_{n+1}。不断更新,直到结果足够接近零。
该公式包含三个组成部分:
-
x_n—— 您当前对根的估计 -
f(x_n)—— 函数在该估计处的取值 -
f'(x_n)—— 函数在该估计处的导数,表示切线的斜率
若 f(x_n) 很大,说明离根还远。若 f'(x_n) 很陡,函数变化快,因此可以迈更大一步。比值 f(x_n) / f'(x_n) 精确告诉您应移动多远——从当前猜测中减去它,就能更接近根。
如果 f'(x_n) 为零或接近零,公式将无法正常工作。您会遇到零作分母,意味着方法无法生成下一次估计。关于这一点我会在“局限性”一节中详细说明。
牛顿法如何工作
牛顿法在每次迭代都遵循相同的四个步骤。
-
选择初始猜测:选取一个起始值
x_0,使其位于根的附近。无需十分精确——只要足够接近,让函数在该点附近呈现可预期的行为即可。“足够接近”的含义将在收敛性一节中讨论。 -
计算函数值:计算
f(x_0)。这告诉您在当前估计处函数距零有多远。如果f(x_0) = 0,那就完成了——您已找到根。 -
计算导数:计算
f'(x_0)。这给出函数在x_0处的斜率,即该点处切线的斜率。 -
更新估计:按照上一节的公式应用更新规则。
就这样!
新的取值 x_1 是该切线与 x 轴的交点。从几何上看,您在 x_0 处作一条与曲线相切的直线,并沿其延伸到与 x 轴相交。该交点就是您下一个、更好的猜测。
然后重复此过程。将 x_1 代回步骤 2 至 4 得到 x_2,再得到 x_3,以此类推。每次迭代都在更新后的点处作新的切线,并寻找它与 x 轴的交点。
当 f(x_n) 足够接近零时过程停止——通常当其低于您预先设定的一个小阈值时。
牛顿法的几何解释
想象坐标系中的一条曲线——这就是您的函数 f(x)。根是曲线与 x 轴相交之处。您尚不知道确切的交点,于是从 x 轴上的某个猜测 x_0 开始。
每一步,您在曲线上标出点 (x_0, f(x_0)),再在该点作切线——一条在此处与曲线相切并沿其斜率延伸的直线。该切线不是水平的。它是倾斜的,沿其向下延伸,会在某处与 x 轴相交。该交点就是您的下一次估计 x_1。
然后重复。在 x_1 处作新切线,并找到其与 x 轴的交点。得到 x_2。每条切线都是曲线的局部线性近似,而每个交点都会更接近真实的根。
下图展示了将牛顿法应用于 f(x) = x^2 - 2、从 x_0 = 2.5 出发进行两次迭代的情形:

几何解释示意图
其可行之处在于:切线是在给定点处对曲线的最佳直线近似。越接近根,切线越像曲线本身——下一步也就越准确。
在实践中,估计值并非缓慢爬近根点,而是迅速跃近,往往每次迭代都能将正确小数位数加倍。
牛顿法的逐步示例
将牛顿法应用于 f(x) = x^2 - 2。该函数的根为 x = sqrt(2) ≈ 1.4142——也就是说,我们在计算 2 的平方根。
其导数为 f'(x) = 2x,因此更新规则变为:

示例(更新规则)
让我们从初始猜测 x_0 = 2.5 开始。
第 1 次迭代:

示例(第 1 次迭代)
第 2 次迭代:

示例(第 2 次迭代)
第 3 次迭代:

示例(第 3 次迭代)
仅三次迭代后,我们已精确到四位小数。误差从 1.086(在 x_0 处)降至 0.0001(在 x_3 处)——并且每一步仍在继续减小。
如下图所示,这些估计与误差的变化更直观:

估计与误差的可视化概览
左图展示了每次估计如何逐步逼近 sqrt(2) ≈ 1.4142;右图在对数刻度上显示误差如何缩小——每次迭代大致将上一轮的精度平方。
牛顿法的收敛性
牛顿法可以非常快速地收敛,但前提是满足一定条件。
当初始猜测接近根且函数在该区域内足够光滑时,方法呈现二次收敛。技术上,这就是您在示例中看到的:每次迭代大致将上一轮的误差平方。两位小数变四位,四位变八位,依此类推。
要实现这一点,需要满足两个条件:
- 良好的初始猜测:
x_0越接近实际的根,收敛越快。若起点太远,该点处的切线可能会把您引向错误方向。 - 良好性质的函数:函数在根附近需要光滑且可导。剧烈转折或平坦区域会干扰切线近似。
最常见的失效模式是导数接近零。
如果 f'(x_n) 接近零,更新规则中会以一个非常小的数作分母,导致下一次估计远离根。最糟的情况是 f'(x_n) = 0,计算将因无法除以零而停止。
糟糕的起点也可能导致方法振荡或发散。估计值不仅不收敛到根,反而在每次迭代中来回跳动或越走越远。
牛顿法回报良好的设置。只要起点合理、函数平滑,它就能收敛,而且收敛很快。
牛顿法的优势
在条件合适时,牛顿法几乎难以超越。
最大优势是二次收敛。多数数值方法以线性速度逼近根,也就是每次迭代将误差按固定幅度减少。牛顿法则是将误差平方,因此只需很少迭代就能快速达到高精度。
它也具有通用性。您可以将其应用于各种函数——多项式、三角函数、指数函数——而无需做出改变。这也是它能遍布众多领域的原因,从工程仿真到机器学习模型训练皆是如此。
牛顿法的局限性
牛顿法为速度付出的代价也不小。请牢记以下几项局限:
-
需要导数:在运行任何一次迭代之前,您需要
f'(x)的解析表达式。对于导数难以计算(或不存在)的函数,需要另寻他法。 -
对初始猜测敏感:如果起点离根太远,方法可能会把您带向错误方向。
-
可能不收敛:如果函数存在平坦区域或尖锐转折,切线近似可能并不奏效。
-
可能发散或振荡:在不利情况下,估计值无法收敛,反而远离根或无限来回跳动。
因此,在使用牛顿法之前,请务必了解您的函数特性。
牛顿法与其他求根方法的比较
牛顿法并非寻找根的唯一方法,也不总是最适合您的那一个。
常见的替代方法有二分法和割线法。下面简要介绍。
二分法
二分法是三者中最简单的。您从区间 [a, b] 开始,其中函数发生了符号变化——意味着区间内必有一根。然后反复将区间对半分,只保留仍然包含符号变化的一半。
它能工作,但较慢。每次迭代将误差减半,属于线性收敛。不过只要函数连续且初始区间确实括住了一根,它就能保证奏效。不需要导数。
割线法
割线法与牛顿法关系密切。它不解析计算导数,而是用前两次估计来近似导数:

割线法公式
当导数难以计算时,这是一个不错的选择。代价是收敛速度——割线法比二分法快,但比牛顿法慢。
牛顿法的应用
牛顿法广泛应用于科学、工程与机器学习。下面说明具体如何应用。
数值求解方程
这是最直接的应用。当函数没有闭式解时,牛顿法用来找根。在科学计算中这类问题层出不穷——例如寻找化学反应的平衡点,或在信号处理里求解超越方程。
优化
寻找函数 f(x) 的极小值或极大值,意味着寻找其导数 f'(x) = 0 的位置。这是一个求根问题——因此可以应用牛顿法。只是把算法运行在 f'(x) 上,用二阶导 f''(x) 替代一阶导。
这一变体称为优化中的牛顿法,在光滑、性质良好的函数上,其收敛速度快于梯度下降。
机器学习
在机器学习中,训练模型意味着最小化损失函数。牛顿法及其变体在这里有多种用法。
L-BFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno,有限内存 BFGS)是一种拟牛顿优化器,通过近似二阶导来避免直接计算。它是逻辑回归等凸问题的常用选择。牛顿法也是统计模型拟合(如广义线性模型)中 Newton-Raphson 更新的基础。
物理与工程
牛顿法在仿真与设计领域随处可见。工程师用它来求解描述物理系统的非线性方程组——如结构应力分析与流体力学。在这些案例中,底层问题都可归约为寻找一组方程等于零的位置。
牛顿法中的常见错误
牛顿法的大多数错误归结为四类。如下:
-
起点离根太远:不佳的初始猜测是方法发散或振荡的最常见原因。如果您对根的位置没有直观把握,先画出函数图像。这能指引您从哪里开始。
-
导数求错:更新规则依赖
f'(x)。无论是计算失误还是编码错误,导数一旦不正确,从第一轮迭代开始估计就会出错,而且误差会随迭代累积。 -
未检查除零:如果
f'(x_n)等于零或非常接近零,更新步骤将无法执行。在实现中加入保护:若导数低于某个小阈值,停止并报告失败,而不是给出毫无意义的结果。 -
过早停止:在估计尚未收敛前就截断迭代,会得到一个看似接近却并不准确的答案。将停止条件设在实际误差上——例如
|f(x_n)|或|x_{n+1} - x_n|低于您刻意选择的阈值,而非固定的迭代次数。
总结
牛顿法是数值计算中最有用的工具之一。一个更新规则,反复应用,就能在短短几次迭代中将根求到任意精度。
但要为速度付出代价。要想快速收敛,您需要良好的初始猜测、非平坦且不过分尖锐的函数,以及非零导数。理解这些条件,您就知道何时应使用牛顿法,何时应改用其他方法(如二分法或割线法)。
建立直觉的最佳方式是从简单示例练习起。先用 f(x) = x^2 - 2,尝试不同起点,观察结果。再转向具有多个根或平坦区域的函数,看看方法在哪些地方会失效。
如果您喜欢通过迭代进行优化的思路,就一定要了解梯度下降。阅读我们的 机器学习中的梯度下降:深度剖析,了解它如何为机器学习优化模型。
FAQs
牛顿法用于做什么?
牛顿法是一种用于寻找函数根的数值技术——即满足 f(x) = 0 的 x 取值。每当方程没有整洁的代数解时,它就会在科学、工程与机器学习领域登场。常见应用包括求解非线性方程、拟合统计模型,以及为诸如 L-BFGS 的优化算法提供支撑。
牛顿法需要多少次迭代才能收敛?
取决于函数与初始猜测,但在条件合适时,牛顿法通常只需很少的迭代即可收敛。由于二次收敛,每一步大致能将正确小数位数加倍。在实践中,常常只需几次迭代就能达到机器精度。
如果牛顿法不收敛会怎样?
如果初始猜测离根太远,或函数在起点附近存在平坦区域,方法可能会发散或振荡而非收敛。导数接近零是常见诱因——它会让下一次估计严重偏离。在这些情况下,改用更稳定的方法(如二分法),或改进初始猜测,通常可以解决问题。
牛顿法与割线法有何区别?
两者使用的核心更新思想相同,但牛顿法需要解析导数 f'(x),而割线法用前两次估计来近似导数。当导数难以计算时,割线法表现良好,但其收敛速度略慢于牛顿法。
牛顿法中的二次收敛是什么意思?
二次收敛的意思是,每次迭代的误差大致与前一次误差的平方成正比。通俗地讲,如果您已有两位小数的正确性,下一次迭代会给出四位,再下一次是八位,以此类推。这正是牛顿法相较于二分法等方法(每次只将误差减半)更快的原因。