4640 字
23 分钟
Chapter8:非线性方程及非线性方程组的解法

概述#

这一章研究如何用数值方法求解

f(x)=0f(x)=0

以及多元非线性方程组

F(x)=0.\boldsymbol F(\boldsymbol x)=\boldsymbol 0.

核心思路可以串成一条链:

  1. 先找含根区间:用画图、试算或对分区间法确定根的大致位置。
  2. 再做局部加速:初值已经靠近根时,用 Newton 法迅速提高精度。
  3. 导数不方便时:用弦截法以差商近似导数。
  4. 遇到重根时:普通 Newton 法会退化为线性收敛,需要修正。
  5. 推广到多元问题:用 Jacobi 矩阵线性化,每一步解一个线性方程组。

对分区间法负责“稳妥地找”,Newton 法负责“快速地精修”。


教学范围#

根据两次课堂内容,本章实际教学范围如下。

纳入笔记#

  • §8.1 对分区间法
  • 收敛阶的基本概念
  • §8.3 Newton 法与弦截法
  • Newton 法在重根处的修正
  • §8.5.1 非线性方程组的 Newton 法
  • §8.5.2 最速下降法的基本思想

课堂未讲或明确跳过#

  • §8.2 简单迭代法
    • 不动点迭代
    • 压缩映射收敛条件
    • Steffensen 加速
  • §8.4 抛物线法(Müller 法)
    • 老师仅口头说明了“用二次插值多项式的零点产生下一近似值”的思想,随后明确跳过。
  • §8.5.2 最速下降法的完整算法与线搜索细节
    • 课堂只要求理解把方程组转化为最小二乘问题的思路。
  • §8.6 应用实例

老师明确说明:没有讲过的内容,考试不作要求。


目录#


非线性方程与根#

一般问题为

f(x)=0,f(x)=0,

其中 f(x)f(x) 为非线性函数。

大多数非线性方程没有可直接套用的求根公式,因此通常只能构造近似序列

x0,x1,x2,x_0,x_1,x_2,\ldots

使其逐步趋近真根 xx^*

课堂中的直观例子为

xx1/32=0,x(0,5).x-x^{1/3}-2=0,\qquad x\in(0,5).

通过试算可得:

f(3)<0,f(4)>0,f(3)<0,\qquad f(4)>0,

所以根位于 (3,4)(3,4) 内。接下来可以继续缩小区间,也可以在得到较好的初值后改用 Newton 法。

NOTE

数值求根通常包含两个阶段:

  • 根的隔离:确定根在哪一个小区间中;
  • 根的精化:从粗略近似出发,提高有效数字。

对分区间法适合第一阶段,Newton 法适合第二阶段。


对分区间法#

含根区间#

f(x)f(x)[a,b][a,b] 上连续,且

f(a)f(b)<0.f(a)f(b)<0.

由连续函数介值定理,至少存在一个

x(a,b)x^*\in(a,b)

使得

f(x)=0.f(x^*)=0.

区间 [a,b][a,b] 称为一个含根区间

若还能够由单调性、导数符号或图像判断该区间内只有一个根,则可以确定算法逼近的是该唯一根。

WARNING

“区间内只有一个根”有助于确认目标根,但对分区间法维持“区间内至少有一个根”只需要连续性和端点异号。

偶重根附近函数通常不变号,因此仅靠端点异号可能找不到偶重根。

算法过程#

a0=a,b0=b.a_0=a,\qquad b_0=b.

kk 步取中点

ck=ak+bk2.c_k=\frac{a_k+b_k}{2}.

f(ck)=0f(c_k)=0,则已经得到精确根。

否则根据符号选择新的含根区间:

[ak+1,bk+1]={[ak,ck],f(ak)f(ck)<0,[ck,bk],f(ck)f(bk)<0.[a_{k+1},b_{k+1}] = \begin{cases} [a_k,c_k], & f(a_k)f(c_k)<0,\\[4pt] [c_k,b_k], & f(c_k)f(b_k)<0. \end{cases}

每迭代一步,区间长度减半:

bk+1ak+1=bkak2.b_{k+1}-a_{k+1} = \frac{b_k-a_k}{2}.

因此得到嵌套区间

[a0,b0][a1,b1][a2,b2].[a_0,b_0]\supset[a_1,b_1]\supset[a_2,b_2]\supset\cdots.

[图片占位] 插入 lesson13 手写 PPT 第 217 或第 225 张幻灯片:中点判号并保留含根一半区间的示意图。

误差估计与迭代次数#

取区间中点作为近似值

xk=ak+bk2,x_k=\frac{a_k+b_k}{2},

xkxbkak2=ba2k+1.|x_k-x^*| \leq \frac{b_k-a_k}{2} = \frac{b-a}{2^{k+1}}.

若要求

xkxε,|x_k-x^*|\leq \varepsilon,

只需满足

ba2k+1ε.\frac{b-a}{2^{k+1}}\leq\varepsilon.

因此

kln(ba)lnεln21.k\geq \frac{\ln(b-a)-\ln\varepsilon}{\ln2}-1.

实际迭代次数取右端的向上整数。

常用停止条件:

bkak2<ε.\frac{b_k-a_k}{2}<\varepsilon.

课堂中也采用了更保守的条件

bkak<TOL.b_k-a_k<\mathrm{TOL}.

例:求三次方程的根#

f(x)=x3+10x20=0f(x)=x^3+10x-20=0

[1,2][1,2] 内的唯一实根,要求误差不超过

ε=12×104.\varepsilon=\frac12\times10^{-4}.

先验证:

f(1)=9<0,f(2)=8>0.f(1)=-9<0,\qquad f(2)=8>0.

又有

f(x)=3x2+10>0,f'(x)=3x^2+10>0,

所以 f(x)f(x) 严格单调递增,根唯一。

迭代次数满足

kln(21)ln(12×104)ln2113.28.k\geq \frac{\ln(2-1)-\ln\left(\frac12\times10^{-4}\right)} {\ln2}-1 \approx13.28.

故取

k=14.k=14.

主要迭代结果如下:

kkaka_kbkb_kxk=(ak+bk)/2x_k=(a_k+b_k)/2f(xk)f(x_k)
0121.5000000-1.6250000
11.521.75000002.8593750
21.51.751.62500000.5410156
31.51.6251.5625000-0.5603027
41.56251.6251.5937500-0.0143127
51.593751.6251.60937500.2621726
61.593751.6093751.60156250.1236367
71.593751.60156251.59765630.0545894
81.593751.59765631.59570320.0201208
91.593751.59570321.59472660.0028996
101.593751.59472661.5942383-0.0057077
111.59423831.59472661.5944825-0.0014037
121.59448251.59472661.59460460.00074864
131.59448251.59460461.5945436-0.00032642
141.59454361.59460461.5945741

因此可取

x1.5945741.x^*\approx1.5945741.

特点与局限#

优点:

  • 算法简单,只需计算函数值并判断符号;
  • 只要连续且初始端点异号,收敛性稳定;
  • 误差上界明确,可以预先估计迭代次数;
  • 不需要导数。

局限:

  • 收敛较慢,每一步只把误差上界缩小一半;
  • 只能直接处理实根;
  • 需要先找到端点异号的区间;
  • 对偶重根等不变号零点不敏感。

迭代误差与收敛阶#

设迭代序列 xkxx_k\to x^*,定义误差

ek=xkx.e_k=x_k-x^*.

若存在常数 C>0C>0p1p\geq1,使得

limkek+1ekp=C,\lim_{k\to\infty} \frac{|e_{k+1}|}{|e_k|^p} =C,

则称该迭代法具有 pp 阶收敛

线性收敛#

p=1,0<C<1p=1,\qquad 0<C<1

时,称为线性收敛。

直观上,每迭代一步,误差乘以一个固定折扣:

ek+1Cek.|e_{k+1}|\approx C|e_k|.

对分区间法的区间误差上界每一步乘以 1/21/2,因此属于线性收敛。

超线性收敛#

p>1p>1

时,称为超线性收敛。

误差下降速度会越来越快。

二阶收敛#

p=2p=2

时,称为二阶收敛或平方收敛:

ek+1Cek2.|e_{k+1}|\approx C|e_k|^2.

若当前误差约为 10210^{-2},随后可能按

102104108101610^{-2}\rightarrow10^{-4}\rightarrow10^{-8}\rightarrow10^{-16}

迅速下降。

TIP

判断一个 Newton 程序是否表现正常,可以观察有效数字是否在进入收敛区后近似翻倍。若迭代十余步仍没有明显加速,应检查初值、导数、公式和停止条件。


Newton 法#

公式推导#

xkx_k 已经较接近根 xx^*,在 xkx_k 处对 f(x)f(x^*) 作一阶 Taylor 展开:

0=f(x)f(xk)+f(xk)(xxk).0=f(x^*) \approx f(x_k)+f'(x_k)(x^*-x_k).

解出 xx^* 的一阶近似:

xxkf(xk)f(xk).x^* \approx x_k-\frac{f(x_k)}{f'(x_k)}.

于是定义下一次迭代值

xk+1=xkf(xk)f(xk).\boxed{ x_{k+1} = x_k-\frac{f(x_k)}{f'(x_k)} }.

Newton 法的核心来自局部线性化

几何意义#

在点

(xk,f(xk))(x_k,f(x_k))

处作曲线 y=f(x)y=f(x) 的切线,其方程为

yf(xk)=f(xk)(xxk).y-f(x_k)=f'(x_k)(x-x_k).

y=0y=0,切线与 xx 轴的交点为

xk+1=xkf(xk)f(xk).x_{k+1} = x_k-\frac{f(x_k)}{f'(x_k)}.

因此 Newton 法也称为切线法。

[图片占位] 插入 lesson13 手写 PPT 第 273 或第 297 张幻灯片,或课本图 8-3:以切线零点产生下一近似值的几何示意图。

局部收敛条件#

xx^* 为单根,并且:

  1. f(x)f(x)xx^* 附近二阶连续可微;
  2. f(x)0f'(x^*)\neq0
  3. 初值 x0x_0 充分靠近 xx^*

则 Newton 迭代收敛到 xx^*,且至少二阶收敛。

在根附近通常有

ek+1f(x)2f(x)ek2.e_{k+1} \approx \frac{f''(x^*)}{2f'(x^*)}e_k^2.

这一定理给出三个重要判断:

  • 根的性质重要:单根处 f(x)0f'(x^*)\neq0
  • 初值重要:Newton 法只有局部收敛保证;
  • 速度可检验:进入收敛区后应出现二阶收敛特征。
WARNING

若初值离根较远,切线零点可能跑向远处,Newton 法可能发散、振荡或收敛到其他根。

较稳妥的流程是:

  1. 用画图、试算或对分区间法获得一至两位可靠数字;
  2. 再启动 Newton 法精化。

Newton 法主要用于改进精度,缺乏可靠的全局搜索能力。

停止准则#

常见停止条件有三类。

相邻迭代值之差#

绝对形式:

xk+1xk<ε.|x_{k+1}-x_k|<\varepsilon.

相对形式:

xk+1xkmax(1,xk+1)<ε.\frac{|x_{k+1}-x_k|}{\max(1,|x_{k+1}|)} <\varepsilon.

方程残差#

f(xk+1)<ε.|f(x_{k+1})|<\varepsilon.

最大迭代次数#

达到预设次数仍未满足误差要求时,报告失败或发出警告。

WARNING

小残差不一定意味着 xkx_k 与真根很接近。

当根附近函数非常平坦,尤其是重根问题中,f(xk)|f(x_k)| 可能已经很小,而 xkx|x_k-x^*| 仍然较大。因此应结合:

  • 残差;
  • 相邻迭代值变化;
  • 问题的尺度和实际用途

共同判断。

例:Newton 法求根#

f(x)=x3+10x20=0f(x)=x^3+10x-20=0

的根,取

x0=1.5.x_0=1.5.

f(x)=3x2+10.f'(x)=3x^2+10.

Newton 迭代公式为

xk+1=xkxk3+10xk203xk2+10.x_{k+1} = x_k- \frac{x_k^3+10x_k-20} {3x_k^2+10}.

计算:

kkxkx_kf(xk)f(x_k)
01.500000000-1.625000000
11.5970149250.043266625
21.5945637492.8771×1052.8771\times10^{-5}
31.5945621171.2744×10111.2744\times10^{-11}
41.594562117约为 0

因此

x1.5945621.x^*\approx1.5945621.

进入收敛区后,只需少量迭代就获得接近双精度极限的结果。

程序实现中的检查#

Newton 法每一步需要:

  • 一次函数值 f(xk)f(x_k)
  • 一次精确导数值 f(xk)f'(x_k)
  • 一次更新。

核心更新只有

xk+1=xkf(xk)f(xk).x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}.

实现时应检查:

  1. 导数是否过小

    f(xk)|f'(x_k)|

    很小,Newton 步可能异常放大。

  2. 误差限是否符合浮点精度

    双精度计算中,将默认容差设为约 101510^{-15}101710^{-17} 更合理。具体值还需结合问题尺度。

  3. 最大迭代次数是否合理

    对正常二阶收敛的 Newton 法,通常十几步已经足够。设置 100 步可能掩盖公式错误或收敛退化。

  4. 是否记录迭代历史

    观察 xkx_kf(xk)f(x_k) 和步长变化,有助于判断收敛阶与异常行为。

  5. 是否直接求了数值导数

    经典 Newton 法依赖解析或精确导数。用差商替代导数后,算法性质会发生变化,更接近弦截法或拟 Newton 法。


弦截法#

弦截法也称割线法或 Secant Method。

迭代公式#

Newton 法中的导数可用两点差商近似:

f(xk)f(xk)f(xk1)xkxk1.f'(x_k) \approx \frac{f(x_k)-f(x_{k-1})} {x_k-x_{k-1}}.

代入 Newton 公式:

xk+1=xkf(xk)xkxk1f(xk)f(xk1).\boxed{ x_{k+1} = x_k - f(x_k) \frac{x_k-x_{k-1}} {f(x_k)-f(x_{k-1})} }.

几何上,过两点

(xk1,f(xk1)),(xk,f(xk))(x_{k-1},f(x_{k-1})), \qquad (x_k,f(x_k))

作割线,取该割线与 xx 轴的交点作为 xk+1x_{k+1}

[图片占位] 插入 lesson13 手写 PPT 第 305 或第 313 张幻灯片,或课本图 8-4:弦截法由两点割线产生下一近似值。

收敛速度与代价#

在单根附近且初值足够好时,弦截法的收敛阶为

p=1+521.618.p=\frac{1+\sqrt5}{2}\approx1.618.

它属于超线性收敛,速度低于 Newton 法的二阶收敛,但远快于线性收敛。

优点:

  • 不需要计算导数;
  • 每一步通常只需新增一次函数求值;
  • 仍具有超线性收敛速度。

代价与风险:

  • 需要两个初值 x0,x1x_0,x_1
  • 初值仍需接近目标根;
  • f(xk)f(xk1)f(x_k)-f(x_{k-1}) 很小时,分母可能导致不稳定;
  • 两点逐渐靠近时,差商中存在相消误差;
  • 在有限精度计算中不能无休止迭代,应监测步长和残差,一旦精度不再改善就停止。

例:弦截法求根#

仍求

f(x)=x3+10x20=0,f(x)=x^3+10x-20=0,

x0=1.5,x1=2.x_0=1.5,\qquad x_1=2.

迭代公式为

xk+1=xkxk3+10xk20(xk3+10xk20)(xk13+10xk120)(xkxk1).x_{k+1} = x_k- \frac{x_k^3+10x_k-20} { (x_k^3+10x_k-20) - (x_{k-1}^3+10x_{k-1}-20) } (x_k-x_{k-1}).

计算结果:

kkxkx_kf(xk)f(x_k)
01.5000000-1.6250000
12.00000008.0000000
21.5844156-0.1783702
31.5934795-0.0190786
41.59456515.256×1055.256\times10^{-5}
51.5945621约为 0

因此

x1.5945621.x^*\approx1.5945621.

与 Newton 法相比,弦截法多用几步,但省去了导数计算。


重根与 Newton 法修正#

重根定义#

xx^* 满足

f(x)=f(x)==f(r1)(x)=0,f(x^*)=f'(x^*)=\cdots=f^{(r-1)}(x^*)=0,

f(r)(x)0,f^{(r)}(x^*)\neq0,

则称 xx^*f(x)f(x)rr 重根

等价地,

f(x)=(xx)rg(x),g(x)0.f(x)=(x-x^*)^r g(x), \qquad g(x^*)\neq0.

r=1r=1 时为单根。

普通 Newton 法为什么变慢#

rr 重根使用普通 Newton 法,仍可在足够好的初值下收敛,但收敛阶降为 1,并且

limkxk+1xxkx=r1r.\lim_{k\to\infty} \left| \frac{x_{k+1}-x^*}{x_k-x^*} \right| = \frac{r-1}{r}.

ek+1r1rek.e_{k+1}\approx\frac{r-1}{r}e_k.

例如三重根时误差约乘以

23.\frac23.

Newton 法原本的快速优势会明显减弱。

已知重数#

若重数 rr 已知,可采用修正 Newton 公式

xk+1=xkrf(xk)f(xk).\boxed{ x_{k+1} = x_k - r\frac{f(x_k)}{f'(x_k)} }.

该修正可恢复至少二阶收敛。

未知重数#

μ(x)=f(x)f(x).\mu(x)=\frac{f(x)}{f'(x)}.

重根 xx^*μ(x)\mu(x) 的单根。对 μ(x)=0\mu(x)=0 使用 Newton 法可得

xk+1=xkf(xk)f(xk)[f(xk)]2f(xk)f(xk).\boxed{ x_{k+1} = x_k - \frac{f(x_k)f'(x_k)} {[f'(x_k)]^2-f(x_k)f''(x_k)} }.

该方法不需要预先知道重数,但需要计算二阶导数。

WARNING

靠近重根时,f(xk)f(x_k)f(xk)f'(x_k) 都可能非常小。有限精度下,公式可能出现严重相消、除以极小数或 0/00/0,从而产生 NaN。程序必须设置分母检查和合理停止条件。

例:方程 x-sinx=0#

考虑

f(x)=xsinx.f(x)=x-\sin x.

f(0)=0,f(0)=0,f(x)=1cosx,f(0)=0,f'(x)=1-\cos x,\qquad f'(0)=0,f(x)=sinx,f(0)=0,f''(x)=\sin x,\qquad f''(0)=0,f(x)=cosx,f(0)=10.f'''(x)=\cos x,\qquad f'''(0)=1\neq0.

因此

x=0x^*=0

是一个三重根

普通 Newton 公式为

xk+1=xkxksinxk1cosxk.x_{k+1} = x_k- \frac{x_k-\sin x_k}{1-\cos x_k}.

x0=0.5x_0=0.5 时,迭代值约为

0.50.331930.220880.14713,0.5 \rightarrow 0.33193 \rightarrow 0.22088 \rightarrow 0.14713 \rightarrow\cdots,

表现为近似按 2/32/3 缩小的线性收敛。

已知重数 r=3r=3 时,修正公式为

xk+1=xk3xksinxk1cosxk.x_{k+1} = x_k- 3\frac{x_k-\sin x_k}{1-\cos x_k}.

同样取 x0=0.5x_0=0.5

0.54.20418×1032.47699×1090.0.5 \rightarrow -4.20418\times10^{-3} \rightarrow 2.47699\times10^{-9} \rightarrow 约0.

修正后收敛速度显著提高。


非线性方程组的 Newton 法#

向量形式与 Jacobi 矩阵#

考虑 nn 个未知数、nn 个非线性方程:

{f1(x1,x2,,xn)=0,f2(x1,x2,,xn)=0,fn(x1,x2,,xn)=0.\begin{cases} f_1(x_1,x_2,\ldots,x_n)=0,\\ f_2(x_1,x_2,\ldots,x_n)=0,\\ \vdots\\ f_n(x_1,x_2,\ldots,x_n)=0. \end{cases}

x=(x1,x2,,xn)T,\boldsymbol x = (x_1,x_2,\ldots,x_n)^T,F(x)=(f1(x),f2(x),,fn(x))T.\boldsymbol F(\boldsymbol x) = (f_1(\boldsymbol x),f_2(\boldsymbol x),\ldots,f_n(\boldsymbol x))^T.

方程组写为

F(x)=0.\boldsymbol F(\boldsymbol x)=\boldsymbol0.

向量函数的导数为 Jacobi 矩阵:

J(x)=F(x)=[f1x1f1x2f1xnf2x1f2x2f2xnfnx1fnx2fnxn].\boldsymbol J(\boldsymbol x) = \boldsymbol F'(\boldsymbol x) = \begin{bmatrix} \dfrac{\partial f_1}{\partial x_1} & \dfrac{\partial f_1}{\partial x_2} & \cdots & \dfrac{\partial f_1}{\partial x_n} \\[6pt] \dfrac{\partial f_2}{\partial x_1} & \dfrac{\partial f_2}{\partial x_2} & \cdots & \dfrac{\partial f_2}{\partial x_n} \\ \vdots&\vdots&\ddots&\vdots\\ \dfrac{\partial f_n}{\partial x_1} & \dfrac{\partial f_n}{\partial x_2} & \cdots & \dfrac{\partial f_n}{\partial x_n} \end{bmatrix}.

多元 Newton 迭代#

在当前近似 x(k)\boldsymbol x^{(k)} 附近作一阶 Taylor 展开:

F(x(k)+Δx(k))F(x(k))+J(x(k))Δx(k).\boldsymbol F(\boldsymbol x^{(k)}+\Delta\boldsymbol x^{(k)}) \approx \boldsymbol F(\boldsymbol x^{(k)}) + \boldsymbol J(\boldsymbol x^{(k)}) \Delta\boldsymbol x^{(k)}.

要求下一点近似满足方程组:

F(x(k+1))0.\boldsymbol F(\boldsymbol x^{(k+1)})\approx\boldsymbol0.

因此令

J(x(k))Δx(k)=F(x(k))\boxed{ \boldsymbol J(\boldsymbol x^{(k)}) \Delta\boldsymbol x^{(k)} = -\boldsymbol F(\boldsymbol x^{(k)}) }

并更新

x(k+1)=x(k)+Δx(k).\boxed{ \boldsymbol x^{(k+1)} = \boldsymbol x^{(k)} + \Delta\boldsymbol x^{(k)} }.
WARNING

公式也可形式化写成

x(k+1)=x(k)J(x(k))1F(x(k)).\boldsymbol x^{(k+1)} = \boldsymbol x^{(k)} - \boldsymbol J(\boldsymbol x^{(k)})^{-1} \boldsymbol F(\boldsymbol x^{(k)}).

实际计算中不要显式求逆。应直接解线性方程组

J(x(k))Δx(k)=F(x(k)).\boldsymbol J(\boldsymbol x^{(k)}) \Delta\boldsymbol x^{(k)} = -\boldsymbol F(\boldsymbol x^{(k)}).

这更快,也更稳定。

[图片占位] 插入 lesson14 手写 PPT 第 241、249 或 257 张幻灯片:从向量 Newton 公式改写为线性方程组的推导。

计算步骤#

给定初值 x(0)\boldsymbol x^{(0)}

  1. 计算残差向量

    F(x(k)).\boldsymbol F(\boldsymbol x^{(k)}).
  2. 计算 Jacobi 矩阵

    J(x(k)).\boldsymbol J(\boldsymbol x^{(k)}).
  3. 解线性方程组

    J(x(k))Δx(k)=F(x(k)).\boldsymbol J(\boldsymbol x^{(k)}) \Delta\boldsymbol x^{(k)} = -\boldsymbol F(\boldsymbol x^{(k)}).
  4. 更新

    x(k+1)=x(k)+Δx(k).\boldsymbol x^{(k+1)} = \boldsymbol x^{(k)} + \Delta\boldsymbol x^{(k)}.
  5. 检查停止条件,例如

    F(x(k+1))<ε\|\boldsymbol F(\boldsymbol x^{(k+1)})\|_\infty<\varepsilon

    Δx(k)<ε.\|\Delta\boldsymbol x^{(k)}\|_\infty<\varepsilon.

只要 Jacobi 矩阵在解附近非奇异、函数足够光滑且初值充分接近,通常可以获得二阶收敛。

例:二元非线性方程组#

求方程组

{4x12+3x22=1,x138x23=1\begin{cases} 4x_1^2+3x_2^2=1,\\ x_1^3-8x_2^3=1 \end{cases}

x(0)=(0.25,0.5)T\boldsymbol x^{(0)}=(0.25,-0.5)^T

附近的根。

先写成

F(x)=[4x12+3x221x138x231].\boldsymbol F(\boldsymbol x) = \begin{bmatrix} 4x_1^2+3x_2^2-1\\ x_1^3-8x_2^3-1 \end{bmatrix}.

Jacobi 矩阵为

J(x)=[8x16x23x1224x22].\boldsymbol J(\boldsymbol x) = \begin{bmatrix} 8x_1 & 6x_2\\ 3x_1^2 & -24x_2^2 \end{bmatrix}.

在初值处:

J(x(0))=[230.18756],\boldsymbol J(\boldsymbol x^{(0)}) = \begin{bmatrix} 2 & -3\\ 0.1875 & -6 \end{bmatrix},F(x(0))=[00.015625].\boldsymbol F(\boldsymbol x^{(0)}) = \begin{bmatrix} 0\\ 0.015625 \end{bmatrix}.

因此解

[230.18756][Δx1(0)Δx2(0)]=[00.015625].\begin{bmatrix} 2 & -3\\ 0.1875 & -6 \end{bmatrix} \begin{bmatrix} \Delta x_1^{(0)}\\ \Delta x_2^{(0)} \end{bmatrix} = - \begin{bmatrix} 0\\ 0.015625 \end{bmatrix}.

得到

Δx1(0)=0.00409836,\Delta x_1^{(0)} = 0.00409836,Δx2(0)=0.00273224.\Delta x_2^{(0)} = 0.00273224.

更新:

x(1)=x(0)+Δx(0)=[0.254098360.49726776].\boldsymbol x^{(1)} = \boldsymbol x^{(0)} + \Delta\boldsymbol x^{(0)} = \begin{bmatrix} 0.25409836\\ -0.49726776 \end{bmatrix}.

继续迭代可得

x(0.2540786,0.4972512)T.\boxed{ \boldsymbol x^* \approx (0.2540786,-0.4972512)^T }.

[图片占位] 插入 lesson14 手写 PPT 第 273、289 或第 297 张幻灯片:例题中 Jacobi 矩阵、Newton 方程组及第一次修正量的完整板书。

TIP

这类题的作答顺序应固定:

  1. 写出 F(x)\boldsymbol F(\boldsymbol x)
  2. J(x)\boldsymbol J(\boldsymbol x)
  3. 写一般 Newton 方程;
  4. 代入当前近似值;
  5. 解线性方程组得到 Δx\Delta\boldsymbol x
  6. x(k+1)=x(k)+Δx(k)\boldsymbol x^{(k+1)}=\boldsymbol x^{(k)}+\Delta\boldsymbol x^{(k)} 更新。

最容易漏掉的是右端的负号。

计算量与实际意义#

每次多元 Newton 迭代需要:

  • 计算 nn 个函数值;
  • 计算 n2n^2 个偏导数;
  • 解一个 nn 阶线性方程组。

因此规模较大时计算代价明显增加。

它在以下问题中很常见:

  • 隐式时间离散;
  • 非线性偏微分方程离散后的代数方程组;
  • 非线性平衡状态计算;
  • 优化问题中的 Newton 与拟 Newton 方法。

课堂提到的 BFGS 属于拟 Newton 方法。它通过迭代近似二阶信息,思想上与多元弦截条件相关,可以减少直接构造高维导数矩阵的负担。


最速下降法的基本思想#

当方程数 mm 与未知数个数 nn 不相等,或方程组不能精确同时满足时,可把

fi(x)=0,i=1,2,,mf_i(\boldsymbol x)=0, \qquad i=1,2,\ldots,m

转化为最小化问题。

构造目标函数

Φ(x)=i=1m[fi(x)]2=F(x)22.\boxed{ \Phi(\boldsymbol x) = \sum_{i=1}^{m}[f_i(\boldsymbol x)]^2 = \|\boldsymbol F(\boldsymbol x)\|_2^2 }.

若原方程组存在精确解,则该解使

Φ(x)=0.\Phi(\boldsymbol x)=0.

若不存在精确解,最小化 Φ\Phi 可以获得残差平方和最小的近似解。这与最小二乘思想一致。

由链式法则:

Φ(x)=2J(x)TF(x).\nabla\Phi(\boldsymbol x) = 2\boldsymbol J(\boldsymbol x)^T \boldsymbol F(\boldsymbol x).

最速下降方向为

Φ(x).-\nabla\Phi(\boldsymbol x).

基本更新形式为

x(k+1)=x(k)λkΦ(x(k)),\boldsymbol x^{(k+1)} = \boldsymbol x^{(k)} - \lambda_k\nabla\Phi(\boldsymbol x^{(k)}),

其中 λk>0\lambda_k>0 为步长。

严格的最速下降法需要沿下降方向做一维搜索:

λk=argminλ>0Φ ⁣(x(k)λΦ(x(k))).\lambda_k = \arg\min_{\lambda>0} \Phi\!\left( \boldsymbol x^{(k)} - \lambda\nabla\Phi(\boldsymbol x^{(k)}) \right).

课堂只要求理解以下关系:

求非线性方程组
\Longrightarrow 最小化残差平方和
\Longrightarrow 可沿负梯度方向下降。

还可以对驻点方程

Φ(x)=0\nabla\Phi(\boldsymbol x)=\boldsymbol0

再次使用多元 Newton 法。


方法选择总结#

方法需要的信息收敛速度优点主要风险适用阶段
对分区间法函数值、端点异号线性,误差上界每步减半稳定、误差可控慢;需含根区间根的隔离、粗定位
Newton 法f,ff,f',一个初值单根附近二阶极快初值敏感;导数可能过小局部精化
弦截法ff,两个初值1.6181.618无需导数差商相消;后期不稳定导数难求时的局部精化
重根修正 Newtonf,ff,f';有时需 ff''可恢复二阶解决重根退化需知重数或二阶导数重根问题
多元 Newton 法F,J\boldsymbol F,\boldsymbol J解附近通常二阶多元问题中速度快每步需解线性方程组非线性方程组
最速下降法F,J\boldsymbol F,\boldsymbol J 或梯度通常线性、较慢可处理超定或无精确解情况步长选择敏感获取可用初值或最小二乘解

推荐组合:

对分区间法粗定位Newton 法精化\boxed{ \text{对分区间法粗定位} \quad\longrightarrow\quad \text{Newton 法精化} }

当导数难以获得时:

粗定位弦截法\boxed{ \text{粗定位} \quad\longrightarrow\quad \text{弦截法} }

考试与作答提示#

必须掌握#

  • 对分区间法的区间更新、误差估计与迭代次数;
  • 收敛阶的含义;
  • Newton 迭代公式;
  • Newton 法的几何意义和局部收敛条件;
  • 弦截法公式及其与差商的关系;
  • 重根导致 Newton 法退化,以及两种修正思路;
  • Jacobi 矩阵;
  • 多元 Newton 法每一步转化为线性方程组;
  • 二元非线性方程组的一步手算。

公式要求#

老师明确要求记住 Newton 公式:

xk+1=xkf(xk)f(xk).\boxed{ x_{k+1} = x_k-\frac{f(x_k)}{f'(x_k)} }.

其余公式侧重理解来源和正确使用。弦截法可以从“用差商替代导数”现场推出。

书写顺序#

求根计算题应尽量完整写出:

  1. 原函数及导数;
  2. 一般迭代公式;
  3. 本题的具体迭代公式;
  4. 初值代入;
  5. 每一步数值;
  6. 停止条件与最终近似解。

多元题应重点展示:

  1. F(x)\boldsymbol F(\boldsymbol x)
  2. J(x)\boldsymbol J(\boldsymbol x)
  3. Newton 线性方程组;
  4. 修正量 Δx\Delta\boldsymbol x
  5. 更新后的 x(k+1)\boldsymbol x^{(k+1)}

考查重点在于能否为具体问题选择正确算法,并把算法步骤写完整。

Chapter8:非线性方程及非线性方程组的解法
https://www.sleepyfish2031.top/posts/课程笔记/计算方法/chapter8/
作者
Sleepyfish
发布于
2026-06-20
许可协议
CC BY-NC-SA 4.0