You are on page 1of 48

第六章 非线性方程求根

/* Solutions of Nonlinear Equations */


§1 Introduction
科学技术中常遇到高次代数方程或超
越方程的求根问题。大于 4 次的代数方程无
求根公式。因此需要研究函数方程求根问题
的数值方法。
求 f (x) = 0 的根或零点
x*
求根问题包括下面三个问题:
• 根的存在性:即 f(x)=0 有没有根?若有
,有
几个根?
• 哪儿有根?确定有根区间
• 根的精确化:已知一个根的近似值后
,能否
将它精确到足够精度?
本章假设 f ∈C[a, b] ,且 f (a) · f (b) < 0 ,则 f
在 (a, b) 上至少有一根, (a,b) 即为有根区间。问
题 1 、 2 得到解决。
1. 逐步搜索

§2 根的搜索
x0=a xk-1 x*
xk b
 1. 逐步搜索法
设 f (a) <0, f (b)> 0 ,有根区间
ε
while ( b −a >) do
为 (a, b) ,从 x0=a 出发,
{ x0 =a , h=( b
− a)/ N=
, k 0
按某个预定步长 ( 例如 h=(b-
while ( f )x k0 <
a)/N) 一步一步向右跨,每跨
一步进行一次根的搜索,即 { k =k1 +; x= + kx ;}
h
k

判别 f(xk)=f(a+kh) 的符号,若 b =x; k a= x


−k h( x );
k −1

f(xk)>0( 而 f(xk-1 )<0), 则有根区 }


间缩小为 [xk-1 ,xk] ( 若 ① 简单 ;
f(xk)=0 , xk 即为所求根 ), 然 ② 对 f (x) 要求
后从 xk-1 出发,把搜索步长 不高
再缩小,重复上面步骤,直 只要连续即
① (无法求复根及偶重

根 ).
到满足精度: |xk-xk-1 |< 为止
② 计算量大,收敛
2. Bisection Method
 2. 二分法 /* Bisection Method */( 逐步搜索法的
改进
设 )
f(x) 的有根区间为 [a,b]= [a ,b ], f(a)<0, f(b)>0.
0 0

将 [a0,b0], 对分,中点 x0= ((a0+b0)/2), 计算 f(x0),


若 f(x0) =0, x*=x0 a x1 x*
x2 b
<0, 有根区间 : [a1,b1]=[x0,b]
>0, 有根区间 : [a1,b1]=[a, x0]
对 [a1,b1] 对分,如此反复进行,得到一系列有
根区间:[ a , b ]⊃ [ a , b ] ⊃ [a , b ]L ⊃ ⊃
[a , b ]L ⊃
1 1 2 2 k k

bk −1 − ak 1− b− a
bk − ak = L = k= 0, →k → ∞
2 2 f(ak)0, f(bk)0,
{ ak } ↑ , { bk} ↓, ak <b, bk >a, f(x*)=lim f(ak)= lim f(bk)

⇒ ∃x∗ , s. t. lim ak = kb
lim ∗
x =, and f(x ) ∗
0. =
2. Bisection Method

取 xk=(ak+bk)/2 ([ak,bk] 的中点 ) ,显然有 limxk=x*.


—— 算法和收敛性说明。

When to stop? a x1 x*
x2 b

x k + 1 − xk < ε1 f ( xεk ) < 2

不能保证 xk 的精
ε 度
2
x* xk
2. Bisection Method

a+b b− a
第 1 步产生 x1 = |x1 − x*| ≤
2 2
的 b −a
第 k 步产生的 xk |x
有 k − x*| ≤
2k
误差
对于给定的精度  , 可估计二分法所需的步数 k :
b −a
<ε ⇒ k>
[ ln ( b − a ) − ln ε ]
k
2 ln 2
① 简单,总收敛 ;
② 对 f (x) 要求不高 ( 只要连续即可 ) .
① 无法求复根及偶重根
② 收敛慢
注: 用二分法求根,最好先给出 f (x) 草图以确定根的
大概位置。或用搜索程序,将 [a, b] 分为若干小区间,
对每一个满足 f (ak)·f (bk) < 0 的区间调用二分法程序,
可找出区间 [a, b] 内的多个根,且不必要求 f (a)·f (b) <
0 。
3. Regula Falsi Method

 3. 比例法(试位法 /* Regula Falsi Method */ )


(b, f (b))
(x, f (x))

a x*
x b
(a+b)/2
(a, f (a))
f (a )
x = a− ⋅ ( b − a)
f (b ) − f (a )

一般地,设 [ak,bk] 为有根区间,过 (ak, f(ak)) 、 (bk,


f(bk)) 作直线,与 x 轴交于一点 xk,
3. Regula Falsi Method
f (a k)
xk =ak − −
ak ( bk )
f (a k) −f (b k)
f (b k)
= bk− (−ak bk)
f (a k) −f (b k)

if f ( xk )gf (ak ) < 0, [ ak +1 , bk +1 ] = [ ak , xk ]


if f ( xk )gf (bk ) < 0, [ ak +1 , bk +1 ] = [ xk , bk ]
[a, b] ⊃ [a1 , b1 ] ⊃ [a2 , b2 ] ⊃ L ⊃ [ak , bk ] ⊃ L
but it is not necessary bk − ak → 0, k → ∞
那么用什么来逼近解呢?

定理 设 f(a)f(b)<0, 且 f (x), f (x) 在 [a,b] 内保号,


则按比例求根法确定的序列 {xk} 必收敛到根 x*.
3. Regula Falsi Method
证明:不妨设 f(a)<0, f(b)>0, f  (x)>0, 曲线如下

用比例求根法,一切有根区间的右端点均为 b,
即 ak=xk-1 , bk=b, k=1,2,…
f (x )
xk =xk −−
1
k −1
x−−k (1 b )
f (x k −1) −f (b)
a xk xk+1 x*
{ k}
x ↑ , xk < b ⇒ ∗
∃x , s. t. lim xk x=∗ b

上式两端取极限,有
*
f (x )
x =x −
* *
−x *
(⇒b ) f =x *
( ) 0.
f (x ) −f (b)
*

即 {xk} 收敛到 f(x)=0 的根 x*. #

注 : x*b, 因为 f(xk-1 )<0, 所以 f(x*)0, 而 f(b)>0


3. Regula Falsi Method

f (x k −1)
xk = xk −1− x−k(−1 b )
f (x k −1) −f (b) xk=(ak+bk)/2

注: 1. 试位法每次迭代比二分法多算一次乘法,而
且不保证收敛。
2. 比例法不是通过使求根区间缩小到 0 来求根
,而是在一定条件下直接构造出一个点列(递推
公式),使该点列收敛到方程的根。 ——这正是迭
代法的基本思想。
§3. Fixed-Point Iteration

§3 迭代法 /* Fixed-Point Iteration


迭代函数
*/
等价变换
f (x) = 0 x = g (x) , e.g., g(x)=f(x)+x

f (x) 的 g (x) 的不动


根 点 可用 §1 中的方法
从一个初值 x0 出发,计算 x1 = g(x0), x2 = g(x1),
{ x } ∞
…, x = g(x ), … 若k k = 0 收敛,即
k+1 k
lim x k = x *
存在
k →∞ x* 使得 lim x k +1 = lim g ( x k )
k →∞ k →∞

,且 g 连续,则由
可知 x* = g(x* ) ,即 x* 是 g
OhSo basically
yeah? Whowe are
tells
的不动点,也就是 f 的根。
done! I can’t believe
you that the method
it’s so simple!
is convergent?
What’s the problem?
§3. Fixed-Point Iteration
y y=x y y=x
p1 p0
y=g(x)
p0

 p1
y=g(x)

x x
x0 x1 x* x0 x* x1

y y=x y y=x
y=g(x)
y=g(x)
p0

p0
 p1

p1

x x
x1 x0 x* x0 x* x1
§3. Fixed-Point Iteration

ex1. f ( x) = x2 − 2 x − 3 = 0,1x =3,2x = −1


x = 2 x +3 = g( x), 0x =4, nx+ 1 =g(nx ), n 0,1,...,
= nx 3→
1 2
x = ( x −3) = g( x), 0x =4, 1x = 2x
6.5, =
19.625,
2
x3 = 191.0...., xn divergent.

说明:①迭代函数不唯一,②迭代点列可能收敛,也
可能发散,迭代收敛与否不仅与迭代函数有关,
还与初始点有关。
§3. Fixed-Point Iteration
定理 1 ( 迭代收敛条件 )
考虑方程 x = g(x), g(x)∈C[a, b],

( I )  x∈[a, b] , g(x)∈[a, b] ;
( II ) ∃ 0 ≤ L < 1 , s.t.  x∈[a, b], | g (x) | ≤ L.

则任取初值 x0∈[a, b] ,由 xk+1 { x } ∞


= g(xk) 得到的序列 k k =0
 
收敛于 g(x) 在 [a, b] 上的唯一不动点,并且有误差
估计式: 1
 | x * − x k | 

1− L
| xk +1 − xk | 事后误差估计
k
( k = 1, 2, … )
L
 | x * − xk | ≤ 
1− L
| x1 − x0 |
事先误差估计
x * − x k +1
且存在极 lim = g ′( x *)

k →∞ x * − xk

§3 Fixed-Point Iteration

证明 :① g(x) 在 [a, b] 上存在不动点


? f ( x ) = g( x ) − x  a ≤ g( x ) ≤ b

∴ f (a ) = g (a ) − a ≥ 0 , f (b ) = g (b ) − b ≤ 0
⇒ f ( x)

② 不动点唯一

反证:若不然,设还有x ~ = g( x ~)
~ = g (,则
x* − x x*) − g ( x~ ) = g ′( ξ ) ( x * − x~ ), ξ x* ~ 之间。
x
⇒ ( x* − x ~ )(1 − g ′( ξ )) = 0 | g ′( ξ ) | < 1 ~
∴ x* = x 
③ 当 k → ∞ 时, xk 收敛到
| x *?
x* − x k | = | g ( x*) − g( x k − 1 ) | = | g′( ξ k − 1 ) | ⋅ | x * − xk − 1 |
≤ L | x * − x k −1 | ≤ ...... ≤ Lk | x * − x0 | → 0 
§3. Fixed-Point Iteration
1
④ | x * − xk | ≤ | xk +1 − xk | ?
1− L
| xk +1 − xk | ≥ | x * − xk | − | x * − xk +1 | ≥ | x * − xk | − L | x * − xk |
k 可用 | xk +1 − x k | 
L
⑤ | x * − xk | ≤ | x1 − x0 | ? 来控
1− L
| x k +1 − x k | = | g ( x k ) − g ( x k −1 ) | = | g ′( ξ k )(制收敛精度
x k − x k −1 ) |
≤ L | x k − x kL−1 |越
≤ ...... ≤ Lk |收
x1 − x0 |

x * − x k +1
⑥ lim = g ′( x *) ? 敛越快
k →∞ x * − xk
x * − x k +1 g ′( ξ k )( x * − x k )
lim = lim = g ′( x*)
k →∞ x * − xk k →∞ x * − xk 
注 :定理条件非必要条件,可将 [a, b] 缩小,定义局部收
敛性
Def1.If there exists a neighborhood of x*, e.g., Bδ = { x | |
x − x* | ≤ δ } , s.t.  x0 Bδ , xk+1 =g(xk) converges, then
we say the iteration converges locally around x*.
§3. Fixed-Point Iteration

Th2. 若在 x* 的某 领域 Bδ = { x | | x − x* | ≤ δ } 有
g∈C1[a, b] 且 | g'(x*) | < 1 ,则由 x0∈Bδ 开始的迭代收
敛。即调整初值可得到收敛的结果。 注:局部收敛性定理对迭代函数的
要求较弱,但对初始点要求较高,
证明
即初始点必须选在精确解的附近
:
Q g ′(x *) <1, 且连续,
g′ (x )
∴∃ 某个邻域,
B : −x s.xt.
<* δ ∀ ∈x B, g ≤(x′ ) < L 1
又 Q g (x) − x * = g (x)− g (x *)≤ L x− x ≤
*
x x≤* ∀, δ∈x B.

∴ ∀ x∈ B, g( x)∈ B.
由知收敛。
Th1 #

注 :由于事先 x* 未知,所以无法检验条件 | g '(x*) | < 1.


只能用搜索法初步确定 x* 所在区间,验证该区间
内任一点是否有 | g'(x*) | < 1. 所以 Th2 实际上没什
么应用价值,但在理论上是对 g (x) 的一个改进。
§3. Fixed-Point Iteration

Algorithm: Fixed-Point Iteration


Find a solution to x = g(x) given an initial approximation x0.

Input: initial approximation x0; tolerance TOL; maximum number of


iterations Nmax .
Output: approximate solution x or message of failure.
Step 1 Set i = 1;
Step 2 While ( i ≤ Nmax ) do steps 3-6
Step 3 Set x = g(x0); /* compute xi */
Step 4 If | x − x0 | < TOL then Output (x); /* successful */
STOP;
Step 5 Set i ++; 当 x 很大时,此
Step 6 Set x0 = x ; /* update x0 */ x − x0
处可改为x < TOL
Step 7 Output (The method failed after Nmax iterations); /* unsuccessful */
STOP.
§3. Fixed-Point Iteration

改进、加速收敛 /* accelerating convergence */


有些迭代过程虽收敛,但速度很慢。为了达到所要求的
精度,需要迭代的次数很多,由此必须设法加速迭代过
程。
 1. 基本思想
x0 ---- x* 的预测值 微分中值定
x1 = g ( x0 )-----x0的校正值 理

x1 − x* = g ( x0 ) − g ( x* ) = g′ (ξ )( x0 − x* ),
介于 x0 与 x* 之间,设 g ′(变化不大,
x) g ′( x ) ≈ L ,则
1 1
x1 − x ≈ L ( x0 − x ) ⇒ x ≈
* * *
x1 − x0
1− L 1− L
上式说明,将预测值 x0 和校正值 x1 作线性组合作为 x*
的一个新近似值,可能比 x1 更好。令:
Update residual
Linear combination

1 L L
xˆ0 = x1 − x0 = x1 + (x1 − x0 )
1− L 1− L 1− L

一般地,有

xk ........................................
....predict
xk +1 = ϕ ( xk)L L L L L L L update
L
xˆk = xk+1 + ( xk 1 + −xL)k improve
1− L
 2. Aitken 加速:
在方法 1 中含有 L ,实际应用中不便。下面设
法消除 L 得到一种新的加速方法 ---Aitken (埃特
金)方法。x ——prediction
0

x1=g(x0) ——updating
x2=g(x1) ——further updating
x2 − x * ≈ ϕ (x1 )− ϕ (x * )≈ L (x1− x * ) x1 − x* x0 − x*
⇒ ≈
x2 − x *
x1 − x*
x1 − x * ≈ ϕ (x0 ) − ϕ (x * ) ≈ L (x0 − x * )

x0 x2 − x12 ( x2 − x1 ) 2 (x0 − x1 )2
⇒x ≈*
= x2 − = x0 − @xˆ0
x0 − 2 x1 + x2 x0 − 2 x1 + x2 x0 − 2 x1 + x2

推广,有下面一般计算公式

prediction xk

updating xk +1 = ϕ ( xk )

Further xk + 2 = ϕ ( xk +1 )
updating

( xk + 2 − xk +1 ) 2 Aitken’s
improve xˆk = xk + 2 −
xk + 2 − 2 xk +1 + xk acceleration

( xk − xk +1 ) 2
= xk −
xk + 2 − 2 xk +1 + xk
§3 Fixed-Point Iteration
Atkin’s method from
another point of view Generally, we have
( xk +1 −xk ) 2
y xˆk =xk −
y = g(x) xk − 2xk ++ 1 xk + 2
y=x
x0 , x1 = g( x0 ), x2 = g( x1 ),
xˆ 0 , x3 = g( x2 ),
P(x1, xˆ 1 , x4 = g( x 3 ),
x2) x* ... ...
P(x0, { xˆk } { xk }
x1)
 3. Steffensen 加速
x

x0 x=1 g( x0) x2 g(= x1),
x1 x* x2 x0
xˆˆ0 x=1 g( x0 ) x2 g=( x1 ),
x̂ xˆˆ0 ... ...
( x1 − x0 ) 2 x*
xˆ = x0 −
x0 − 2 x1 + x 2
 4. 待定参数法
: 若 | g'(x) | ≥ 1 , 则将 x = g(x) 等价地改
造为x = x − Kx + Kg ( x ) = (1 − K ) x + Kg ( x ) = ϕ ( x )
求 K ,使 | ϕ′( x ) | = | 1 − K + Kg ′( x ) | < 1

例: 求 f ( x ) = x − 3 x + 1 = 0
3

在 1 (1,3 2) 的实根。
如果用 x = 3 ( x + 1) = g( x ) 进行迭代,则在 (1, 2)
中有 | g′( x ) | = | x 2 | > 1 K 3
ϕ ( x ) = (1 − K ) x + Kg ( x ) = (1 − K ) x + ( x + 1)
3
−2
| ϕ ′( x ) | = | 1 − K + Kx 2 | < 1 < K <0
x 2 −1
2
在 (1, 2) 上可取任意 − < K <0 ,例如 K =
3
3 1 3
x=
−0.5 x − ( x + 1)
,则对应 即产生收敛序列
2 6

§4 牛顿迭代法 /* Newton - Raphson Method */

Newton’s method from the point of view of acceleration


f ( x) = 0 ⇔ x = g ( x ) = x + f ( x )
⇒ xk +1 = xk + f (xk ) predict
update

L
xk +1 = xk +1 + ( xk +1 − xk ) L ≈ g ' ( x) = 1 + f ' ( x)
1− L
f ( xk ) f ( xk ) M=L-1f'(x)
xk +1 = xk − = xk −
L −1 M
简单牛顿公式
f ( xk )
xk +1 = xk −
f ′( xk ) Newton’s
method
Newton’s method from the point of view of linearization
牛顿法是解非线性方程(组)的一种常用迭代方法,基本思想
是将非线性方程(组)转化为易于求解的线性方程
(组)来求解。 —— Taylor 展开 /* Taylor’s
expansion */
设 x* 有近似解 xk ≈ x* ,将 f (x) 在 xk 做一阶 Taylor 展开,将 x=
x* 代入,有 f ′′(ξ )
f ( x ) = f ( xk ) + f′ ( xk )( x −xk ) +
* * * 2
(x x−k ,
) 在 x* 和 xk
2!
之间。
f ( xk )
0 = f ( x *) ≈ f ( xk ) + f′ (xk )(x * −xk )⇒ x* ≈ xk −
f ′( xk )
y linear x k +1 = x k −
f ( xk )
equation f ′( x k )
只要 f ∈C1 ,每一步迭代都
有 lim xk = x*

x* x k →∞
xk f  ( xk ) ≠ 0 , 而且
Tangent method ,
则 x* 就是 f 的根。
§4 Newton - Raphson Method

定理 (牛顿法收敛的充分条件 )设 f ∈C2[a,
b] ,若
(1) f (a) f (b) < 0 ; (2) 在整个 [a, b] 上 f  不变号且 f
 (x) ≠ 0 ;
(3) 选取 x0 ∈ [a, b] 使得 f (x0) f  (x0) > 0 ;
产生的序列单调
则 Newton’s
有根 Method 只有单根,
产生的序列 { xk } 收敛到 f (x) 在
有界,保证收敛 [a,
根唯一 。
b] 的唯一根。
定理 (局部收敛性 )设 f ∈C2[a, b] ,若 x*
为 f (x) 在 [a, b] 上的根,且 f  (x*) ≠Bδ0( x,则存在 *) x*
x0 ∈ Bδ ( x*)
的邻域 使得任取初值 
, Newton’s Method x * − x k 产生的序列 { xk } 收敛到 x* ,且
f ′′( x*)
满足 lim  +1
k →∞ ( x * − x ) 2
=−
2 f ′( x*)
k
§4 Newton - Raphson Method

证明: Newton’s Method 事实上是一种特殊的不动点


迭代 f ( x)
g( x ) = x −
其中 f ′( x ) ,则
f ′′( x*) f ( x*)
g ′( x*) = = 0 <1 ⇒ 
f ′ ( x*)
2

由 Taylor 展开
f ′′(ξ k )
0:
= f ( x*) = f ( x k ) + f ′( x k )( x * − x k ) + ( x * − xk )2
2!
f ( xk ) f ′′(ξ k )
⇒ x* = x k − − ( x * − xk )2
f ′( x k ) 2! f ′( x k )
x k +1
x * − xk +1 f ′′ (ξ k ) f ′′( x*)
⇒ =− →− , f ′ ( x*) ≠0)
(k → ∞
( x * − xk )2
2 f ′ ( xk ) 2 f ′( x*)

在单根 /*simple root */


附近收敛快(平方收
§4 Newton - Raphson Method

注: Newton’s Method 收敛性依赖于 x0 的选取。

x0 x0 x
0
x*
牛顿法应用举例
x c2 −0,=
ex1. 用牛顿法解 >const .
c 0,
解:先导出求的计算公式:
c
f (x k) x k c2 − 1 c
xk +1 =xk − '
= x−k = + xk ( )
f (x k) 2x k 2 xk
∀ >
讨论收敛性:初值,x0 0
 1
xk +1 − c = x− 2
k ( c )
 2 xk xk +1 − c xk− c
 ⇒ = ( ) 2

x + c = 1 xk +1 + c xk+ c
k +1 x+k ( c ) 2

 2 xk
xk − c x− 0 c k −
k x c
⇒ = ( = ) 2= q2 0 ,q0 0

xk + c x+ 0 c x 0 + c
k k
2k k
⇒ x−
k =c +xk( c=q)− 02x
+k( c = 2c−q) +
2
0xk( c q) 0 2cq 2
0
k
2 cq 02
⇒ x−
k =c k
1 − q02
x0 − c
∀x0> 0,q=0 <⇒ − 1 x
→⇒
ck 

0 k→
x
∞ k →
c
∞k
x0 + c
1
ex2. find the root of equation − c = ,0c > 0, using
Newton's method
x
f (x )
solution: xk +1 = xk − ' k = xk (2 −cxk )
f ( xk )
convergency:
1
xk → ⇔1 − cxk@ rk →0, k → ∞
c
rk = 1 − cxk =1 −cx−k1 (2 −cxk−1 ) 1= 2−cxk1 − 2
c2+ xk1 − (1= cx−k12 )−
2k
=r 2
k −1 =L =r , r0 = 1 − cx0
0

2
rk → 0 ⇔ 0r =1 −cx0 <1 ⇒0 <x0 <
c
2 1
so if 0 < x0 < , kx → , k → ∞
c c
§4 Newton - Raphson Method

改进与推广 /* improvement and generalization



*/
根  重根 /* multiple root */ 加速收敛法
的 f ′( x*) = 0 , Newton’s Method 是否仍收
处 : 若   
Q1:
理 敛?x* 是 f 的 n 重根,则:
见 设 f ( x ) = ( x − x*) n ⋅ q( x ) q( x*) ≠ 0

矩 且 f ( x) 对 f(x) 求 1,2
阵 g( x ) = x −


对于牛顿法, f ′( x ) 阶导代入即
f (x*) f ′′(x*) 1 得
与 | g ′( x*) | = = 1− < 1
方 f ′(x*) 2
n


根 A1: 有局部收敛性 , 但重数 n 越高 ,g(x* ) 越接近于 1, 收

- 敛越慢。
Q2: 如何加速重根的收敛





A2: 将求 f 的重根转化为求另一函数的 
; 单根。 f ( x)
µ ( x )
令     ,则 = f 的重根 = µ 的单
P.208

f ′( x )
根。
§4 Newton - Raphson Method

 正割法 /* Secant Method */


:Newton’s Method 一步要计算 f 和 f  ,相当于 2 个
函数值,比较费时。现用 f 的值近似 f  ,可少算
一个函数值。 割线
/* secant line */

切线
收敛比 Newton’s Method /* tangent line */
慢,且对初值要求同样
高。
x1 x0

f ( x k ) − f ( x k −1 )
切线斜率  割线斜 ⇒ f ′( x k ) ≈
x k − x k −1

f ( x k )( x k − x k − 1 )
⇒ xk + 1 = xk − 需要 2 个初值 x0 和
f ( xk ) − f ( xk − 1 )
x1 。
§4 Newton - Raphson Method

 下山法 /* Descent Method */


——Newton’s Method 局部微调

原理 若由 xk 得到的 xk+1 不能使 | f | 减小,则在 xk
x k +1 f ( xk + 1 ) < f ( xk )
和 xk+1 之间找一个更好的点 ,使得
。 f ( xk )
xk xk+1 x k +1 = λ [ x k − ] + (1 − λ ) x k
f ′( x k )
f ( xk )
λ x k +1 + (1 − λ ) x k , λ ∈ [0, 1] = xk − λ
f ′( x k )

注:
注:
注: = 1 时就是 Newton’s Method 公式。
当  = 1 代入效果不好时,将  减半
计算。
 抛物线法 /* Parabola Method */
—— 利用插值将非线性方程转化为低
次多项式求根

割线
/* secant line */

切线
/* tangent line */

x3
x2 x1 x0
§4 Newton - Raphson Method

Algorithm: Newton’s Descent Method


Find a solution to f (x) = 0 given an initial approximation x0.
Input: initial approximation x0; f (x) and f ’(x); minimum step size of xmin ;
tolerance TOL1 for x ; tolerance TOL2 for λ ; maximum number of
iterations Nmax .
Output: approximate solution x or message of failure.
Step 1 Set k = 1;
Step 2 While ( k ≤ Nmax ) do steps 3-10
Step 3 Set λ = 1; 计算量未见得减小
f ( x0 )
Step 4 Set x = x0 − λ ; /* compute xk */
f ′( x 0 )
Step 5 If | x − x0 | < TOL1 then Output (x); STOP; /* successful */
Step 6 If f ( x ) < f ( x0 ) then x0 = x ; GOTO Step 10 ; /* update x0 */
Step 7 Set λ = λ / 2 ; /* update λ to descend */
Step 8 If λ > TOL2 then GOTO Step 4 ; /* compute a better xi */
Step 9 Set x0 = x0 + xmin ; /* move forward anyway to avoid deadlock */
Step 10 Set k ++;
Step 11 Output (Method failed after Nmax iterations); STOP. /* unsuccessful */
§4 Newton - Raphson Method

 求复根 /* Finding Complex Roots */


—— Newton 公式中的自变量可以是复数
f ( zk )
记 z = x + i y, z0 为初值,同样 z k +1 = z k −
f ′( z k )

f ( z k ) = Ak + i Bk , f ′( z k ) = C k + i Dk

代入公式,令实、虚部对应相等,
可得
Ak C k + Bk Dk
x k +1 = x k − 2
;
C k + Dk 2

Ak Dk + Bk C k
y k +1 = y k + 2
.
C k + Dk2
§5 迭代法的收敛阶 /* Order of Convergence
一种迭代法有 收敛----满足收敛性条件
*/ g ( x)

效 收敛速度快--也与有关 g ( x)  如何
刻画这种
在接近收敛的过程中迭代误差的下降 关系
速度。 Strict definition is given in
def2.
Def2. 设迭代 xk+1 = g(xk) 收敛到 g(x) 的不动点 x* 。
   
| e k +1 |
lim =C >0
设 ek = xk − x* ,若       ,则称该迭代为
k →∞ | ek | p
p 阶

收敛 ,其中 C 称为渐进误差常数。 /* { xk } converges to


x* of order p,
C > 0 */
with asymptotic error constant
p =1---- 线性收敛,
p >1----- 超线性收敛,
p =2---- 平方收敛。
| e k +1 |
 一般 lim
Fixed-Point Iteration k有        = | g ′( x*) | ≠ 0
→∞ | e |
k
,称为线
性收敛 /*lim xˆ k −convergence
linear x*
= 0 lim
|*/e k,这时
+1 |
= 0
p=1, 0<
 Aitken 加速有     
k →∞ x − x * k →∞ 。 | ek |
k
1 。超线性收敛
C <称为

注:/* superlinear
超线性收敛不一定有 convergence */ 。
p>1。
例如 xn = 1/nn 超线性收敛到 0 ,但对任何
p > 1 都没有
p 阶收敛。
§5 Order of Convergence

 Steffensen 加速 有 p = 2 ,条件是 g′( x*) ≠ 1


,称为平方收敛
/* quadratic convergence */|。
e k +1 | f ′′( x*)
 Newton’s Method 有 lim = f ′( x*) ≠ 0
2 k →∞ | ek | 2 f ′( x*)
,只要 ,
就有
Q: 如何实际确定收敛阶和渐进误差常 p ≥ 2 。重根是线性收敛的。
数?
定理 设 x* 为 x = g(x) 的不动点,若 g ∈ C p ( Bδ ( x*))
g ′( x*) = ... = g ( p −1) ( x*) = 0 , pg≥( p )2( x;
*) ≠ 0
Bδ ( x*) This is a one line proof...if we ,
且 start sufficiently,则 ξ k )k) 在
xk+1g (=p ) (g(x
far to the
x k +1 = g( x k ) = g ( x*) + g ′( x*)( x k − x*) + ... + ( x k − x*) p
内 p 阶收敛。 left. p!
x* k →∞
C
Th3 (relation between the convergence rate and the iteration function)
for the iteration process xk+1 =g(xk), if g(p) (x) is continuous
around the root x*, and g(l) (x*)=0, l=1,2,…,p, g(p) (x*)0,
then the iteration is p-convergent around x*.  
proof. Q g ′ (x* )= 0< 1, Note: 1.Th3 说明 , 收敛速度完全取决于迭代函

∴ xk converges to x locally(from Th2.).
*

2. 若 x[a,b], g(x)0, 迭代只可能是线


g (ξ )
(p)
性收敛。
Q g ( xk ) = g ( x* ) + ( xk −x*p ) f ( x) ' f ( x) f '' ( x)
p! g ( x) = x − '
3. 对牛顿公式, , g ( x) =
f ( x) [ f ' ( x)]2
and xk +1 = g (xk ), x* = g (x* ),
若 x* 是单根 , 则 f(x*)=0, f (x*) 0
ek +1 g ( p ) (ξ ) g ( p ) ( x* )
∴ p = → c = 0, ≠ g(x*) =0  在 x* 附近平方收敛
ek p! p! 4. 对简单牛顿公式 f ( x ) f '
( x)
g ( x) = x − , , g ' ( x) = 1 − ,
M M
k → ∞, (ξ is between kx and *x ).
'
f ( x)
∴ xk is p-convergent ot x . * 当M = f (x*) 时, g(x*) − ,在 < 1
g ( x) = 1=0 '

x* 附近平方收敛 . 一般地,当 M
简单牛顿法收敛,但收敛阶较低
§6 代数多项式的

f ( x) = a 0 x n + a1x n −1 + L a n −1x + a n = 0

 多项式求值的秦九韶算法 (Horner’s
Rule)
前面讨论的算法都要用到 f(x) 在某点之值 f(x0), 甚至导数值 f
 (x0). 对于多
项式当然可以直接求 , 但用宋秦九韶算法计算多项式值和导数值 , 计算量
 ,多项式值
少 结构紧凑。 乘法次数 n(n+1)/2
ff(x( x0)) = ( x − x0 ) p ( x) + f ( x0 ), p( x) = b0 x n −1 + b1 xn − 2 + L bn −2 x + bn−1
a0 x n + a1 x n −1 + L an −1 x + an = ( x − x0 )(b0 xn −1 + b1 xn − 2 + L bn −2 x + bn −1 ) + f ( x0 )
a0 = b0
a = b − b x
 1 1 0 0 b0 = a0
a2 = b2 − b1 x0 n 次乘法 , 结构紧

⇒ ⇒ bi = ai + bi −1 x0 , 1 ≤ i ≤ n 凑,程序通用
M  f (x ) = b
an −1 = bn−1 − bn − 2 x0  0 n


an = f ( x0 ) − bn −1 x0
 多项式导数值 f
 (x0)
f ( x) = ( x − x0 ) p( x) + f ( x0 ) f(x) is a polynomial of order n

f '' ( x0 ) f ( n ) ( x0 )
f ( x) = f ( x0 ) + f ( x0 )( x − x0 ) +
'
( x − x0 ) +L +
2
( x − x0 )n
2 n!
f '' ( x0 ) f ( n ) ( x0 )
= f ( x0 ) + ( x − x0 )[ f ( x0 ) +
'
( x − x0 ) +L + ( x − x0 )n −1 ]
2 n!
f '' ( x0 ) f ( n ) ( x0 )
⇒ p ( x) = f ( x0 ) +
'
( x − x0 ) +L + ( x − x0 )n −1
2 n!
= ( x − x0 )q ( x ) + f ' ( x0 )
let q ( x ) = c0 x n − 2 + c1 xn −3 + L cn −3 x + cn − 2 . Using Qin's method again, we get
c0 = b0

ci = bi + ci −1 x0 , i = 1 ~ n − 1
 f ′( x ) = c
 0 n
 多项式求根的劈因子法 /* Splitting Method */

从 f (x) 中分离出一个 2 次因子。


即:
f ( x ) = a0 x n + a1 x n−1 +  + a n−1 x + an
= ( x 2 + u * x + v*)(b0∗ x n− 2 + b1∗ x n− 3 +  + bn∗− 3 x + bn∗− 2 )
通过 x +      
u * x + v* = 0
2
可解出一对共
轭复根。
从一对初值 ( u, v ) 出发,则有
f ( x ) = ( x 2 + u x + v )P ( x ) + (r x + s)
其中 ( r, s ) 取决于 u 和 v ,可以看作是 ( u, v ) 的函
数,即
r = r ( u, v ) , s = s ( u, v ) 。
目标: r = r ( u*, v* ) = 0 , s = s ( u*, v* ) =
0。
§6 Splitting Method

将 r 和 s 在初值点 ( u, v ) 做一阶 Taylor 展开,并代入 (


u*, v*) :
 ∂r ∂r
0 = r ( u*, v*) ≈ r ( u, v ) + ∂u ( u * − u) + ∂v (v * −v )

0 = s( u*, v*) ≈ s( u, v ) + ∂s ( u * − u) + ∂s (v * −v )
 ∂u ∂v

从中解 ,以u + ∆u , v + ∆v

u
=
u
*

u
,

v
=
v
*

v

出 更新
u 和 v 再迭代,直到 r 和 s 充分
接近 0 。
∂r ∂r ∂s ∂s
每步迭代须计 r , s , , , , .
算 ∂u ∂v ∂u ∂v
§6 Splitting Method

 计算 r 和
sf (:
x ) = a0 x n + a1 x n − 1 + a2 x n − 2 + ... + an − 2 x 2 + a n− 1 x + a n
f ( x ) = ( x 2 + ux + v )(b0 x n− 2 + ... + bn− 2 ) + rx + s
= b0 x n + (b1 + ub0 ) x n− 1 + (b2 + ub1 + vb0 ) x n− 2 + ... + (bn− 2 + ubn− 3 + vbn− 4 ) x 2
+ ( ubn− 2 + vbn− 3 + r ) x + (vbn− 2 + s )

 b0 = a0 可记为 bn−1

 b1 = a1 − ub 0


⇒  bi = a i − ub i −1 − vbi −2 ( i = 2, 3, ..., n − 2)

 r = a n −1 − ub n −2 − vbn −3


 s = a n − vbn −2

bn = a n − ub n −1 − vbn −2 s = bn + ubn −1 .
§6 Splitting Method
∂r ∂s
 计算∂v , ∂v

f ( x) = a0 xn + a1 xn−1 +L +an − 1 x +an
= ( x 2 + ux +v ) P ( x ) +rx +s

∂f
=0
∂v ∂P ∂r ∂s
= P ( x ) + ( x + ux + v ) ⋅
2
+ x+
∂v ∂v ∂v

∂P ∂r ∂s
− P ( x ) = ( x 2 + ux + v ) + x+
∂v ∂v ∂v

n−2 阶多项 n−4 阶多项


式 式
∂r ∂s ∂P
与前一步同理,可导出   和 
,
∂v ∂v ∂v

公式。
§6 Splitting Method
∂r ∂s
 计算∂u , ∂u f ( x ) = a0 x n + a1 x n−1 +  + a n−1 x + a n
: = ( x 2 + ux + v ) P ( x ) + rx + v
∂f
=0
∂u ∂P ∂r ∂s
= xP ( x ) + ( x 2 + ux + v ) ⋅ + x+
∂u ∂u ∂u
∂P ∂r ∂s
− xP ( x ) = ( x 2 + ux + v ) + x+
∂u ∂u ∂u
∂P ∂r ∂s
而前一步得 − P ( x ) = ( x 2 + ux + v ) + x +
∂v ∂v ∂v

∂P ∂r 2 ∂s
− xP ( x ) = x ( x 2 + ux + v ) + x + x
∂v ∂v ∂v
 ∂P ∂r   ∂s ∂r  ∂r 
= ( x 2 + ux + v ) x +  +  −u x − v
 ∂v ∂v   ∂v ∂v  ∂v 

∂r ∂s ∂r ∂s ∂r
= −u , = −v
∂u ∂v ∂v ∂u ∂v