ARTICLE

牛顿-拉弗森方法

牛顿-拉弗森方法 (Newton-Raphson Method) 牛顿-拉弗森方法(又称牛顿法、切线法)是数值分析中最经典的求根算法之一,用于寻找连续可微函数 f: R R 满足 f(x) = 0 的近似解。该方法由艾萨克·牛顿于 1669 年在手稿《论分析》中率先提出,后由约瑟夫·拉弗森在 1690 年出版的《通用方程分析》中给出更简洁的迭代公式,近两个世

浏览 9 更新 2025-11-08

牛顿-拉弗森方法 (Newton-Raphson Method)

牛顿-拉弗森方法(又称牛顿法、切线法)是数值分析中最经典的求根算法之一,用于寻找连续可微函数 f:RRf: \mathbb{R} \to \mathbb{R} 满足 f(x)=0f(x) = 0 的近似解。该方法由艾萨克·牛顿于 1669 年在手稿《论分析》中率先提出,后由约瑟夫·拉弗森在 1690 年出版的《通用方程分析》中给出更简洁的迭代公式,近两个世纪后又经约瑟夫·傅里叶进一步完善,但直到二十世纪计算机普及后才真正成为工程与科学计算的标配工具。其核心思想是利用一阶泰勒展开对目标函数作局部线性近似,将非线性求根问题转化为一系列线性方程的求解。在现代经济学和计量经济学中,牛顿-拉弗森方法是极大似然估计、广义矩估计和动态随机一般均衡模型求解等数值计算的底层支柱。

算法原理与迭代公式

假设 ff 连续可微,给定初始猜测值 x0x_0,牛顿-拉弗森方法通过以下公式反复迭代:

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

推导思路:将 f(x)f(x)xnx_n 处作一阶泰勒展开:

f(x)f(xn)+f(xn)(xxn)f(x) \approx f(x_n) + f'(x_n)(x - x_n)

设上式为零,解出 xx 即为 xn+1x_{n+1}。从几何角度看,该步骤等价于在当前点 (xn,f(xn))(x_n, f(x_n)) 处作函数曲线的切线,切线方程 yf(xn)=f(xn)(xxn)y - f(x_n) = f'(x_n)(x - x_n)xx 轴的交点即为 xn+1x_{n+1},故该方法也被称为切线法。每次迭代都沿着切线的方向寻找根的修正值,直到满足收敛条件。实践中常用的收敛判据包括:相邻两次迭代的差值绝对值 xn+1xn|x_{n+1} - x_n| 小于预设容忍度 ε\varepsilon,或函数值的绝对值 f(xn+1)|f(x_{n+1})| 小于容忍度 δ\delta

收敛性分析

牛顿-拉弗森方法在理想条件下展现出极为优异的收敛速度。若 ff 在单根 xx^* 附近二阶连续可微,且 f(x)0f'(x^*) \neq 0,则当初始点充分接近 xx^* 时,迭代满足局部二次收敛性

xn+1xCxnx2|x_{n+1} - x^*| \leq C|x_n - x^*|^2

其中 C=12maxf/fC = \frac12 \max |f''/f'| 为常数。这意味着一旦进入收敛区域,每次迭代使有效数字近似翻倍——从 1 位准确到 2 位、4 位、8 位……收敛速度远快于二分法或割线法。然而,该方法也存在明显的局限性:(1) 当 f(xn)0f'(x_n) \approx 0 时,分母趋近于零导致迭代步长过大,可能使结果发散;(2) 初始点远离根时,可能陷入循环、振荡甚至收敛到错误的根;(3) 对多重根(即 f(x)=0f'(x^*) = 0),收敛速度降为线性;(4) 需要显式计算导数 ff',在导数难以解析表达时受限。实际应用中常结合线搜索(Line Search)或信赖域策略以增强全局收敛性。

多元推广与优化应用

对于多元非线性方程组 F(x)=0\mathbf{F}(\mathbf{x}) = \mathbf{0},其中 F:RnRn\mathbf{F}: \mathbb{R}^n \to \mathbb{R}^n 是向量值函数,牛顿-拉弗森方法自然推广为:

xn+1=xn[JF(xn)]1F(xn)\mathbf{x}_{n+1} = \mathbf{x}_n - [\mathbf{J}_F(\mathbf{x}_n)]^{-1} \mathbf{F}(\mathbf{x}_n)

其中 JF\mathbf{J}_FF\mathbf{F}雅可比矩阵。实际计算中并不显式计算逆矩阵,而是求解线性方程组 JF(xn)Δ=F(xn)\mathbf{J}_F(\mathbf{x}_n) \boldsymbol{\Delta} = -\mathbf{F}(\mathbf{x}_n) 得到增量 Δ\boldsymbol{\Delta},再更新 xn+1=xn+Δ\mathbf{x}_{n+1} = \mathbf{x}_n + \boldsymbol{\Delta}

无约束优化问题中,寻找可微函数 g:RnRg: \mathbb{R}^n \to \mathbb{R} 的极值等价于求解一阶条件 g(x)=0\nabla g(\mathbf{x}) = \mathbf{0}。此时牛顿迭代公式变为:

xn+1=xn[Hg(xn)]1g(xn)\mathbf{x}_{n+1} = \mathbf{x}_n - [\mathbf{H}_g(\mathbf{x}_n)]^{-1} \nabla g(\mathbf{x}_n)

其中 Hg\mathbf{H}_g海森矩阵。该公式相当于在当前点用二阶泰勒展开逼近目标函数:

g(x)g(xn)+g(xn)(xxn)+12(xxn)Hg(xn)(xxn)g(\mathbf{x}) \approx g(\mathbf{x}_n) + \nabla g(\mathbf{x}_n)^\top (\mathbf{x} - \mathbf{x}_n) + \frac12 (\mathbf{x} - \mathbf{x}_n)^\top \mathbf{H}_g(\mathbf{x}_n)(\mathbf{x} - \mathbf{x}_n)

求该二次模型的最小值即得上述迭代公式。当海森矩阵正定时,牛顿步始终是下降方向。当海森矩阵非正定(如鞍点附近),实际中常添加正则化项或切换为拟牛顿法加以处理。

在计量经济学中的核心地位

极大似然估计 (MLE) 的数值实现中,牛顿-拉弗森方法是默认算法之一。设对数似然函数为 (θ)\ell(\boldsymbol{\theta}),MLE 需求解得分方程 (θ)=0\nabla \ell(\boldsymbol{\theta}) = \mathbf{0}。牛顿迭代公式为:

θn+1=θn[H(θn)]1(θn)\boldsymbol{\theta}_{n+1} = \boldsymbol{\theta}_n - [\mathbf{H}_\ell(\boldsymbol{\theta}_n)]^{-1} \nabla \ell(\boldsymbol{\theta}_n)

由于海森矩阵的计算量和可能的不正定性,常用拟牛顿法(如 BFGS 算法)通过梯度差信息逐步近似海森矩阵或海森矩阵的逆。此外,费雪得分法 (Fisher Scoring) 用费雪信息矩阵 I(θ)\mathcal{I}(\boldsymbol{\theta}) 的期望替代海森矩阵,在指数族分布中尤为有效。牛顿类方法在广义线性模型 (GLM)、有序响应模型和持续时间模型中均有广泛应用。

广义矩估计 (GMM) 中,牛顿-拉弗森方法用于求解非线性的矩条件 g(θ)=0\mathbf{g}(\boldsymbol{\theta}) = \mathbf{0}。在DSGE 模型的扰动法求解中,稳态方程组的求解也依赖牛顿迭代。在结构估计(如 Rust 模型、BLP 模型)中,嵌套固定点算法 (NFP) 的内层本质上也是牛顿型迭代。

与其他求根方法的比较

牛顿-拉弗森方法并非万能,不同场景下有不同选择。二分法 (Bisection Method) 仅需函数值符号信息,只要初始区间 f(a)f(b)<0f(a)f(b) < 0 即保证收敛,但线性收敛速度远慢于牛顿法。割线法 (Secant Method) 用两点差商近似导数从而避开了显式计算 ff',收敛阶约为 φ1.618\varphi \approx 1.618(超线性),在导数计算成本高昂时更具优势。Steffensen 加速法是牛顿法的无导数变体。在优化领域中,梯度下降法仅使用一阶信息且对步长设置敏感,通常收敛速度远低于牛顿法。对大规模高维问题,完全牛顿法因计算海森矩阵的 O(n2)O(n^2) 空间消耗和 O(n3)O(n^3) 求逆成本而不可行,此时拟牛顿法(BFGS、L-BFGS)、共轭梯度法随机梯度下降更为常用。

总而言之,牛顿-拉弗森方法从三百多年前的数学手稿发展成为当今科学计算和数据分析的基础算法,其简洁而深刻的"线性化"思想贯穿了整个数值优化的学科体系。理解牛顿法不仅是掌握一个求根工具,更是理解多数现代计量软件底层运作逻辑的关键一步。

在实际科研与工程实践中,绝大多数涉及非线性方程求解或函数极值计算的场景,底层都会调用牛顿法或其变体。例如 Stata 的 \texttt{ml} 命令、R 语言的 \texttt{nlm()} 函数、MATLAB 的 \texttt{fsolve} 以及 Python 中 SciPy 库的 \texttt{optimize.root} 均以牛顿法为核心算法。熟练掌握牛顿-拉弗森方法的收敛条件与改进策略,有助于研究人员更有效地诊断数值收敛失败、调整初始参数并节约计算资源,是从事定量分析不可或缺的基础技能。