7.4牛顿法(切线法)
牛顿法(切线法)知识点深度讲解与推导证明
各位同学,今天我们用一整节课的时间,把数值分析中核心的非线性方程求根方法——牛顿法,从核心思想、公式推导、收敛性证明,到工程中常用的改进变体,全部讲透。牛顿法的核心灵魂是「以直代曲、线性化近似」,这也是数值分析最核心的思想之一。
一、标准牛顿法:核心思想与迭代公式推导
1.1 问题背景与核心思想
我们的目标是求解非线性方程 \(f(x)=0\) 的根 \(x^*\)。
如果 \(f(x)\) 是线性函数,求根是 trivial(平凡)的;但对于非线性函数,我们无法直接求解析解,因此牛顿法的核心思想是:在当前近似根的邻域内,用函数的一阶泰勒展开(切线)近似原非线性函数,将非线性方程转化为线性方程求解,用线性方程的根作为原方程根的新近似值,迭代直到满足精度。
1.2 迭代公式的严格推导
已知方程 \(f(x)=0\) 的第 \(k\) 步近似根 \(x_k\),且满足 \(f'(x_k) \neq 0\)(导数不为0,保证切线不水平,有唯一解)。
将 \(f(x)\) 在 \(x=x_k\) 处做一阶泰勒展开:
当 \(x\) 在 \(x_k\) 的邻域内时,高阶无穷小项 \(o(x-x_k)\) 可以忽略,得到线性近似:
我们要找 \(f(x)=0\) 的根,因此令近似式等于0,得到关于 \(x\) 的线性方程:
由于 \(f'(x_k) \neq 0\),我们可以解这个线性方程:
- 移项得:\(f'(x_k)(x - x_k) = -f(x_k)\)
- 两边除以 \(f'(x_k)\):\(x - x_k = -\frac{f(x_k)}{f'(x_k)}\)
- 整理得解:\(x = x_k - \frac{f(x_k)}{f'(x_k)}\)
我们将这个线性方程的解,作为原非线性方程根的第 \(k+1\) 步近似值 \(x_{k+1}\),就得到了牛顿法的核心迭代公式:
1.3 几何意义(切线法的由来)
方程 \(f(x)=0\) 的根 \(x^*\),几何上是曲线 \(y=f(x)\) 与 \(x\) 轴交点的横坐标。
对于近似根 \(x_k\),对应曲线上的点 \(P_k(x_k, f(x_k))\),过 \(P_k\) 作曲线的切线,切线的斜率就是 \(f'(x_k)\),因此切线方程为:
这条切线与 \(x\) 轴(\(y=0\))的交点,就是我们刚才推导的 \(x_{k+1}\)。
因此牛顿法的几何本质是:用曲线在当前点的切线与x轴的交点,代替曲线与x轴的交点(真实根),逐步迭代逼近真实根,因此牛顿法也被称为切线法。
二、标准牛顿法的收敛性证明与误差分析
牛顿法本质是一种特殊的不动点迭代,我们用不动点迭代的收敛性定理,来严格证明牛顿法的收敛性。
2.1 迭代函数与不动点验证
不动点迭代的通用形式是 \(x_{k+1}=\varphi(x_k)\),对比牛顿法迭代公式,我们可以写出牛顿法的迭代函数:
首先验证不动点:若 \(x^*\) 是 \(f(x)=0\) 的根(\(f(x^*)=0\)),且 \(f'(x^*) \neq 0\),则:
因此 \(x^*\) 是 \(\varphi(x)\) 的不动点,牛顿法是不动点迭代的特例。
2.2 一阶导数计算与收敛性证明
对迭代函数 \(\varphi(x)\) 求一阶导数,分析其在根 \(x^*\) 处的取值:
根据求导的四则运算法则,\(\frac{d}{dx}\left(\frac{u}{v}\right)=\frac{u'v-uv'}{v^2}\),令 \(u=f(x), v=f'(x)\),则:
通分化简:
单根情形的收敛性(核心结论)
若 \(x^*\) 是 \(f(x)=0\) 的单根,即满足:
将 \(x=x^*\) 代入 \(\varphi'(x)\) 的表达式:
回顾不动点迭代的局部收敛性定理:
若迭代函数 \(\varphi(x)\) 在不动点 \(x^*\) 的邻域内连续可微,且 \(|\varphi'(x^*)|<1\),则迭代局部收敛;若 \(\varphi'(x^*)=0\),则迭代至少二阶收敛(平方收敛)。
因此我们得到核心结论:牛顿法在单根 \(x^*\) 的邻域内,是平方收敛(二阶收敛)的,这也是牛顿法收敛速度远快于线性收敛的不动点迭代的核心原因。
2.3 误差渐近式推导
我们进一步推导牛顿法的误差收敛规律,设迭代误差 \(e_k = x_k - x^*\),我们来证明:
推导过程:
将 \(\varphi(x)\) 在 \(x=x^*\) 处做二阶泰勒展开:
代入 \(\varphi(x^*)=x^*\)、\(\varphi'(x^*)=0\),化简得:
由于 \(x_{k+1}=\varphi(x_k)\),代入 \(x=x_k\):
移项得误差关系:
两边除以 \(e_k^2\),令 \(k \to \infty\)(\(e_k \to 0\),\(o(e_k^2)/e_k^2 \to 0\)),得:
接下来计算 \(\varphi''(x^*)\):
已知 \(\varphi'(x) = \frac{f(x)f''(x)}{[f'(x)]^2}\),对其求导,在 \(x=x^*\) 处,\(f(x^*)=0\),因此含 \(f(x^*)\) 的项全部为0,最终化简得:
代入误差极限式,最终得到:
这个式子直观体现了牛顿法的平方收敛特性:第k+1步的误差,与第k步误差的平方成正比,误差会呈指数级下降,收敛极快。
2.4 标准牛顿法的计算步骤
工程中实现牛顿法,遵循以下4步流程:
- 准备阶段:选定初始近似值 \(x_0\),计算 \(f_0=f(x_0)\),\(f_0'=f'(x_0)\)。
- 迭代阶段:按公式 \(x_1 = x_0 - \frac{f_0}{f_0'}\) 计算新的近似值 \(x_1\),并计算 \(f_1=f(x_1)\),\(f_1'=f'(x_1)\)。
- 终止控制:判断是否满足精度条件:\(|\delta|<\varepsilon_1\) 或 \(|f_1|<\varepsilon_2\)(\(\varepsilon_1,\varepsilon_2\) 为允许误差)。其中误差 \(\delta\) 的定义为:\[\delta= \begin{cases} x_1 - x_0, & |x_1| < C \ (\text{一般取} \ C=1, \text{绝对误差}) \\ \frac{x_1 - x_0}{x_1}, & |x_1| \geq C \ (\text{相对误差}) \end{cases} \]满足条件则终止迭代,输出 \(x_1\) 作为根;否则继续迭代。
- 异常处理:若迭代次数达到预设上限 \(N\),或 \(f_k'=0\)(导数为0,切线水平,迭代失效),则判定方法失败;否则用 \((x_1,f_1,f_1')\) 代替 \((x_0,f_0,f_0')\),回到步骤2继续迭代。
三、牛顿法的改进变体:解决原生方法的缺陷
标准牛顿法有两个核心缺陷:
- 每步都需要计算 \(f(x_k)\) 和 \(f'(x_k)\),计算量大,部分场景导数难以计算;
- 仅局部收敛,初始值 \(x_0\) 必须在根 \(x^*\) 的邻域内,否则可能发散。
针对这两个缺陷,工程中衍生出了多种改进方法,我们逐一讲解。
3.1 简化牛顿法(平行弦法)
核心思想
为了减少导数的计算量,我们固定导数的取值,用一个常数 \(C\) 代替每步的 \(1/f'(x_k)\),避免每步计算导数。
迭代公式
最常用的形式是取 \(C=\frac{1}{f'(x_0)}\),即只用初始点的导数代替所有迭代步的导数,迭代公式为:
收敛性分析
迭代函数为 \(\varphi(x)=x-Cf(x)\),求导得 \(\varphi'(x)=1-Cf'(x)\)。
根据不动点收敛定理,局部收敛的条件为 \(|\varphi'(x^*)|<1\),代入得:
满足该条件时,简化牛顿法局部收敛,但由于 \(\varphi'(x^*) \neq 0\),因此仅为线性收敛,收敛速度慢于标准牛顿法。
几何意义
标准牛顿法每步用当前点的切线,而简化牛顿法用 \(x_0\) 处切线的斜率,作一系列平行于初始切线的直线(平行弦),用这些直线与x轴的交点作为根的近似值,因此也叫平行弦法。
3.2 牛顿下山法
核心思想
解决标准牛顿法对初值敏感、初值偏离根较远时发散的问题,通过引入「下山因子」保证迭代过程中函数值单调下降,强制迭代向根的方向收敛。
下山条件
迭代过程必须满足:
该条件保证每一步迭代,函数值的绝对值都在减小,不断向根(\(f(x^*)=0\))靠近,满足该条件的算法称为下山法。
迭代公式
首先计算标准牛顿法的迭代结果 \(\bar{x}_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}\),然后将其与上一步的 \(x_k\) 做加权平均,得到新的迭代值:
其中 \(\lambda \in (0,1]\) 称为下山因子,化简后得到牛顿下山法的迭代公式:
当 \(\lambda=1\) 时,退化为标准牛顿法;\(\lambda<1\) 时,对迭代步长进行缩减,防止迭代跳转过远导致发散。
下山因子的选取规则
从 \(\lambda=1\) 开始,逐次将 \(\lambda\) 减半(\(\lambda=1, 1/2, 1/4, 1/8, \dots\)),直到满足下山条件 \(|f(x_{k+1})| < |f(x_k)|\) 为止。
收敛特性
满足下山条件后,可将 \(\lambda\) 恢复为1,回到标准牛顿法,保留二阶收敛的特性,同时解决了初值敏感的问题,是工程中最常用的牛顿法变体。
四、重根情形的牛顿法改进
当 \(x^*\) 是 \(f(x)=0\) 的 \(m\) 重根(\(m \geq 2\))时,标准牛顿法的收敛性会大幅下降,我们需要针对性改进。
4.1 重根的定义与标准牛顿法的收敛性
\(x^*\) 是 \(f(x)=0\) 的 \(m\) 重根,当且仅当 \(f(x)\) 可表示为:
此时满足:
对标准牛顿法的迭代函数求导,可得在重根处:
由于 \(m \geq 2\),因此 \(|\varphi'(x^*)| < 1\),标准牛顿法仍局部收敛,但 \(\varphi'(x^*) \neq 0\),因此仅为线性收敛,收敛速度大幅下降,需要大量迭代才能达到精度。
4.2 改进方法1:已知根的重数 \(m\)
核心思想
修改迭代公式,抵消重根带来的收敛阶下降,恢复二阶收敛。
迭代公式
收敛性
该迭代函数在重根 \(x^*\) 处满足 \(\varphi'(x^*)=0\),因此恢复二阶收敛,收敛速度与单根情形的标准牛顿法一致。
4.3 改进方法2:未知根的重数 \(m\)(重根转单根)
核心思想
构造新的函数,将原方程的 \(m\) 重根转化为新方程的单根,再对新方程用标准牛顿法,无需知道重数 \(m\) 即可实现二阶收敛。
构造辅助函数:
若 \(x^*\) 是 \(f(x)=0\) 的 \(m\) 重根,代入可得:
令 \(h(x)=\frac{g(x)}{m g(x) + (x-x^*)g'(x)}\),则 \(h(x^*)=\frac{1}{m} \neq 0\),因此 \(x^*\) 是 \(\mu(x)=0\) 的单根。
对 \(\mu(x)=0\) 应用标准牛顿法,推导得到迭代公式:
收敛性
该方法无需知道根的重数,对单根、重根均能实现二阶收敛,通用性极强,缺点是每步需要计算二阶导数 \(f''(x_k)\),计算量略有增加。
五、牛顿法全系列方法归纳总结表
| 方法名称 | 迭代公式 | 局部收敛阶 | 核心优点 | 核心缺点 | 适用场景 |
|---|---|---|---|---|---|
| 标准牛顿法(单根) | \(x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}\) | 二阶(平方收敛) | 收敛速度快,迭代步数少,公式简单,几何意义明确 | 1. 每步需计算\(f(x_k)\)和\(f'(x_k)\),计算量较大;2. 仅局部收敛,初值需在根的邻域内,否则可能发散;3. 导数为0时迭代失效 | 求解非线性方程的单根,可方便计算导数,初值能取到根附近的场景 |
| 标准牛顿法(重根) | \(x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}\) | 一阶(线性收敛) | 公式通用,无需知道根的重数 | 收敛速度大幅下降,高精度需求下迭代步数极多 | 仅用于重数未知的重根初步求解,不推荐高精度计算 |
| 简化牛顿法(平行弦法) | \(x_{k+1}=x_k-Cf(x_k)\)(常用\(C=1/f'(x_0)\)) | 一阶(线性收敛) | 仅需计算一次导数,每步迭代计算量极小,实现简单 | 收敛速度慢,仅当\(0<Cf'(x^*)<2\)时局部收敛 | 导数计算成本极高,对收敛速度要求不高,仅需根的粗略近似的场景 |
| 牛顿下山法 | \(x_{k+1}=x_k-\lambda\frac{f(x_k)}{f'(x_k)}\),\(\lambda\in(0,1]\)(从1开始减半试算) | 满足下山条件时,\(\lambda=1\)为二阶收敛 | 解决了标准牛顿法对初值敏感的问题,保证迭代收敛,同时保留快速收敛特性 | 需要试算下山因子,增加少量计算量,仍需计算每步导数 | 初值无法保证在根的邻域内,防止迭代发散的工程场景,最常用的实用变体 |
| 改进牛顿法(已知重数\(m\)) | \(x_{k+1}=x_k-m\frac{f(x_k)}{f'(x_k)}\) | 二阶(平方收敛) | 恢复重根下的二阶收敛,收敛速度快,公式修改简单 | 需要提前知道根的重数\(m\),实际中重数往往未知 | 已通过分析得到根的重数,需要高精度求解重根的场景 |
| 改进牛顿法(重根转单根,未知重数) | \(x_{k+1}=x_k-\frac{f(x_k)f'(x_k)}{[f'(x_k)]^2-f(x_k)f''(x_k)}\) | 二阶(平方收敛) | 无需知道根的重数,对单根、重根均能实现二阶收敛,通用性强 | 每步需要计算\(f(x_k),f'(x_k),f''(x_k)\),计算量更大,公式更复杂 | 根的重数未知,需要高精度求解重根的场景 |
牛顿法例题详细讲解与计算推导
我们结合两个经典例题,完整演示牛顿法的迭代公式推导、逐次计算过程,以及不同场景下的收敛性差异,将理论落地到实际计算中。
例7.7 标准牛顿法求解超越方程 \(f(x)=xe^x -1=0\)
1. 问题背景
该方程为超越方程,无解析解,等价于 \(x=e^{-x}\),即求直线 \(y=x\) 与指数曲线 \(y=e^{-x}\) 的交点横坐标,该根也叫朗伯W函数在1处的值,真实根 \(x^*\approx0.56714329\)。
本题的核心是演示标准牛顿法的迭代推导、计算过程,以及对比不动点迭代的收敛速度差异。
2. 迭代公式推导
牛顿法通用迭代公式为:
第一步:求 \(f(x)\) 的一阶导数
根据乘积求导法则:
第二步:代入牛顿公式并化简
将 \(f(x_k)\)、\(f'(x_k)\) 代入迭代公式:
为简化计算,分子分母同乘 \(e^{-x_k}\)(\(e^x\) 恒大于0,可安全约去):
该式即为课本中给出的迭代公式。
3. 逐次迭代计算(初值 \(x_0=0.5\))
我们严格按照迭代公式,分步计算每一步的近似根,验证课本表7-7的结果:
| 迭代步数 \(k\) | 近似根 \(x_k\) | 核心计算过程 | 计算结果 |
|---|---|---|---|
| 0 | \(x_0=0.5\) | 初始值 | 0.5 |
| 1 | \(x_1\) | \(e^{-x_0}=e^{-0.5}\approx0.60653\) \(\frac{x_0 - e^{-x_0}}{1+x_0}=\frac{0.5-0.60653}{1.5}\approx-0.07102\) \(x_1=0.5 - (-0.07102)\) |
0.57102 |
| 2 | \(x_2\) | \(e^{-x_1}=e^{-0.57102}\approx0.56493\) \(\frac{x_1 - e^{-x_1}}{1+x_1}=\frac{0.57102-0.56493}{1.57102}\approx0.00388\) \(x_2=0.57102 - 0.00388\) |
0.56716 |
| 3 | \(x_3\) | \(e^{-x_2}=e^{-0.56716}\approx0.56714\) \(\frac{x_2 - e^{-x_2}}{1+x_2}=\frac{0.56716-0.56714}{1.56716}\approx0.00001276\) \(x_3=0.56716 - 0.00001276\) |
0.56714 |
迭代3步后,结果已收敛到真实根的5位有效数字,精度极高。
4. 收敛速度对比
该方程等价于 \(x=e^{-x}\),若采用不动点迭代(迭代公式 \(x_{k+1}=e^{-x_k}\)),取相同初值 \(x_0=0.5\),要达到相同精度需要迭代17次。
- 不动点迭代:迭代函数 \(\varphi(x)=e^{-x}\),在根处 \(|\varphi'(x^*)|=| -e^{-x^*} |\approx0.567<1\),仅线性收敛;
- 牛顿法:单根场景下为二阶(平方)收敛,误差随迭代步数呈指数级下降,收敛速度远快于不动点迭代。
5. 拓展:牛顿法求平方根(经典应用)
对于正数 \(a\),求 \(\sqrt{a}\) 等价于求解二次方程 \(f(x)=x^2 -a=0\),用牛顿法推导迭代公式:
- 求导:\(f'(x)=2x\)
- 代入牛顿公式:
该式即为著名的巴比伦开方法,二阶收敛,是工程中求平方根的核心算法,仅需2-3次迭代即可达到极高精度。
例7.8 重根场景下的牛顿法改进与对比
1. 问题背景
方程 \(x^4 -4x^2 +4=0\),因式分解得 \(f(x)=(x^2-2)^2=(x-\sqrt{2})^2(x+\sqrt{2})^2\),因此 \(x^*=\sqrt{2}\approx1.414213562\) 是二重根(\(m=2\))。
本题的核心是验证:重根场景下标准牛顿法仅线性收敛,而两种改进方法可恢复二阶收敛。
2. 三种方法的迭代公式推导
首先计算 \(f(x)\) 的一阶、二阶导数,为迭代公式做准备:
方法(1):标准牛顿法
通用公式 \(x_{k+1}=x_k - \frac{f(x_k)}{f'(x_k)}\),代入因式分解后的表达式,约去公因子 \((x_k^2-2)\)(未收敛时 \(x_k^2\neq2\),可安全约去):
最终迭代公式:
方法(2):已知重数 \(m=2\) 的改进牛顿法
重根改进公式为 \(x_{k+1}=x_k - m\cdot\frac{f(x_k)}{f'(x_k)}\),代入 \(m=2\) 和上述化简结果:
该式本质就是求 \(\sqrt{2}\) 的巴比伦开方法,二阶收敛。
方法(3):未知重数的重根转单根改进法
通用公式为 \(x_{k+1}=x_k - \frac{f(x_k)f'(x_k)}{[f'(x_k)]^2 - f(x_k)f''(x_k)}\),代入 \(f(x),f'(x),f''(x)\) 并因式分解化简:
- 分子:\(f(x_k)f'(x_k) = 4x_k(x_k^2-2)^3\)
- 分母:\([f'(x_k)]^2 - f(x_k)f''(x_k) = 4(x_k^2+2)(x_k^2-2)^2\)
约去公因子 \((x_k^2-2)^2\) 后,分数部分化简为:
最终迭代公式:
3. 逐次迭代计算(初值 \(x_0=1.5\))
我们分步计算三种方法的迭代结果,验证课本表7-8的结论,真实根 \(x^*=\sqrt{2}\approx1.414213562\):
| 迭代步数 \(k\) | 方法(1) 标准牛顿法 | 方法(2) 已知重数改进法 | 方法(3) 重根转单根改进法 |
|---|---|---|---|
| 0 | \(x_0=1.5\) | \(x_0=1.5\) | \(x_0=1.5\) |
| 1 | \(1.5 - \frac{2.25-2}{4\times1.5}=1.458333333\) | \(1.5 - \frac{2.25-2}{2\times1.5}=1.416666667\) | \(1.5 - \frac{1.5\times(2.25-2)}{2.25+2}=1.411764706\) |
| 2 | \(1.458333333 - \frac{1.458333333^2-2}{4\times1.458333333}=1.436607143\) | \(1.416666667 - \frac{1.416666667^2-2}{2\times1.416666667}=1.414215686\) | \(1.411764706 - \frac{1.411764706\times(1.411764706^2-2)}{1.411764706^2+2}=1.414211438\) |
| 3 | \(1.436607143 - \frac{1.436607143^2-2}{4\times1.436607143}=1.425497619\) | \(1.414215686 - \frac{1.414215686^2-2}{2\times1.414215686}=1.414213562\) | \(1.414211438 - \frac{1.414211438\times(1.414211438^2-2)}{1.414211438^2+2}=1.414213562\) |
4. 核心结论
- 标准牛顿法:重根场景下仅线性收敛,迭代3步后仍与真实根有明显误差,要达到10位有效数字需迭代30次,收敛速度极慢;
- 已知重数的改进法:通过乘以重数 \(m\),恢复二阶收敛,迭代3步即可达到10位有效数字,收敛速度极快,缺点是需要提前知道根的重数;
- 重根转单根改进法:无需知道根的重数,同样实现二阶收敛,迭代3步达到10位有效数字,通用性极强,缺点是需要计算二阶导数,计算量略有增加。
posted on 2026-02-27 22:43 Indian_Mysore 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号