You are on page 1of 662

数值分析

目 录
第一章 绪论
第二章 插值法
第三章 函数逼近与计算
第四章 数值积分与数值微分
第五章 常微分方程数值解法
第六章 方程求根
第七章 解线性方程组的直接方法
第八章 解线性方程组的迭代法
第九章 矩阵的特征值与特征向量计算

2
第一章
绪 论
简单示例 1

例 A 求方程 x + x-1=0
0.5
7

在区间 [0,1] 中的根 . 0.2 0.4 0.6 0.8 1

分析 : 由于函数
-0.5

f(x)=x7+x-1 是连续 -1

函数 , 且 f(0)<0, 困难 : 五次以上方程没有
f(1)>0, 根据介值定 求根公式 . 无法求出精确
理 , 它在 (0,1) 内必 解.
然有根 . 只能用数值方法求近似
解!
4
简单示例
例 B 已知施加于弹簧上的外力与其的伸长的长
度成正比 , 即有 F=kx, 其中 k 称为弹簧的弹性
系数 . 现已测得伸长长度和外力的若干数据如
下:
(1.35,4.00),(2.00,6.00),(2.69,8.00),(3.42,10.00)
请根据这组数据求出弹性系数 k.

5
分析 : 我们先将数据画在一张图上 . 可以看
出 , 四个点近似的在一条通过原点的直线上 .
但是如果我们作出直线 y=3x, 它通过第二个
点 , 却不通过其它的点 .“ 最好”的系数应该
是多少 ?
10

0.5 1 1.5 2 2.5 3 3.5


6
数值分析
上面的例 B 必须通过数值分析的方法给出一
定的理论基础 .
事实上 , 数值分析就是研究用计算机解决实际
问题的数值方法和理论 .
数值分析一般以需计算的数学问题为研究对
象 , 也有自身严谨的理论系统 .

7
误差来源
模型误差 : 建立数学模型的近似带来的误差 ;
观测误差 : 测量物理量所包含的误差 ;
截断误差 : 也称为方法误差用数值方法求近
似解时 , 近似解与精确解之间的误差 ;
舍入误差 : 计算机字长有限 , 在表示无限小数
时产生的误差 .
我们可以用下面的图来显示各种误差 .

8
研究 模型
研差方
数学模型
究 法

.

对象 的建立 误差 数误
值差
实 计算方法 方法
分与

的构成 误差
析舍
界 测量 数值运算 舍入
中入
数据 的执行 误差
着误
测量 重
误差 结果
9
误差分析
1
例 1 计 I n  e 0 x ne x dx(n  0,1,) 并估计误差
1


由分部积分公式可以得到 In 的递推公式
In=1-nIn–1(n=1,2,…),I0=1-e -1;
下面采用 4 位小数计算 . 由于 e–1≈0.3679( 根据
Taylor 展式 , 误差小于 0.25×10–4), I0≈0.6321.
我们用此初值以及递推公式计算若干步得到表
中的结果 .

10
误差分析
n In n In
0 0.6321 5 0.1480
1 0.3679 6 0.1120
2 0.2642 7 0.2160
3 0.2074 8 -0.7280
4 0.1704 9 7.5520
由于被积函数的值在 0,1 之间 , 积分值也应
该在 0,1 之间
I 7 . I8 和 的值是不可靠的 .

11
例 1 的误差分析
初值 I0 有误差 E0  I 0  I 0 , 引起以后各步的误差 .

En  I n  I n
 (1  nI n 1 )  (1  nI n1 )
  n( I n 1  I n 1 )
  nEn 1
因此有 En=(-1)nn!E0.
这说明第 n 步的误差是初始误差的 n! 倍 .
下面的表给出了实际的误差 .

12
例 1 的误差分析
n In En n In En
0 0.6321 2.056 10–5 5 0.1480 –2.467 10–3
1 0.3679 –2.056 10–5 6 0.1120 1.480 10–2
2 0.2642 4.112 10–5 7 0.2160 –1.036 10–1
3 0.2074 –1.234 10–4 8 -0.7280 0.8289
4 0.1704 4.934 10–4 9 7.5520 –7.460

13
稳定性的算法

通过误差分析 , 我们可以发现上面的算法中 ,
随着计算的深入 , 误差是逐渐扩大的 , 我们称
之为不稳定的算法 .
反之 , 误差不扩大的算法称为稳定的算法 .

14
稳定性的算法
由上面的递推公式可以得到 :In–1=(1–In)/n.
我们已知 I9 在 0 和 1 之间 , 可以取为 0.5( 误差
小于 0.5). 用上面的递推公式计算得 I0=0.6321,
计算结果是相当准确的 .
类似于前面的方法可以得到 |E0|=|En|/n!,
该算法是稳定的 .

15
误差分析的重要性
由上面的算法的例子可以发现 , 在数值计算中
如果不注意误差分析 , 许多在理论上好像是正
确的算法 , 在实际应用时会出现“差之毫厘 ,
失之千里”的错误结果 .
在计算时 , 应尽量采用稳定性好的算法 .

16
误差的基本概念
绝对误差 : e* =x*  x
e*: 误差 x*: 近似值 x: 准确值
注 : 在实际应用中 , 也可以将 x  x* 作为误
差 , 没有实质性的区别 .
误差限 *: ( 绝对 ) 误差绝对值的上限
用毫米刻度的米尺测量时 , 其误差限为 0.5 毫

17
误差的基本概念
相对误差 er*=e*/x=(x*-x)/x
er*: 相对误差 ,e*: 绝对误差 ,x*: 近似值 ,x: 准确值
注 : 常用 (x*-x)/x* 来作为 x* 的相对误差
相对误差限 r*: 相对误差的绝对值上界
用毫米刻度的米尺测量得一物体的长度为 128 毫
米 , 则其相对误差限可计算为 0.5/128=0.39%

18
有效数字
x==3.14159265…
按照四舍五入的原则可以得到 x 的前几位 .
取 3 位 x3*=3.14, 3*≤0.002,
取 5 位 x5*=3.1416, 5*≤0.000008,
一般地 , 误差小于末位数字的半个单位
|-3.14|≤0.5×10-2, |-3.1416|≤0.5×10-4

19
有效数字
若近似值 x* 的误差限是某一位的半个单位 ,
该位到 x* 的第一位非零数字共有 n 位 , 就称
x* 有 n 位有效数字 .
x* 有 n 位有效数字可写成标准形式
x*=±10m×(a1+a2×10–1+…+an×10–(n–1)),
其误差限为 0.5×10m–n–1, 即
|x-x*|≤ 0.5×10m–n–1

20
数值运算的误差估计 ( 四则运算 )
两个近似数 x* 与 y*, 其误差限分别为 (x*) 与
(y*), 它们进行加 , 减 , 乘 , 除运算得到的误差限
分别为
(x*±y*)=  (x*)+ (y*)( 书中有错 !)
(x*×y*)= (y*)|x*|+ (x*)|y*|
(x*/y*)= ((y*)|x*|+ (x*)|y*|)/|y*|2

21
数值运算的误差估计 ( 函数计算 )
对于多元函数 A=f(x1,x2,···,xn), 如果 x1,x2,···,xn 的近似值
分别为 x1*,x2*,···,xn*, 误差限分别为 (xk*)
(k=1,2, …,n), 则 A 的近似值为 A*=f(x1*,x2*,···,xn*),
其误差限可以用下式计算

n
f *
 ( A )  | (
*
) | ( xk* )
k 1 x k

22
例 5 已测得某场地长 l 的近似值为 l*=110m, 宽
d 的近似值为 d*=80m, 已知 |l-l*|≤0.2m, |d-d*|
≤0.1m. 试求面积 s=ld 的绝对误差限与相对误差
限.
解 :s=ld,∂s/∂l=d, ∂s/∂d=l, 因此绝对误差限约为
(s*)≈|(∂s/∂l)*|(l*)+|(∂s/∂d)*|(d*)
=|d*| (l*)+|l*| (d*)
=80×0.2+110×0.1=27(m2)
相对误差限 r(s*)=(s*)/|s*| ≈27/8800=0.31%.

23
数值运算的若干原则
避免“大数”除以“小数”
避免相近数相减
避免“大数”吃“小数”
减少运算次数

24
计算 1.23+0.0567+0.0957+0.0246+0.0753
( 用三位有效数字 )
直接计算 =1.29+0.0957+0.0246+0.0753
=1.39+0.0246+0.0753
=1.42+0.0753=1.50
先计算后四项
= 1.23+(0.0567+0.0957+0.0246+0.0753)
=1.23+0.252=1.48
后者更精确 ( 用 5 位数字得结果为 1.4823)

25
数值运算的若干原则
计算 3  2 ( 用两位有效
数字 ) :
直接计算 3 2  1.7  1.4  0.3
转换以后计算 :
1 1 1
3 2    0.32
3 2 1.7  1.4 3.1
后一种方法更为精确

26
第二章
插值法
引 言
实际问题中碰到的函数是各种各样的 . 有的
表达很复杂 , 有的甚至给不出数学式子 , 而只
是给出了一些离散数据——譬如某些点的函
数值和导数值 . 面对这种情况 , 一个很自然的
想法就是构造某个简单的函数作为要考察的
函数的近似 .

28
引 言
如果要求近似函数取给定的离散数据 , 则称
之为插值函数 . 实用上 , 我们常取结构相对比
较简单的代数多项式作为插值函数 , 这就是
所谓的代数插值 .
本章先讨论代数插值 , 然后在此基础上进一
步研究所谓的样条插值 .

29
引例
三角函数表的构造
如何用初等方法给出 sin x 在一系列点处的函
数值 ?
已知 sin x 在 x=0,/6,/4,/3,/2 等处的函数值 .
将这些点处的函数值在图形上标出 .

30
1
可以看出 ,
0.8 折线与曲线
0.6
比较接近 .

0.4
不过 , 在
0.2  /3 到 /2
之间误差比
0.25 0.5 0.75 1 1.25 1.5 较大 .
将相邻两点用线段相连

31
再增加一个点 x=(/3+/2)/2, 这一点的函数值
可以通过初等方法求出 .
此时 , 在 /3 到 /2 之间的误差变小 ( 见下页
图 ).
通过这一方法可以用一条折线替代函数
y=sinx, 而且随着点的增加 , 误差越来越小 .
这个例子说明 , 我们可以用简单的函数去替代
复杂的函数 .

32
1

0.8

0.6

0.4

0.2

0.25 0.5 0.75 1 1.25 1.5

33
引 言
设函数 f(x) 在区间 [a,b] 上有定义 , 且已知在点
a≤x0<x1<…<xn≤b 上的函数值 f(xi)=yi(i=0,1,···,n)
如果存在简单函数 P(x), 使 P(xi)=yi(i=0,1,···,n)
成立 , 就称 P(x) 为 f(x) 的插值函数 , 点 x0,x1,···,xn
( 它们互不相同 ) 称为插值节点 , 包含插值节点的
区间 [a,b] 称为插值区间 .
如果 P(x) 是不超过 n 次的多项式 , 就称 P(x) 为插
值多项式 . 若 P(x) 为分段的函数 , 就是分段插值 .

34
从几何上看 , 插值法就是求曲线 y=P(x), 使其
通过给定的 n+1 个点 (xi,yi),i=0,1, ···,n, 并用它
近似已知曲线 y=f(x).
插值多项式

35
插值多项式的存在唯一性
用 Hn 代表所有次数不超过 n 的多项式的集合 .
所谓插值多项式存在唯一 , 是指集合 Hn 中有且
只有一个 P(x) 满足插值条件 . 若设
P ( x )  a0  a1 x    an x n
根据插值条件 P(xi)=yi,(i=0,1,…,n), 有
 a0  a1 x0    an x0n  y0

 a0  a1 x1    an x1n  y1

 
 a0  a1 x0    an xnn  yn

36
插值多项式的存在唯一性
上面的方程组是关于 a0,a1,…,an 的线性方程组 ,
其系数行列式为
1 x0 x02  x0n
1 x1 x12  x1n n i 1
Vn ( x0 , x1 , , xn )  1 x2 x22  x2n   ( xi  x j )  0
i 1 j  0
    
1 xn xn2  xnn

所以方程组存在唯一的解 .
从而插值多项式存在唯一 .

37
唯一性的另一种证明
设 f(x),g(x) 都是不超过 n 次的多项式 , 而且满
足 f(xi)=g(xi)=yi,(i=0,1,…,n),
若 h(x)=f(x)–g(x) 不是零多项式 , 则其必然是不
超过 n 次的多项式 . 由于 h(xi)=0(i=0,1,…,n),
因此 (x–xi) 是 h(x) 的因式 ,
从而 h(x) 有因式 (x–x0)(x–x1)···(x–xn),
其次数必然大于等于 n+1, 矛盾 .

38
线性插值
问题 求作一次式 L1(x) ,满足条件
L1(xk)=yk, L1(xk+1)=yk+1,
从几何图形上看 ,y= L1(x) 表示过两点 (xk,yk),
(xk+1,yk+1) 的直线 , 因此可表为如下对称形式 :
L1(x)=yklk(x)+yk+1lk+1(x)
其中

lk(x) 与 lk+1(x) 分别满足条件


lk(xk)=1,lk(xk+1)=0 以及 lk+1(xk)=0,lk+1(xk+1)=1.
39
线性插值
可见 , 插值问题的解 L1(x) 可以通过线性插值
基函数 lk(x) 和 lk+1(x) 的组合得出 , 且组合系
数分别是所给数据 yk,yk+1.
下面是两个基函数的图形
y y
.


 

1 1

lk x lk1 x

x x
xk xk1 xk xk1

40
拋物插值
问题 求作二次函数 L2(x), 使满足条件

二次插值的几何解释是用通过三个点

的抛物线 y=L2(x) 来近似曲


类似于线性插值
线. ,
令我们希望

41
拋物插值

此时 , 将 xk-1 带入到 P2(x) 的表达式中 , 显然有


P2(xk-1)=yk-1lk-1(xk-1)+yklk(xk-1)+yk+1(xk-1)=yk-1.
类似地有 P2(xk)=yk,P2(xk+1)=yk+1, 即 P2(x) 满足插
值条件 .

42
拋物插值

根据 lk-1(xk)=lk-1(xk+1)=0 可知 xk 和 xk+1 是 lk-1(x) 的


两个根 , 可以设 lk-1(x)=A(x-xk)(x-xk+1), 再根据
lk-1(xk-1)=1, 有 1=A(xk-1-xk)(xk-1-xk+1), 因此
1 ( x  xk )( x  xk 1 )
A lk 1 ( x ) 
( xk 1  xk )( xk 1  xk 1 ) ( xk 1  xk )( xk 1  xk 1 )

43
拋物插值
类似的 ( x  xk 1 )( x  xk 1 )
lk ( x ) 
( xk  xk 1 )( xk  xk 1 )
( x  xk 1 )( x  xk )
lk 1 ( x ) 
( xk 1  xk 1 )( xk 1  xk )
从而插值函数为
( x  xk )( x  xk 1 )
L2 ( x )  yk 1
( xk 1  xk )( xk 1  xk 1 )
( x  xk 1 )( x  xk 1 ) ( x  xk 1 )( x  xk )
 yk  yk 1
( xk  xk 1 )( xk  xk 1 ) ( xk 1  xk 1 )( xk 1  xk )

44
Lagrange 插值多项式
仿照前述作法 , 对于求作次数不超过 n 的多项
式 Ln(x), 使满足条件 Ln(xj)=yj(j=0,1,…,n) 的问
题 , 我们可构造插值基函数 lj(x),j=1,2,···,n
它们都是次数小于 n 的多项式 , 且满足条件

则有如下 Lagrange 插值公式:

45
基函数的性质
性质 1
n

性质  j0
l j ( x)  1

2
这是由于通过 (x0,1),(x1,1),…,(xn,1) 的不超过 n
次的多项式是唯一的 .
n

而多项式 P(x)=1 以及 j0


l j ( x)
都是通过上
述的点的不超过 n 次的多项式 , 从而性质 2 成
立 n

性质 3  j j x k
l ( x )  x k
( k  0,1, , n)
j0

46
Lagrange 余项定理
若在 [a,b] 上用 Ln(x) 近似 f(x), 则其截断误差为
Rn(x)=f(x)–Ln(x), 也称为插值余项 .
定理 Lagrange 余项定理设 f (n)(x) 在 [a,b] 连续 ,
f(n+1)(x) 在 (a,b) 内存在 , 节点 a≤x0<x1<…<xn≤b,
Ln(x) 是满足插值条件的插值多项式 , 则对 [a,b]
中任意的 x, 存在 (a,b) 内的 , 使得
( n 1)
f ( )
Rn ( x )  f ( x )  Ln ( x )   n1 ( x )
( n  1)!
其中  n 1 ( x )  ( x  x0 )( x  x1 ) ( x  xn )

47
证 明
当 x 是某个节点时 , 结论显然成立 , 若 x 不是节点
(t  x0 )( t  x1 ) ( t  xn )
设 (t )  f (t )  Ln ( t )  ( f ( x )  Ln ( x ))
( x  x0 )( x  x1 )( x  xn )
显然 (t) 有 n+2 个零点 :x0,x1,…,xn,x. 根据
Rolle 定理 ,(t) 的任意两个零点之间有’ (t)
的一个零点 . 因此 , ’(t) 至少有 n+1 个零点 .
再根据 Rolle 定理 , ’(t) 的任意两个零点之间
有’’ (t) 的一个零点 , 因此 , ’’(t) 至少有 n
个零点 .
48
证 明
依此类推 ,(n+1)(t) 在 (a,b) 内至少有一个零点 ,
记为∈ (a,b), 则有

( n 1) ( n 1) (n  1)!


0 ( )  f ( )  ( f ( x )  Ln ( x ))
( x  x0 )( x  x1 ) ( x  xn )

f ( n 1) ( )
因此Rn ( x )  f ( x )  Ln ( x )  n 1 ( x )
( n  1)!

49
逐次线性插值
设 f(x) 在 x0,x1 处的插值函数为 I01(x), 在 x1,x2 处的插
值函数为 I12(x), 在 x0,x1,x2 处的插值函数为 I012(x).
问题 : 由 I01(x),I12(x) 求 I012(x)?
x  x2 x  x0
考虑函数 f ( x0 )  f ( x2 )
x0  x 2 x 2  x0
该函数在 x0 处取值为 f(x0), 在 x2 处取值为 f(x2)
现将该函数中的 f(x0) 换为 I01(x),f(x2) 换为 I12(x)
显然变化后的函数在 x0 处取值为 f(x0), 在 x2 处取
值为 f(x2).
50
逐次线性插值
x  x2 x  x0
变化后的函数为 x  x I 01 ( x )  x  x I12 ( x )
0 2 2 0
此函数在 x1 处的函数值为
x  x2 x  x0
I 01 ( x1 )  I12 ( x1 )
x0  x 2 x 2  x0
x  x2 x  x0
 f ( x1 )  f ( x1 )  f ( x1 )
x0  x 2 x 2  x0
因此函数 x  x2 I 01 ( x1 )  x  x0 I12 ( x1 )
x0  x 2 x 2  x0
在 x0, x1, x2 处的函数值为 f (x0), f (x1), f (x2)
x  x2 x  x0
因此 , I 012 ( x )  x  x I 01 ( x1 )  x  x I12 ( x1 )
0 2 2 0

51
逐次线性插值
I12 ( x )  I 01 ( x )
I 012 ( x )  I 01 ( x )  ( x  x0 )
x 2  x0
这相当于在 x0 处的函数值为 I01(x), 在 x2 处的
函数值为 I12(x), 然后进行线性插值 , 就得到插
值函数 I012(x).

52
逐次线性插值
如果已知插值函数 I0,1,···,k(x) 以及 I0,1,···,k-1,l(x),
考虑函数 P ( x )  x  xl I x  xk
0 ,1,, k ( x )  I 0 ,1,,k 1,l ( x )
xk  xl xl  xk

容易证明 P(xk)=f(xk),P(xl)=f(xl)
若 i=0,1,···,k-1,P(xi)=f(xi)
因此 P(x)=I0,1,···,k,l(x)

53
Aitken 逐次线性插值公式
x  xl x  xk
I 0 ,1,,k ,l ( x )  I 0 ,1,, k ( x )  I 0 ,1,,k 1, l ( x )
xk  xl xl  x k

I 0 ,1,,k 1,l ( x )  I 0 ,1,,k ( x )


 I 0 ,1,, k ( x )  ( x  xk )
xl  xk

上述公式称为 Aitken 逐次线性插值公式 .

54
Aitken 插值公式算例
已知 f(x)=sh x 的函数值 , 用 Aitken 插值方法
求 f(0.23).

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.03
0.30 0.30452 -0.07
0.50 0.52110 -0.27
0.60 0.63665 -0.37
55
I1  I 0
I 0 ,1  IAitken
0  插值公式算例 ( x  x0 )
x1  x0
0.20134  0.00000
已知
 f(x)=sh x 的函数值 , 用 Aitken 插值方法
0.00000 0.23
求0 f(0.23). 0 .20  0 .00
 .231541

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 -0.07
0.50 0.52110 -0.27
0.60 0.63665 -0.37
56
I2  I0
I 0 , 2  IAitken
0  插值公式算例
( x  x0 )
x 2  x0
0.30452  0.00000
已知
 f(x)=sh x 的函数值 , 用 Aitken 插值方法
0.00000 0.23
求0 f(0.23). 0 .30  0 .00
 .233465

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.233465 -0.07
0.50 0.52110 -0.27
0.60 0.63665 -0.37
57
I3  I 0
I 0 ,3  IAitken
0  插值公式算例( x  x0 )
x3  x0
0.52110  0.00000
已知
 f(x)=sh x 的函数值 , 用 Aitken 插值方法
0.00000 0.23
求0 f(0.23). 0 .50  0 .00
 .239706

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.233465 -0.07
0.50 0.52110 0.239706 -0.27
0.60 0.63665 -0.37
58
I4  I0
I 0 , 4  IAitken
0  插值公式算例
( x  x0 )
x 4  x0
已知
0 .63665  0 .00000
f(x)=sh x 的函数值 , 用 Aitken 插值方法
 0.00000 0.23
求 f(0.23). 0.60  0.00
 0.244049
xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.233465 -0.07
0.50 0.52110 0.239706 -0.27
0.60 0.63665 0.244049 -0.37
59
I 0 , 2  I 0 ,1
I 0 ,1, 2  IAitken
0 ,1 
插值公式算例 ( x  x1 )
x2  x1
0 . 233465  0 . 231541
已知 f(x)=sh x的函数值 , 用 Aitken 插值方法
0.231541 0.03
求 f(0.23). 0.30  0.20
 0.232118

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.233465 0.232118 -0.07
0.50 0.52110 0.239706 -0.27
0.60 0.63665 0.244049 -0.37
60
I 0 ,3  I 0 ,1
I 0 ,1,3  IAitken
0 ,1 
插值公式算例 ( x  x1 )
x3  x1
0 . 239706  0 .231541
已知 f(x)=sh x的函数值 , 用 Aitken 插值方法
0.231541 0.03
求 f(0.23). 0.50  0.20
 0.232358

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.2334650.232118 -0.07
0.50 0.52110 0.2397060.232358 -0.27
0.60 0.63665 0.244049 -0.37
61
I 0 , 4  I 0 ,1
I 0 ,1, 4  IAitken
0 ,1 
插值公式算例 ( x  x1 )
x4  x1
0 . 244049  0 .231541
已知 f(x)=sh x的函数值 , 用 Aitken 插值方法
0.231541 0.03
求 f(0.23). 0.60  0.20
 0.232479

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.2334650.232118 -0.07
0.50 0.52110 0.2397060.232358 -0.27
0.60 0.63665 0.2440490.232479 -0.37
62
I 0 ,1,3  I 0 ,1,2
I 0 ,1,2 ,3  Aitken
I 0 ,1,2  插值公式算例 ( x  x2 )
x3  x2
已知 0 .232358 
f(x)=sh x 的函数值 , 用 Aitken 插值方法 0 .232118
 0.232118 ( 0.07 )
求 f(0.23). 0.50  0.30
 0.232034

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.2334650.232118 -0.07
0.50 0.52110 0.2397060.2323580.232034 -0.27
0.60 0.63665 0.2440490.232479 -0.37
63
I 0 ,1,4  I 0 ,1,2
I 0 ,1,2 ,4  Aitken
I 0 ,1,2  插值公式算例 ( x  x2 )
x4  x2
已知 0 .232479 
f(x)=sh x 的函数值 , 用 Aitken 插值方法 0 .232118
 0.232118 ( 0.07 )
求 f(0.23). 0.60  0.30
 0.232034

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.2334650.232118 -0.07
0.50 0.52110 0.2397060.2323580.232034 -0.27
0.60 0.63665 0.2440490.2324790.232034 -0.37
64
Aitken 插值公式算例
由于两个三次插值的结果相同 , 无需作四次插
值 , 求得 f(0.23)=0.232034.

xi f(xi) x- x i

0.00 0.00000 0.23


0.20 0.20134 0.231541 0.03
0.30 0.30452 0.2334650.232118 -0.07
0.50 0.52110 0.2397060.2323580.232034 -0.27
0.60 0.63665 0.2440490.2324790.232034 -0.37
65
均差及其性质
Lagrange 插值插值公式可以看作直线方程两
点式的推广 . 我们也可以从直线方程的点斜式
f1  f 0
P1 ( x )  f 0  ( x  x0 )
x1  x0
推广到具有 n+1 个插值点 (x0,f0),(x1,f1),…,
(xn,fn) 的情况 .

66
均差及其性质
假设过 (x0,f0),(x1,f1),…,(xn-1,fn-1) 的插值多项式
为 Pn-1(x), 过 (x0,f0),(x1,f1),…,(xn,fn) 的插值多项
式为 Pn(x), 显然 Pn(x)-Pn-1(x) 在 x0,x1,…,xn-1 的
值为零 , 因此可以写为
Pn(x)-Pn-1(x)=an(x-x0)(x-x1)…(x-xn-1).
于是 , 我们可以将 Pn(x) 写为
Pn(x)=a0+ a1 (x-x0)+ a2(x-x0) (x-x1)+…+
an(x-x0)(x-x1)…(x-xn-1).

67
均差及其性质
在 Pn(x)=a0+ a1 (x-x0)+ a2(x-x0) (x-x1)+…+
an(x-x0)(x-x1)…(x-xn-1)
中 , 令 x=x0, 可以得到 P(x0)=a0=f0;
再令 x=x1 得 f1=f0+a1(x1-x0), 因此
a1=(f1-f0)/(x1-x0). f 2  f 0 f1  f 0

类似地可以推出 x2  x0 x1  x0
a2 
x2  x1

68
均差及其性质
定义 称 f [ x , x ]  f ( xx )  xf ( x )
0 k
k 0
为 f (x )
k 0
关于点 x0,xk 的一阶均差 ,
f [ x0 , xk ]  f [ x0 , x1 ] 为 f(x) 的二阶均
f [ x0 , x1 , xk ] 
xk  x1
差.
一般地 , 称

为 f(x) 的 k 阶均差 .
69
均差及其性质
均差由函数值可以表示为

由此可知 , 改变式中的节点次序 , 差商值保持


不变 . 这种性质称为差商的对称性 .
均差和导数的关系 :
f ( n ) ( )
f [ x0 , x1 , , xn ]  ,   [a , b ]
n!

70
Newton 插值公式
根据均差的定义 , 把 x 看成 [a,b] 上的一点 , 可得
f(x)=f(x0)+f[x,x0](x-x0)
f[x,x0]=f[x0,x1]+f[x,x0,x1](x-x1)
将后一个式子代入前一个式子 , 得到
f(x)=f(x0)+f[x0,x1](x-x0)+f[x,x0,x1](x-x0)(x-x1)
再由 f[x,x0,x1]=f[x0,x1,x2]+f[x,x0,x1,x2](x-x2) 得到
f(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)
+ f[x,x0,x1,x2] (x-x0)(x-x1)(x-x2)

71
Newton 插值公式
将这一过程进行下去可以得到
f(x)=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)
+…+ f[x0,x1, …,xn] (x-x0)(x-x1) …(x-xn-1)
+ f[x,x0,x1, …,xn] (x-x0)(x-x1) …(x-xn-1)(x-xn)
=Nn(x)+R(x)

称 Nn(x) 为 Newton 插值多项


式.

72
Nn(x) 满足插值条件 ?
思路一 ( 数学归纳法 , 利用 Lagrange 插值 )
假设过 (x0,f0),…,(xn-1,fn-1) 的插值多项式 Ln-1(x) 与
Nn-1 (x)= f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)
+…+ f[x0,x1, …,xn-1] (x-x0)(x-x1) …(x-xn-2) 恒等
过 (x0,f0),(x1,f1),…,(xn,fn) 的插值多项式为

73
Nn(x) 满足插值条件 ?
Ln(x)–Nn-1 (x) 在 x0,x1,…,xn-1 的值为零 , 因此
Ln(x)–Nn-1 (x)= an(x-x0)(x-x1)…(x-xn-1)
比较两端 xn 的系数得到

因此 Ln ( x )  N n1 ( x )  f [ x0 , x1 , , xn ]( x  x0 )( x  x n1 )


 N n ( x)

74
Nn(x) 满足插值条件 ?
思路二 ( 数学归纳法 , 利用 Neville 逐次线性插值 )
作为作业 .

75
算例 (Lagrange 插值 )
已知 sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274, 用
Lagrange 插值的方法计算 sin0.3367, 并估计误差 .

解 :x0=0.32,x1=0.34,x2=0.36,y0=0.314567,y1=0.333487,y2=0.352274
采用线性插值有两种方法
x  x1 x  x0
(1) sin 0.3367  L01 ( x )  y0 x  x  y1 x  x
0 1 1 0
0.3367  0.34 0.3367  0.32
 0.314567  0.333487
0.32  0.34 0.34  0.32
 0.330365
76
算例 (Lagrange
M
插值 )
误差估计 R01 ( x )  2
| ( x  x0 )( x  x1 ) |
2
其中 M 2  max | f ''( x ) | max sin x  sin x1  0.3335
x0  x  x1 x0  x  x1
1
因此 | R01 ( x ) | 0.33350.01670.0033  0.9210 5
2
x  x2 x  x1
(2) sin 0.3367  L12 ( x )  y1 x  x  y2 x  x
1 2 2 1
0.3367  0.36 0.3367  0.34
 0.333487  0.352274
0.34  0.36 0.32  0.34
 0.330387
类似地可以计算误差
1
| R12 ( x ) | 0.35230.00330.0233  1.3610 5
2
77
算例 (Lagrange 插值 )
抛物插值 sin 0.3367  L012 ( x )
( x  x1 )( x  x2 ) ( x  x0 )( x  x 2 ) ( x  x 0 )( x  x1 )
 y0  y1  y2
( x0  x1 )( x0  x2 ) ( x1  x0 )( x1  x 2 ) ( x 2  x 0 )( x 2  x1 )
0.7689104 3.8910 4 0.551110 4
 0.314567  0.333487  0.352247
0.0008 0.0004 0.0008
 0.330374 M3
R012 ( x )  | ( x  x0 )( x  x1 )( x  x 2 ) |
误差估计 6
M 3  max | f '''( x ) | max cos x  cos x0  0.828
x0  x  x2 x0  x  x2

1
| R012 ( x ) | 0.8280.01670.00330.0233  0.17810 6
6

78
算例 (Newton 插值 )
给出 f(x) 的函数值表 , 求 4 次插值多项式 , 并
由此计算 f(0.596) 的近似值 .
解 : 首先构造均差表
1.11600=(0.57815-0.41075)/(0.55-0.40)
0.40 0.41075
0.55 0.57815 1.11600
0.65 0.69675 1.18600 0.28000
0.80 0.88811 1.27573 0.35893 0.19733
0.90 1.02652 1.38410 0.43348 0.21300 0.03134
1.05 1.25382 1.51533 0.52493 0.22863 0.03126 -0.00012

0.21300=(0.43348-0.35893)/(0.90-0.55)
79
0.40 0.41075
0.55 0.57815 1.11600
0.65 0.69675 1.18600 0.28000
0.80 0.88811 1.27573 0.35893 0.19733
0.90 1.02652 1.38410 0.43348 0.21300 0.03134
1.05 1.25382 1.51533 0.52493 0.22863 0.03126 -0.00012

根据均差表 , 可以求出 4 次插值函数


N4(x)=0.41075+1.116(x-0.4)+0.28(x-0.4)(x-0.55)
+0.17933(x-0.4)(x-0.55)(x-0.65)
+0.03134(x-0.4)(x-0.55)(x-0.65)(x-0.8)
f(0.596)≈N4(0.596)=0.63195

80
截断误差约为
|R4(x)|≈| f [x0,x1,…,x5](x-x0)(x-x1)…(x-x5) |
≤3.63×10–9

81
差分与等距节点插值公式
差分及其性质
等距节点 :x0,x1=x0+h,…,xk=x0+kh, …,xn=x0+nh,
函数值 :fk=f(xk)
f k  f k 1  f k
f(x) 在 xk 处的向前差分
向后差分 f k  f k 1  f k
中心差分  f k  f 1  f 1
k k
2 2

82
高阶差分
一阶向前差分 f k  f k 1  f k
二阶向前差分
 2 f k  f k 1  f k  ( f k  2  f k 1 )  ( f k 1  f k )
 f k  2  2 f k 1  f k
m 阶向前差分  m f k   m 1 f k 1   m 1 f k
m 阶向后差分  m f k   m 1 f k 1   m 1 f k

83
差分的算子表示
引入不变算子 I 和移位算子 E Ifk=fk, Efk=fk+1
则∆ fk=fk+1-fk=Efk-Ifk=(E-I )fk, 于是 ∆ =E-I
1 1

类似的   I  E 1 ,   E2 E 2
n
因此  n f k  ( E  I )n f k   n  n j
 (1)  j  E f k
j
j 0
n
 n
  ( 1)   f n  k  j
j
j 0  j
这是用函数值计算 n 阶向前差分的计算公式

84
差分的算子表示
类似得到函数值计算 n 阶向后差分的计算公式
n
 n  jn
n 1 n
 fk  ( I  E ) fk   (1) n j
 j E
 
fk
j 0
n
 n
  ( 1)   f k  j  n
j
j 0  j
差分表示函数值
n n
  n j  n j
fn k  E fk  ( I   ) fk      
n n
 fk    j   fk
 j  0  j   j 0

85
均差和差分的关系
f k 1  f k f k
f [ xk , xk 1 ]  
xk 1  xk h
f [ xk 1 , xk  2 ]  f [ xk , xk 1 ] 1 2
f [ xk , xk 1 , xk 1 ]   2  fk
xk  2  xk 2h
1 1 m
一般的, f [ xk , xk 1 , , xk  m ]   f k ( m  1, 2, , n)
m! h m

1 1 m
类似, f [ xk , xk 1 , , xk  m ]   f k ( m  1, 2, , n)
m! h m

根据导数和均差的关系 , 可以得到 n f k  hn f ( n ) ( )

86
等距节点插值公式
Newton 均差插值多项式
Nn(x)= f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)
+…+ f[x0,x1, …,xn] (x-x0)(x-x1) …(x-xn-1)
令 x=x0+th, 则 x-x0=th,x-x1=(t-1)h,x-xk=(t-k)h,
因此 t ( t  1) 2
N n ( x0  th)  f 0  t f 0   f0
2
t ( t  1) ( t  n  1) n
   f0
n!
这称为 Newton 向前差分插值公式 ( 一般取
0≤t≤1).
87
等距节点插值公式
Newton 向前差分插值公式的余项
t ( t  1) ( t  n) n 1 ( n 1)
Rn ( x0  th)  h f ( ),   ( x0 , xn )
( n  1)!
Newton 向后差分插值公式 ( 一般 t < 0):
t ( t  1) 2
N n ( xn  th)  f n  t f n   fn
2
t ( t  1) ( t  n  1) n
   fn
n!

88
k Bk f(Bk) ∆fk ∆2fk ∆3 f k
0 4000 1.38 0.10 算例
1 4500 1.48 0.10 0
2 5000 1.58 0.11 0.01 0.01 左边的表给出了一个函
3 5500 1.69 0.12 0.01 0 数在 [4000,10500] 上等距
4 6000 1.81 0.13 0.01 0
5 6500 1.94 0.16 0.03 0.02
节点的函数值 ( 步长
6 7000 2.10 0.18 0.02 -0.01 500), 用插值方法求
7 7500 2.28 0.22 0.04 0.02 f(5200).
8 8000 2.50 0.26 0.04 0
9 8500 2.76 0.30 0.04 0 解 : 分别给出一 , 二 , 三
10 9000 3.06 0.35 0.05 0.01 阶差分 . 发现三阶差分近
11 9500 3.41 0.42 0.07 0.02
12 10000 3.83 0.50 0.08 0.01
似于零 . 因此计算时只需
13 10500 4.33 0.60 0.10 0.02 用到二阶差分 .
14 11000 4.93

89
算 k Bk f(Bk) ∆fk ∆2fk ∆3fk
0 4000 1.38 0.10
1 4500 1.48 0.10 0
例 2 5000 1.58 0.11 0.01 0.01
3 5500 1.69 0.12 0.01 0
计算 f(5200) 时 , 取 B0=5000,f0=1.58,∆f0=0.11,
∆2f0=0.01,h=500,B=5200,t=0.4,
根据 Newton 向前差分插值公式
f(5200)≈1.58+0.11•0.4+0.01•0.4(0.4-1)/2=1.62

90
Hermite 插值
在某些问题中 , 为了保证插值函数能更好反映
原来的函数 , 不但要求”过点” , 即两者在节
点上有相同的函数值 , 而且要求“相切” .
即在节点上还有相同的导数值 , 这类插值称作
Hermite 插值 .
我们主要考虑在所有节点上的函数值与导数值
都已知的情况 .

91
Hermite 插值
设在节点 a≤x0<x1<…<xn≤b 上 f(xj)=yj,mj=f’(xj)
(j=0,1,···,n), 求多项式 H(x), 满足条件
H(xj)=yj,H’(xj)=mj(j=0,1,···,n)
一共给出了 2n+2 个已知条件 , 可以唯一确定
一个次数不超过 2n+1 的多项式 .
H2n+1(x)=a0+a1x+···+a2n+1x2n+1

92
已知 x0,···,x
···, n 处有 y0,···,y
···, n 和 m0,···,m ···, n, 求
H2n+1(x) 满足 H2n+1(xi) = yi , H’2n+1(xi) = mi 。
n
解:设 H 2n 1 ( x )   [ y j j ( x )  m j  j ( x )]
j0

 0, j  k
 j ( xk )   jk  ,  j ( xk )  0
 1, j  k

 0, j  k
 j ( xk )  0,  j ( xk )   jk  ,
 1, j  k

93
j(x) 的确定
 0, j  k
 j ( xk )  0,  j ( xk )   jk  ,
 1, j  k
根据上面的条件 , 对于 k=0,…,j-1,j+1,…,n 有
j(xk)=j’(xk)=0, 因此 xk 是 j(x) 的二重根 ,
另外 , j(xj)=0, 所以 j(x) 有因式
(x-xj)(x-x0)2…(x-xj-1)2(x-xj+1)2…(x-xn)2

根据 l ( x )  ( x  x0 ) ( x  x j 1 )( x  x j 1 ) ( x  xn )
j
( x j  x0 ) ( x j  x j 1 )( x j  x j 1 ) ( x j  xn )
也可以认为 j(x) 有因式 (x-xj)lj2(x)

94
j(x) 的确定

j(x) 有因式 (x-xj)lj2(x), 这已经是一个 2n+1 次的


多项式 ,
因此可以设 j(x)=A(x-xj)lj2(x)
由 1=j’ (xj)=Alj2(xj)=A, 得到
j(x)=(x-xj)lj2(x)

95
j(x) 的确定
 0, j  k
 j ( xk )   jk  ,  j ( xk )  0
 1, j  k
根据上面的条件 , 对于 k=0,…,j–1,j+1,…,n 有
j(xk)=j’(xk)=0, 因此 xk 是 j(x) 的二重根 , 所
以 j(x) 有因式 lj2(x). 设  j(x)=(ax+b)lj2(x), 有
1=j(xj)=(axj+b)lj2(xj)=axj+b
0=j’(xj)=alj2(xj)+2lj(xj)lj’(xj)(axj+b)=a+2lj’(xj)
从而得到 a= –2lj’(xj),b=1+2
n x1jlj’(xj2)
 j ( x )  (1  2( x  x j )  )l j ( x )
k 0 x j  xk
k j

96
Hermite 插值的唯一性
已知 x0 , …, xn 处有 y0 , …, yn 和 m0 ,
…,mn , 求 H2n+1(x) 满足 H2n+1(xi) = yi ,
H’
问题2n+1:(x i) = mi 。
这样的插值多项式是否唯一 ?
解答 : 板书 .

97
插值余项
利用和 Lagrange 插值类似的思想 , 可以得到
Hermite 插值多项式的余项
f ( 2 n  2 ) ( ) 2
R( x )  f ( x )  H 2 n 1 ( x )   n 1 ( x )
( 2n  2)!
其中
 n 1 ( x )  ( x  x0 )( x  x1 ) ( x  xn )

98
两点三次 Hermite 插值
如果是两个点的 Hermite 插值 , 则插值函数是
三次的 . 若要求
H(xk)=yk,H(xk+1)=yk+1,H’(xk)=mk,H’ (xk+1)=mk+1,
则 H(x)=ykk(x)+yk+1k+1(x)+mkk(x)+mk+1k+1(x)
其中
x  xk x  xk 1 2 x  xk 1 2
 k ( x )  (1  2 )( )  k ( x )  ( x  xk )( )
xk 1  xk xk  xk 1 xk  xk 1
x  xk 1 x  xk 2  ( x )  ( x  x )( x  xk )2
 k 1 ( x )  (1  2 )( ) k 1 k 1
x k 1  x k
xk  xk 1 xk 1  xk

99
利用均差作 Hermite 插值 ( 补
充 )
上面的插值方法比较复杂 , 下面介绍用均差进
行 Hermite 插值的简单方法
问题 : 求三次多项式 H(x) 满足
H(xk)=f (xk),H(xk+1)=f (xk+1),
H'(xk)=f '(xk),H'(xk+1)=f '(xk+1).
解 : 函数 P1(x)=f (xk)+f ’(xk) (x-xk) 显然满足
P1(xk)=f (xk),P1’(xk)=f ’(xk).

100
利用均差作 Hermite 插值 ( 补
充 )
我们先求函数 P2(x)( 不超过二次 ), 使得
P2(xk)=f (xk),P2’(xk)= f ’(xk), 且 P2(xk+1)= f (xk+1).
由于 P2(xk)=P1(xk), P2’(xk)=P1’(xk),
因此 P2(x) - P1(x) 有因式 (x-xk)2,
设 P2(x)-P1(x)= A(x-xk)2. 令 x=xk+1 得
f (xk+1)=f (xk)+f ’(xk) (xk+1-xk)=A(xk+1-xk)2
f ( x k 1 )  f ( x k ) f '( xk )
于是 A 
2
( x k 1  x k ) xk 1  xk

101
利用均差作 Hermite 插值 ( 补
因此 , 充 )
P ( x )  f ( x )  f '( x )( x  x )
2 k k k
f ( xk 1 )  f ( xk ) f '( xk ) 2
[  ]( x  xk )
( xk 1  xk ) 2
xk 1  xk
如果令 f ’(xk)=f [xk,xk], 则上式可记为
f [ xk , xk 1 ]  f [ xk , x k ]
P2 ( x )  f ( xk )  f [ xk , x k ]( x  x k )  ( x  xk )2
xk 1  xk
再令 f [ xk , xk 1 ]  f [ xk , xk ]
f [ xk , xk , xk 1 ] 
xk 1  xk
P2 ( x )  f ( xk )  f [ xk , xk ]( x  xk )  f [ xk , xk , xk 1 ]( x  xk ) 2

102
利用均差作 Hermite 插值 ( 补
充)
令 z0=xk,z1=xk,z2=xk+1, 上式子可以记为
P2(x) = f (z0)+f [z0,z1](x-z0)+f [z0,z1,z2](x-z0)(x-z1).
该式与 Newton 插值多项式的形式一致 .

103
利用均差作 Hermite 插值 ( 补
充)
求三次多项式 H(x) 满足
H(xk) = f (xk), H(xk+1) = f (xk+1),
H’(xk)= f ’(xk), H’ (xk+1) = f ’(xk+1).

显然 H(xk)=P2(xk), H’(xk)=P2’(xk), H(xk+1)=P2(xk+1)


因此可以设 H(x)=P2(x)+a3(x-xk)2(x-xk+1)

104
利用均差作 Hermite 插值 ( 补
充)
H(x) = P2(x)+a3(x-xk)2(x-xk+1)
令 z0=z1=xk,z2=z3=xk+1, 上式子可以记为
H(x)=f(z0)+f [z0,z1](x-z0)+f [z0,z1,z2](x-z0)(x-z1)
+a3(x-z0)(x-z1) (x-z2)
我们可以猜想上述结果与 Newton 插值多项式
一致 , 即有 a3=f [z0, z1, z2, z3]=f [xk, xk, xk+1, xk+1].

105
f [xk, xk, xk+1, xk+1]?
首先的问题是 f [xk, xk, xk+1, xk+1] 如何计算 ?
按照均差的定义 , 应该有
f [ xk , xk 1 , xk 1 ]  f [ xk , xk , xk 1 ]
f [ xk , xk , xk 1 , xk 1 ] 
xk 1  xk
f[xk, xk, xk+1] 我们已经得到 , f[xk, xk+1, xk+1] 可以
类似计算 .
f [ xk 1 , xk 1 ]  f [ xk , xk 1 ]

f [ xk , xk 1 , xk 1 ] xk 1  xk
f '( xk 1 )  f [ xk , xk 1 ]

xk 1  xk

106
a3=f [xk, xk, xk+1, xk+1]?
H(x)=f (z0)+f [z0, z1](x-z0)+f [z0, z1, z2](x-z0)(x-z1)
+a3(x-z0)(x-z1) (x-z2)
=f (xk)+f [xk, xk](x-xk)+f [xk, xk, xk+1](x-xk)2
+a3(x-xk)2(x-xk+1)
我们利用 H(x) 在 xk 的函数值 , 导数值以及
xk+1 处的函数值得到了上述结果 , H(x) 在 xk+1
处的导数值可以用来确定 a3.
我们求出的 a3 与前面定义的 f [xk, xk, xk+1, xk+1]
是相等的 ( 过程略 ).

107
利用均差作 Hermite 插值 ( 补
充)
根据上面的推导 , 有下面的结论
H(x)= f (z0)+f [z0, z1](x-z0)+f [z0, z1, z2](x-z0)(x-z1)
+ f[z0,z1,z2,z3](x-z0)(x-z1) (x-z2)

即进行 Hermite 插值时 , 我们可以采用


Newton 插值公式 . 其中的均差计算在遇到相
同的节点时用导数代替 .

108
利用均差作 Hermite 插值 ( 算
例)
求一次数最低的多项式 H(x), 使得
H(–1)= –1, H’(–1)=1, H(1)= –3, H’(1)= –3,
H”(1)=14, H(2)=29.

解 : 一共 6 个已知条件 , 可以唯一确定一个不
超过 5 次的多项式

109
利用均差作 Hermite 插值 ( 算
例)
H (x 一阶 首先计算均差表
x 均差
)
f [1, 1]  f '( 1)  1
-1 -1
-1 -1 f [1]  f [1] 3  ( 1)
1 f [1,1]    1
1  ( 1) 1  ( 1)
1 -3
-1 f [1,1]  f '(1)  3
1 -3
1 -3 -3 f [2]  f [1] 29  ( 3)
f [1, 2]    32
-3 2 1 2 1
2 29
32
110
利用均差作 Hermite 插值 ( 算
例)
H(x 一阶 二阶 f [1,1]  f [1, 1]
x 均差 均差 f [1, 1,1] 
) 1  ( 1)
1  1
-1 -1   1
1  ( 1)
-1 -1 1
1 -3 -1 f [1,1,1] 
f [1,1]  f [1,1]
-1 1  ( 1)
1 -3 -3 3  ( 1)
-1   1
1 -3 -3 1  ( 1)
2 29 32

111
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 f "(1) 14
x f [1,1,1]   7
) 均差 均差 2 2

-1 -1 一般的 ,n+1 个相同节点


x0 的 n 阶均差为 f ( n ) ( x )
-1 -1 1 0

1 -3 -1 -1 n!

1 -3 -3 -1 f [1, 2]  f [1,1]
f [1,1, 2] 
1 -3 -3 2 1
7 32  ( 3)
2 29 32 
2 1
 35
35
112
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 三阶 f [1, 1,1,1]
x 均差 均差 均差 f [1,1,1]  f [ 1, 1,1]
) 
1  ( 1)
-1 -1 
1  ( 1)
0
-1 -1 1 1  ( 1)

1 -3 -1 -1 f [1,1,1,1]
1 -3 -3 -1 f [1,1,1]  f [1,1,1]

0 1  ( 1)
1 -3 -3 7 7  ( 1)
 4
2 29 32 35 4 1  ( 1)

113
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 三阶
x 均差 均差 均差
)
-1 -1 f [1,1,1, 2]
f [1,1, 2]  f [1,1,1]
-1 -1 1 
2 1
35  7
1 -3 -1 -1   28
2 1
1 -3 -3 -1 0
1 -3 -3 7 4
2 29 32 35
28
114
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 三阶 四阶
x 均差 均差 均差 均差
)
-1 -1 f [1, 1,1,1,1]
f [1,1,1,1]  f [ 1, 1,1,1]
-1 -1 1 
1  ( 1)
1 -3 -1 -1 40
 2
1 -3 -3 -1 0 1  ( 1)
1 -3 -3 7 4
2 29 32 35 28 2

115
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 三阶 四阶
x 均差 均差 均差 均差
)
-1 -1 f [1,1,1,1, 2]
f [1,1,1, 2]  f [ 1,1,1,1]
-1 -1 1 
2  ( 1)
1 -3 -1 -1 28  4
 8
1 -3 -3 -1 0 2  ( 1)
1 -3 -3 7 4 2
2 29 32 35 28
8
116
利用均差作 Hermite 插值 ( 算
例)
H( x 一阶 二阶 三阶 四阶 五阶
x 均差 均差 均差 均差 均差
)
-1 -1 f [1, 1,1,1,1, 2]
f [1,1,1,1, 2]  f [ 1, 1,1,1,1]
-1 -1 1 
2  ( 1)
1 -3 -1 -1 82
 2
1 -3 -3 -1 02  ( 1)
1 -3 -3 7 4 2
2 29 32 35 28 8
2
117
2
我们 H ( x )  1  1( x  1)  ( 1)( x  1)
2 2 2
得到 0( x  1) ( x  1)  2( x  1) ( x  1)
2 3
2( x  1) ( x  1)
5 3 2
 2x  4x  x  x  1
-1 -1
-1 -1 1
1 -3 -1 -1
1 -3 -3 -1 0
1 -3 -3 7 4 2
2 29 32 35 28 8 2
118
例 5: 设 x0x1 x2, 已知 f(x0), f(x1), f(x2) 和 f
’(x1), 求多项式 P(x) 满足 P(xi) = f (xi),i =
0,1,2, 且 P’(x1) = f ’(x1), 并估计误差。
解:首先, P 的阶数 =3
模仿 Lagrange 多项式的思想,设
2
P3 ( x )   f ( x ) ( x ) 
i 0
i i f '( x1 ) 1 ( x )

其中  i(xj) = ij , i’(x1) = 0,(xi) = 0,’1(x1) =


1

119
0(x)
(x1)=(x2)=0, 因此 ,(x) 有根
x1又
,x2, 0’(x1) = 0  x1 是重根。
2
因此  0 ( x )  C 0 ( x  x1 ( x  x2 )
)
又 : 0(x0) = 1  C0

2(x) 与 0(x) 完全类似。

120
1(x) 有根 x0, x2 
1 ( x )  ( Ax  B )( x  x0 )( x  x2 )
由余下条件  1(x1) = 1 和  1’(x1) = 0 可解。
1(x) 有根 x0, x1, x2 
1 ( x )  C1 ( x  x0 )( x  x1 )( x  x2 )
又 ,’(x1) = 1  C1 可解 .

与 Lagrange 分
析完全类似

121
方法 2
利用均差的方法也可以构造出满足题中条件
的多项式——作业

122
求 Hermite 多项式的基本步骤
( 基函数方法 )
 写出相应于条件的基函数的组合形式 ;
 对每一个基函数找出尽可能多的条件给出的
根;
 根据多项式的总阶数和根的个数写出表达
式;
 根据尚未利用的条件解出表达式中的待定系

 ; 最后完整写出 H(x).

123
求 Hermite 多项式的基本步骤
( 均差方法 )
 计算均差表
对于不同的节点 , 直接按照定义计算 ,
对于相同的节点 , 用导数代替 .
 根据 Newton 插值公式计算插值多项式

124
分段低次插值
例 : 在 [-5,5] 上考察函数 f(x)=1/(1+x2) 的
Lagrange 插值函数 , 节点取为等距的 .
2.5
Ln(x) 
 f (x)
2

1.5

0.5 n 越大,
0
端点附近抖动
-0.5
越大,称为
Runge 现象
-5 -4 -3 -2 -1 0 1 2 3 4 5

分段低次插值 125
分段线性插值
所谓分段线性插值 , 就是将插值点用折线段相
连来逼近被插值的函数 .
设已知节点 a≤x0<x1<…<xn≤b 上的函数值 f0,f1,
…,fn, 记 hk=xk+1–xk,h=max hk. 求一折线函数
I h ( x )  C [a , b ]
Ih(x) 满足 :(1)
(2)Ih(xk)=fk(k=0,1, …,n)
(3)Ih(x) 在每个区间 [xk,xk+1] 上是线性函数
满足上述条件的 Ih(x) 称为分段线性插值函
数.
126
分段线性插值
显然 , Ih(x) 在每个小区间 [xk,xk+1] 上可以表示为
x  xk 1 x  xk
Ih ( x)  fk  f k 1 ( x k  x  x k 1 )
xk  xk 1 xk 1  xk
n
Ih(x) 也可以用插值基函数表示 I h ( x )   f j l j ( x)
j 0
其中 lj(x) 满足 l
xx j( x k)=  jk
 j 1
 x  x , x j 1  x  x j
 j j 1

l j ( x)   x  x j
 x  x , x j  x  x j 1
 j 1 j
 0 x  [a , b], x  [ x j 1 , x j 1 ]
127
分段线性插值的收敛性
类似于 Lagrange 插值基函数
n , 分段线性插值
基函数的和也是 1, 即  l j ( x)  1
j 0

当 x 位于区间 [xk,xk+1] 时 , 基函数中只有


lk(x),lk+1(x) 不为零 , 此时有
1= lk(x)+lk+1(x), f(x)= (lk(x)+lk+1(x))f(x)
另一方面 , 由于基函数中只有 lk(x),lk+1(x) 不为
零 , Ih(x) =fklk(x)+fk+1lk+1(x)

128
分段线性插值的收敛性
f(x)= (lk(x)+lk+1(x))f(x) Ih(x) =fklk(x)+fk+1lk+1(x)
因此 |f(x)-Ih(x)|=|lk(x)(f(x)-fk)+lk+1(x)(f(x)-fk+1)|
≤lk(x)|(f(x)-fk)|+lk+1(x)|(f(x)-fk+1)|
≤lk(x) (hk)+lk+1(x)ω(hk) ≤ (h)
这里 (h) 称为 f(x) 在区间 [a,b] 的连续模 .
(|u-v| ≤ h, 则有 |f(u)-f(v)| ≤  (h))
如果 f(x) 是区间 [a,b] 上的连续函数 , 则
h→0 时 (h)→0. 因此 Ih(x) →f(x).
129
分段三次 Hermite 插值简介
已知 xk,fk,fk’ (k=0,1,…,n), 求 Ih(x), 使得
1) Ih(x) 一阶导数连续
2) Ih(xk)=fk,Ih’(xk)=f ’k(k=0,1,…,n)
3)Ih(x) 在每个区间 [xk,xk+1] 上是三次函数
类似于分段线性插值 , 可以写出分段三次埃尔
米特插值函数 , 而且当区间长度的最大值 h 趋
于零时 , Ih(x) 一致收敛到 f(x).

130
三次样条插值
定义设 a≤x0<x1<…<xn≤b, 三次样条函数

即在每个 [xi,xi+1]
上为三次多项式 . 若它同时还满足 S(xi)=f(x
注:三次样条与分段 Hermite 插值的根本区别在于 i)
S(x)
自身光滑,不需要知道 f 的导数值(除了在 2 个端点可
(i=0,1,…,n), 则称为 f 的三次样条插值函数
能需要);而 Hermite 插值依赖于 f 在所有插值点的导数
.
值。
f(x)
H(x)
S(x)
131
三弯矩法
在 [xj,xj+1] 上 , 记 hj=xj+1-xj , 在此区间内 ,S”(x) 为
1 次多项式 , 记 S”(xj)=Mj,S”(xj+1)=Mj+1, 则
x j 1  x x  xj
S "( x )  M j
hj
 M j 1
hj
根据已知条件
积分 2 次,可得 S’(x) 和 S(xj)=yj 以及
S(x) ( x j 1  x )2 ( x  x j )2 S(xj+1)=yj+1 可以
S '( x )   M j  M j 1  Aj
2h j
3
2h j
3
求出常数 Aj,Bj.
( x j 1  x ) (x  xj )
S( x)  M j  M j 1  Aj x  B j
6h j 6h j
y j 1  y j M j 1  M j
Aj   hj
hj 6
x j 1 y j  x j y j 1 x j M j 1  x j 1 M j
Bj   hj
hj 6
132
下面解决 Mj :
利用 S’ 在 xj 的连续性
( x j
 x)2 ( x  xj1 )2 Mj  Mj1
[xj1, xj ]: S ’(x) =  Mj1
[j]  Mj  f [xj1 , xj ]  hj-1
2hj-1 2hj-1 6
1  x)  x j )2 Mj1  Mj
2
( x ( x

[xj , xj+1]: S ’(x) = Mj
[j+1] j
 Mj1  f [x j , x j1 ]  hj
2hj 2hj 6
h j 1 hj 1 y j  y j 1
因此 , S '( x j  0)  M j 1  Mj 
6 3 h j 1
h j 1 hj y j 1  y j
S '( x j  0)   M j 1  M j 
6 3 hj
利用 S’(xj-0)=S’(xj+0), 可以得到关于 Mj-
1,Mj,Mj+1  j M j 1  2 M j   j M j 1  d j ( j  1, 2, , n  1)
的线性方程 hj h j 1
其中 ,   ,  ,d  6 f [x , x , x ]
j j j j 1 j j 1
hj 1  h j h j 1  h j
133
一共 n+1 个未知数 ,n-1 个方程 , 还需要两个
条件
第一类边界条件 ,S’(x0)=f0’,S’(xn)=fn’.
此时容易得到 2 M 0  M1  6 ( f [ x0 , x1 ]  f 0)
h0
6
M n1  2 M n  ( f n  f [ xn 1 , xn ])
hn1
最终得到如下形式的方程组
2 1 0  0 0 0   M0   d0 
 1 2 1  0 0 0   M1   d1 
0 2 2  0 0 0   M2   d2 
            
0 0 0  2 n1 0   M n 2   d n 2 
0 0 0  n1 2 n1   M n1   d n1 
 0 0 0  0 1 2   M n   d n 
134
追赶法求解三对角方程组
上面的方程组可以利用追赶法求解 (P185).
对于下面形式的方程组
 b1 c1   x1   f1 
 a2 b2 c2   x2   f 2 
       
 an 1 bn 1 cn 1   xn 1   f n 1 
 an bn   xn   f n 

将系数矩阵进行三角分解

135
 b1 c1 
 a2 b2 c2 
  
 an1 bn 1 cn1 
 an bn 
 1   1 1 
 r2  2  1 
 r3    
  n1  1  n1 
 rn  n   1 
比较两边对应元素可以得到
b1  1 , c1  11 , ai  ri ( i  2, , n),
bi  ri  i 1   i ( i  2, , n), ci   i  i ( i  2, n  1).

136
b1  1 , c1  11 , ai  ri ( i  2, , n),
bi  ri  i 1   i ( i  2, , n), ci   i  i ( i  2, n  1).
因此有
ci ci ci
i    ( i  2, , n  1)
 i bi  ri  i 1 bi  ai  i 1
又   c1  c1
1
1 b1
因此所有 i 的可递推求出 , 进一步可求出
 i,ri.

137
在得到系数矩阵的分解后 , 原方程组转化为
LUx=f.  1   y1   f1 
 r2 2   y2   f 2 
 r3       
先求解 Ly=f   n1   yn1   f n1 
 rn  n   yn   f n 

显然有 y1=f1/1,
yi=(fi-riyi-1)/i=(fi-iyi-1)/(bi-aii-1)(i=2,···,n)

138
再求解 Ux=y,
 1 1   x1   y1 
 1   x 2   y2 
       
 1  n1   xn1   yn 1 
 1   xn   yn 

显然有 xn=yn, xi=yi-bixi+1(i=n-1,···,1)

139
插值法小结
 Lagrange: 给出 y0 … yn, 选基函数 li(x),
其次数为节点数 – 1.
 Newton:Nn(x)  Ln(x), 只是形式不同 ; 节点
等距或渐增节点时方便处理 .
 Hermite: 给出 yi 及 yi ’, 选基函数或用均
差方法
 样条 : 分段低次 , 自身光滑 , f 的导数只
在边界给出。

140
Matlab 中的插值命令
一元插值格式 : interp1(x,y,x1,method)
其中 : x: 插值节点 ,y: 对应函数值
x1: 要计算函数值的点
method: 选用的插值方法
’nearst’:0 次插值 ,
’linear’: 分段线性 ( 缺省时 ),
’spline’: 样条 ,
’pchip’ 分段三次 ( 保证一阶导数连续 )
141
Matlab 中的插值命令
二元插值格式 : interp2(x,y,z,x1,y1,method)
缺省时的方法为双线性

142
第三章
函数逼近与计算
曲线拟合 (P68)
仍然是已知 x1 … xm ; y1 … ym, 求一个简单
易算的近似函数 P(x)  f(x) 。
但是 ① m 很大;
② yi 本身是测量值 , 不准确 , 即 yi  f
(xi)
这时没必要取 P(xi) = yi , 而要使 P(xi)  yi
总体上尽可能小。
常 使 最小
见 使 最小

法 使 最小 ( 最小二乘法 )
144
最小二乘拟合多项式
确定多项式
,对于一组数据 (xi, yi)
(i = 1, 2, …, m) 使得
E 实际上是
达到极小,这里 a0, am 1, …,
n a<<
n 的多元函数,即
m。

 ( a 0 , a1 , ... , a n )   a 0  a1 x i  ...  a n x in  y i
i 1
 2

在 E 的极值点应有

145
m

E (a0 , a1 , L , an )   i i
[ P
i 1
( x )  y ]2

m n
 2 [ a j xij  yi ] xik
i 1 j0
n m m
 2{ [(  xij  k )a j ]   yi xik }
j0 i 1 i 1
m m
记 bk   i
x k
dk   i i
y x k

i 1 i 1

得法方程组

146
最小二乘算例 (P70 例 9)
在某化学反应里 , 根据实验所得生成物的浓度和时间
关系如下表 , 求浓度 y 与时间 t 的拟合曲线 y=F(t).

时间 t 1 2 3 4 5 6 7
浓度 y 4.00 6.40 8.00 8.80 9.22 9.50 9.70
8 9 10 11 12 13 14 15 16
9.86 10.00 10.20 10.32 10.42 10.50 10.55 10.58 10.60

147
将数据在图形上画出 .
可以发现数据有一定的规律性 .
但是函数的类型我们无法确定 .

148
方案一 t
y  F (t ) 
at  b
m
ti
使得 
2
求 a 和 b  ( a , b )  (  y i )
i 1 at i  b
直接求解很困难 最小。
线性化
令 Y=1/y,T=1/t, 则有 Y≈a+bT, 成为线性问题
由 (ti,yi) 容易求得 (Ti,Yi), 然后可解出 a,b.

149
m m m

 i
T
i 1
0
 16 ,  i
T 1
 3
i 1
.38073,  i  1.58435,
T 2

i 1
m m

 ii
Y T
i 1
0
 1. 83291,  i i  0.52886.
Y T 1

i 1

得到法方程组为  16a  3.38073b  1.83291


3.38073a  1.58435b  0.52886
解得
 a  0.0801736
b  0.1627258
得到 y  t
0.0801736t  0.1627258

150
下面是所得的函数的图形

151
b
方案二 y  F ( t )  ae t

线性化
对函数取对数得到 ,ln y≈lna+b/t
令 Y=ln y,T=1/t,A=lna, 则有 Y≈A+bT, 成为线
性问题
由 (ti,yi) 容易求得 (Ti,Yi), 然后可解出 a,b.

152
m m m

 i
T
i 1
0
 16 ,  i
T 1
 3 .
i 1
38073,  i  1.58435,
T 2

i 1
m m

 ii
Y T
i 1
0
 35 .26017 ,  i i  6.53099.
Y T 1

i 1

得到法方程组为  16 A  3.38073b  35.2602


3.38073 A  1.58435b  6.53099
解得
 A  2.4270
b  1.0567  a  e A  11.3253
b  1.0567
得到 1.0567 / t
y  11.3253e

153
下面是所得的函数的图形

154
从图形上可以看出 , 第二个函数拟合的效果较
好.
我们可以比较两者的均方误差 .

m m

 i )  1.25,
(
i 1
(1) 2
 i )  0.34
(
i 1
( 2) 2

第二个函数的均方误差小一些 .

155
离散 已知 x … x ; y … y , 求一个简单易算
1 m 1 m
问题
的近似函数 P(x)  f(x) 使得
连续 已知 [a, b] 上定义的 最小 . f(x), 求一个简单
问题
易算的近似函数 P(x) 使得
最常见的近似函数是多项式 最小 .
P(x)=a0+a1x+a2x2+···+anxn
有时我们会考虑其它类型的函数

156
线性无关函数族
考虑函数 1+cos2x+2sin2x 以及 2cos2x+3sin2x
可以发现这两个函数是相等的 .
原因 :cos2x+sin2x = 1
即 1,sin2x,cos2x 是线性相关的 .
线性无关函数族 {0(x), 1(x), … , n(x), … }
满足条件 : 其中任意函数的线性组合 a00(x)
+a11(x)+… +ann(x)=0 对任意 x[a, b] 成立
当且仅当 a0= a1=… =an=0 。 157
考虑一般的线性无关函数族 ={0(x), 1(x), … ,
n(x), … } ,其有限项的线性组合

常见广义多项式:
称为广义多项式 .
 { j(x) = x j } 对应代数多项式
 { j(x) = cos jx },{j(x) = sin jx }  {j(x),
j(x) } 对应三角多项式
 { j(x) = e kj x,ki  kj} 对应指数多项式

158
权函数
① 离散型 (P69)
根据一系列离散点
m
拟合时 , 在每一误差前乘
一正数
 
i 1
wi wii , 即
[ P( x )  yi ]
2
误差函数 E ,这
个 wi 就称作权 , 反映该点的重要程度。
② 连续型 (P50)
在 [a, b] 上用广义多项式 P(x) 拟合连续函
数 f(x) 时 , 定义权函数  (x) C[a, b], 即
误差函数 E= 权函数必须
 (x) 满足 : 非负 , 可积 , 且在 [a, b] 的任何子  ( x )  0

区间上 . 159
广义最小二乘拟合
① 离散型 (P69)
在点集 { x1 … xm } 上测得 { y1 … ym }, 在一组权
系数 { w1n… wm } 下求广义多项式 P(x) 使得
  wi [P( xi )  yi ]2
误差函数i1 E 最小 .
② 连续型 (P53)
已知 y(x) C[a, b] 以及权函数  (x), 求广义
b
多项式 P(x) 使得误差函数 a E =
 ( x )[ P ( x )  y( x )]
2
dx

最小 .

160
离散型广义最小二乘问题求解
(P69)
为求误差函数 E 的最小值 , 令其对
ak(k=0,1,···,n) 的导数为 0.

m n
 2 wi [ a j j ( xi )  yi ] k ( xi )
i 1 j0

 n m m

 2   [a j  wi j ( xi ) k ( xi )]   wi yi k ( xi ) 
 j0 i 1 i 1 

161
离散型广义最小二乘问题求解
n m m
因此有  [a j  wi j ( xi ) k ( xi )]   wi yi k ( xi )
j 0 i 1 i 1
m

引进记号 ( j ,  k )  w  ( x ) ( x )
i 1
m
i j i k i
m
( f ,k )   w f ( x ) ( x )   w y 
i i k i i i k ( xi )
i 1 i 1
n
则上面的方程可以化为  ( j ,  k )a j  ( f ,  k )
我们得到法方程组 j0

 ( 0 ,  0 ) ( 0 , 1 )  ( 0 ,  n )   a0   ( f ,  0 ) 
 (1 ,  0 ) (1 , 1 )  (1 ,  n )   a1    ( f , 1 ) 
         
 ( n ,  0 ) ( n , 1 )  ( n ,  n )   an   ( f ,  n ) 

162
连续型广义最小二乘问题求解
(P53)
为求误差函数 E 的最小值 , 令其对
ak(k=0,1,···,n) 的导数为 0.

163
连续型广义最小二乘问题求解
因此有
b

引进记号 ( j ,  k )    ( x ) ( x ) ( x )dx
a
j k
b
( f ,k )    ( x ) f ( x ) ( x )dx
k
a
n
则上面的方程可以化为  ( j ,  k )a j  ( f ,  k )
我们得到法方程组 j0

 ( 0 ,  0 ) ( 0 , 1 )  ( 0 ,  n )   a0   ( f ,  0 ) 
 (1 ,  0 ) (1 , 1 )  (1 ,  n )   a1    ( f , 1 ) 
         
 ( n ,  0 ) ( n , 1 )  ( n ,  n )   an   ( f ,  n ) 

164
内积与范数 (P51)
离散型
内积
连续型

(f,g)=0 表示 f 与 g 正交

范数

广义最小二乘 问题可叙述为 : 求广义多


项式 P(x) 使得 E=(P-f , P-f )=||P-f ||2 最
小.
165
法方程组解的唯一性
 ( 0 ,  0 ) ( 0 , 1 )  ( 0 ,  n )   a0   ( f ,  0 ) 
 (1 ,  0 ) (1 , 1 )  (1 ,  n )   a1    ( f , 1 ) 
         
 ( n ,  0 ) ( n , 1 )  ( n ,  n )   an   ( f ,  n ) 

定理 法方程组有唯一解   0(x), 1(x), … ,


n(x) 线性无关 ( 参见 P53 定理 6) 。
若存在一组常数使得  0  0   1 1  ...   n  n  0
证 则等式两边分别与 ,  , … ,  作内积 , 得
0 1 n

到:

路 ……

166
例 : 连续型拟合中 ,

Hilbert 阵!

考虑系数矩阵为 Hilbert 阵的三阶方程组
1 1 / 2 1 / 3   x1   11 / 6 
(P194)
 1 / 2 1 / 3 1 / 4   x2    13 / 12  其精确解为 (1,1,1)T
 1 / 3 1 / 4 1 / 5   x   47 / 60 
3

系数取三位有效数字后 , 方程组变为
 1.00 0.500 0.333   x1   1.83 
 0.500 0.333 0.250   x2    1.08 
 0.333 0.250 0.200   x3   0.783 

其精确解为 (1.0895125,0.4879671,1.4910028)T
方程组病态 !
167
 ( 0 ,  0 ) ( 0 , 1 )  ( 0 ,  n )   a0   ( f ,  0 ) 
 (1 ,  0 ) (1 , 1 )  (1 ,  n )   a1    ( f , 1 ) 
         
 ( n ,  0 ) ( n , 1 )  ( n ,  n )   an   ( f ,  n ) 
改进
若能取函数族 ={ 0(x), 1(x),···,n(x),···,
… }, 使得任意一对 i(x) 和 j(x) 两两 ( 带
权 ) 正交 , 则系数矩阵就化为对角阵!
这时直接可算出

168
正交化方法 ( 补充 )
将正交函数族中的 k 取为 k 阶多项式,为
简单起见 , 可取 k 的首项系数为 1 .
递推关系
式:

其中

169
Legendre 多项式 (P55)
当区间为 [-1,1], 权函数 (x)=1 时 , 由 {1,x,···,xn,···}
正交化得到的多项式称为 Legendre 多项式 .

P0(x)=1 P1(x)=(x-1)P0(x)
令 P1(x) 与 P0(x) 正交 ,
得到1
0   ( x  1 )dx  21 因此 1=0,P1(x)=x.
1

170
Legendre 多项式
P2(x)=(x-2)P1(x)-1P0(x)
分别令 P2(x) 与 P1(x) 及 P0(x) 正交 , 得到
1
 1   1 P0 ( x ) P1 ( x ) dx
2
0 ( x   2 )( P1 ( x ))
1 2 2 因此 2=0
  ( x   2 ) x dx  
2

1
1 3
0    xP1 ( x ) P0 ( x )   2 P1 ( x ) P0 ( x )  1 ( P0 ( x ))2 dx
1
1 2
  ( x  1 )dx   21 因此 1=1/3
2
1 3
最终得到 P2(x)=x2-1/3

171
Legendre 多项式
前几个 ( 首一 ) 的 Legendre 多项式为
P0(x)=1,P1(x)=x,P2(x)=x2-1/3,P3(x)=x3-3/5 x

172
连续型最小二乘的例
在 [0,1] 区间上求 f(x)=1/(1+x) 的最佳平方逼
近二次多项式 .
首先将 [0,1] 转化为区间 [-1,1], 为此 , 令
x=(t+1)/2( 即 t=2x-1), 则
t 1 1 2
F (t )  f ( x )  f ( ) 
2 t 1 t  3
1
2
设 P(t) 为最佳平方逼近二次多项式 ,
P(t)=a0P0(t)+a1P1(t)+a2P2 (t)
其中 P0(t),P1(t),P2 (t) 为首一的 Legendre 多项

173
连续型最小二乘的算例
1 2
式中的系数为 a0  ( F ( t ), P0 ( t ))

  1 t  3
dt
 ln 2  0.693147
( P0 ( t ), P0 ( t )) 1
1 2t 11dt
( F ( t ), P1 ( t )) 1 t  3 dt
a1    6  9 ln 2  0.238325
( P1 ( t ), P1 ( t )) 1
1 dt2
2
t
1 2( t  1 / 3)

( F ( t ), P2 ( t )) 1 t  3 dt 135 195


a2   1   ln 2  0.081850
( P2 ( t ), P2 ( t )) 2 2
 (t  1 / 3) dt
2 2
1

因此 P(t)=0.693147-0.238325t+0.081850(t 2-
1/3)
=0.081850t 2-0.238325t+0.665864
174
连续型最小二乘的算例
P(t)=0.081850t 2-0.238325t+0.665864
将 t =2x-1 带入得到
P(2x-1)=0.327400x2-0.804050x+0.986039
这就是 [0,1] 区间上 f(x)=1/(1+x) 的最佳平方
逼近二次多项式 .

175
连续型最小二乘的算例
0.2 0.4 0.6 0.8 1

0.9

0.8

0.7

0.6

0.5
176
第四章
数值积分与数值微分
§1 引言
依据微积分基本定理 , 只要找到被积函数
f(x) 的原函数 F ’(x)=f(x) ,便有 Newton-
Leibniz 公式

由于大量的被积函数找不到用初等函数表示
的原函数 , 而实验测量或数值计算给出的通
常是一张函数表 , 所以 Newton-Leibniz 公
式往往不能直接运用 . 因此有必要研究积分
的数值计算问题 .

178
数值求积的基本思想
依据积分中值定理 ,
就是说 , 底为 b-a 而高为 f() 的矩形面积恰恰
等于所求曲边梯形的面积 .
取 [a,b] 内若干个节点 xk 处的高度 f(xk), 通过
加权平均的方法生成平均高度 f(), 这类求积
公式称机械求积公式 :

式中 xk 称为求积节点 , Ak 称为求积系数 .
179
代数精度的概念
数值求积方法是近似方法 , 为保证精度 , 自然
希望所提供求积公式对于“尽可能多”的函
数是准确的 .
如果机械求积公式对 f(x)=xk(k=0,1,···,m) 均
能准确成立 , 但对 f(x)=xm+1 不准确 , 则称机
械求积公式具有 m 次代数精度。

180
例 : 对于 [a, b] 上 1 次插
值,有

考察其代数精度 . 梯形公式
解:逐次检查公式是否精确成立
P0(x) = 1, = f(x)

P1(x)= x, = f(b)
f(a)

P2(x)= x2 ,  a b

代数精度 =
1 181
代数精度的概念
事实上 , 令求积公式对 f (x) = xk(k=0,1,···,m)
准确成立 , 则有

可见 , 在求积公式节点给定的情况下 , 求积公式
的构造问题本质上是解线性方程组的代数问题 .

182
插值型的求积公式
设已给 f(x) 在节点 xk(k=0,1,···,n) 的函数值 , 作
插值多项式

其中
由于多项式的求积是容易的 , 令

这样得到的求积公式称为插值型的求积公式 .

183
插值型的求积公式
根据 可以得到

Ak

由 节点 决定,
与 f (x) 无关。

184
对于插值型的求积公式 , 当 f(x) 为不超过 n 次
的多项式时 , 显然有 f(x)≡Ln(x), 求积公式精确
成立 .
反之 , 若一个机械求积公式至少具有 n 次代数
精度 , 则当 f(x)=lj(x) 时 , 公式精确成立 .
因此

形如 的求积公式至少
有 n 次代数精度  该公式为插值型 , 即:

185
§2 Newton-Cotes 公式
当节点等距分布时

Cotes 系数仅取决于 n
Cotes 系数
和 k, 可查表得到 , 与 f
(x) 及区间 [a, b] 均无关 .
称为 Newton-Cotes 公
式 186
梯形公式
n = 1:
梯形公式

代数精度 =
1

187
Simpson 公式

n = 2:

Simpson 公式

代数精度 =
3

188
高阶公式
n = 3: Simpson 3/8 公式

代数精度 =
3n = 4: Cotes 公式

代数精度 =
5

189
Example
The Trapezoidal rule for a function f on the
interval [0,1] is

and Simpson’s rule for f on [0,2] is

The results to three places for some elementary


functions are shown in the following figures.

190
f(x)=x2
Exact Value:2.667
Trapezoidal:4.000
Simpson’s:2.667

191
f(x)=x4
Exact Value:6.400
Trapezoidal:16.000
Simpson’s:6.667

192
f(x)=1/(1+x)
Exact Value:1.099
Trapezoidal:1.333
Simpson’s:1.111

193
f(x)=sin x
Exact Value:1.416
Trapezoidal:0.909
Simpson’s:1.425

194
f(x)=ex
Exact Value:6.389
Trapezoidal:8.389
Simpson’s:6.421

195
f(x)=1/(1+x2) [-5,5]
Exact Value:2.747
Degree=1: 0.385
Degree=2: 6.795
Degree=3: 2.081
Degree=4: 2.374
Degree=5: 2.308
Degree=6: 3.870
Degree=7: 2.899
Degree=8: 1.500
Degree=9: 2.399
Degree=10: 4.673
196
偶阶求积公式的代数精度
对于 n 阶的 Newton-Cotes 公式 , 其至少具有 n
阶的代数精度 .
分析已知的 2 阶公式 (Simpson) 和 4 阶公式
(Cotes), 可以发现它们的代数精度分别为 3 和 5.
事实上 , 偶阶求解公式的代数精度都比阶数大
1.
定理 :n 为偶数时 ,Newton-Cotes 公式至少具有
n+1 阶代数精度 .

197
偶阶求积公式的代数精度
证明 : 只需证明当 f(x)=xn+1 时 Newton-Cotes
公式的余项为 0.
由 Lagrange 插值的余项公式 , 得到 Newton-
Cotes 公式的余项为

令 x=a+th, 由 xj=a+jh 可以得到

198
偶阶求积公式的代数精度
再令 t =u+n/2( 注意到 n 为偶数 ), 有

由于被积函数是奇函数 , 积分为零 .
从而结论成立

199
复化求积公式
高次插值有 Runge 现象 , 故采用分段低次插值
得到 Newton-Cotes 复化求积公式 .
复化梯形公式
在每个 [xk-1,xk] 上用梯形公式

= Tn

200
复化梯形公式的余项及收敛性

另一方面

201
复化 Simpson 公式

4 4
4 4 4

= Sn

202
收敛速度
定义若一个求积公式的误差满足
则称该公式是 p 阶收敛的 .
~ ~ ~
例 : 计算 运算量基
本相同
解: 其中
= 3.138988494

其中
= 3.141592502
203
§3 Romberg 算法
实际计算中 , 由于要事先给出一个合适的步长
往往很困难 , 所以我们往往采用变步长的计算
方案 , 即在步长逐步分半的过程中 , 反复利用
复化求积公式进行计算 , 直到所求得的积分值
满足精度要求为止 .

204
梯形法的递推化
设 Tn 表示复化梯形公式求得的积分值 , 其下
标 n 是等份数 .

则有递推公式
其中

205
迭代步数的判断
给定精度 , 如何取 n ?
要求 |I-Tn|<  , 如何判断 n = ?

上例中若要求 |I-Tn|<10-6,

即取 n = 409

206
通常采取将区间不断对分的方法 , 即取 n =
2 k
上例中令 2k  409, 得 k = 9,n=512,T =
512
3.14159202
注意到区间再次对分时
S4 = 3.141592502

可用来判断迭

是否停止。

207
Romberg 算法
例 : 计算
 = 106 时须将区间等份 9 次 , 得到
T512=3.14159202
考察


来计算 I 效果是否好些?
= 3.141592502 = S4

208
4 1
T2 n  Tn  S n ?
3 3

209
Romberg 算法
一般有

T1 =T0(0) < ? Romberg


公式
T2 = T0(1) S1 =T1(0) < ?

T4 =T0(2) S2 =T1(1) C1 =T2(0) < ?

T8 =T0(3) S4 =T1(2) C2 =T2(1) R1 =T3(0)


210
Richardson 外推加速法
目的 : 利用低阶公式产生高精度的结果 .
设对于某一 h ≠ 0, 有梯形公式 T0(h) 近似
计算定积分值 I. 可以证明 :
T0(h) = I+a1h2 + a2 h4 + a3 h6 + …+akh2k+…
现将 h 对分 , 得:

如何将公式精度由 O(h2) 提高?

211
T0(h) – I = a1h2 + a2 h4 + a3 h6 + …+akh2k+…

212
Gaussian Quadrature
For the integral , we can see that the
error of Trapezoidal Rule is rather large.
However, we can choose another formula:

We only compute the values of the function


twice, which is same to Trapezoidal Rule.

213
Gaussian Quadrature
Exact
f ( x) T S new formula
Value
x2 2.667 4.000 2.667(0) 2.667(0)
x4 6.400 16.000 6.667(0.267) 6.223(0.177)
1/(x+1) 1.099 1.333 1.111(0.012) 1.091(0.008)
2.958 3.326 2.964(0.006) 2.953(0.005)
sinx 1.416 0.909 1.425(0.009) 1.410(0.006)
ex 6.389 8.389 6.421(0.032) 6.368(0.021)

214
f(x)=x2
Exact Value:2.667
Trapezoidal:4.000
Simpson’s:2.667
New:2.667

215
f(x)=x4
Exact Value:6.400
Trapezoidal:16.000
Simpson’s:6.667
New:6.223

216
f(x)=1/(x+1)
Exact Value:1.099
Trapezoidal:1.333
Simpson’s:1.111
New:1.091

217
f(x)=sinx
Exact Value:1.416
Trapezoidal:0.909
Simpson’s:1.425
New:1.410

218
f(x)=sinx
Exact Value:6.389
Trapezoidal:8.389
Simpson’s:6.421
New:6.368

219
§4 Gauss 公式

若在机械求积公式中 , 节点待定 , 则有 2n+2


个未知数 , 可以用 2n+2 个等式来确定 , 因此
可以构造具有 2n+1 次代数精度的求积公式 .
将节点 x0 , ···, xn 以及系数 A0 , ···, An 都
作为待定系数 . 令 f (x) = 1, x, x2, …, x2n+1
代入可求解 , 得到的公式具有 2n+1 次代数
精度 . 这样的节点称为 Gauss 点 , 公式称为
Gauss 型求积公式。

220
Gauss 公式
例:求 的 2 点高斯公式。
解:设
令 f (x) = ,1,应有
x, x2,3x3次代数精度 .
时公式精确成立 .

方程组非线性 , 不易求解 .
221
Gauss 公式
设 x0 … xn 为 Gauss 点 , 令

考虑不超过 n 次的多项式 P(x), 则 P(x)(x)


为不超过 2n+1 次的多项式 .
因此
=0
所以  (x) 与任意不超过 n 次的多项式 P(x)
都是正交的 .

222
Gauss 公式
反之 , 若 与任意
不超过 n 次的多项式都是正交的 .
以该多项式的根为节点构造插值型积分公式 .

设 f(x) 为不超过 2n+1 次的多项式 , 且

其中 P(x),Q(x) 都是不超过 n 次的多项


式.
用上面的公式计算 f(x) 的积分 .
223
Gauss 公式

由于积分公式是插值型的 ,Q(x) 是不超过 n 次


的多项式 . 因此

我们得到

224
Gauss 公式
总结上面的结论 , 有以下定理
定理 4(P97) 对于插值型求积公式

其节点 xk(k=0,1,···,n) 是 Gauss 点的充要条件是


以这些点为零点的多项式

与任意次数不超过 n 的多项式 P(x) 正交 .

225
正交多项式族 {0, 1, …, n, … } 有性质:任
意次数不大于 n 的多项式 P(x) 必与 n+1
若取
正交。 (x) 为其中的 n+1, 则 n+1 的根就是
Gauss
再解上例: 点.
构造正交多项式 0 , 1 , 2
设 0(x)=1, 1(x)=x–1, 由正交性得到

再设 2(x)=(x-2) 1(x)-1 0(x), 由正交性可


226
Gauss 公式
的两个根为

再根据插值型求积公式的结论容易求得求
积系数 .

227
Gauss-Legendre 公式
Legendre 多项式是 [-1,1] 上的正交多项式 , 其
零点可以作为 Gauss 点 , 得到的 Gauss 型求
积公式 , 称为 Gauss-Legendre 公式 .

例如 , 首一的二次 Legendre 多项式为 x2-1/3,


其根为
因此得到两点 Gauss-Legendre 公式

容易求得两个系数均为
1.
228
Gauss 公式的余项
设 P 为 f 的过 x0 … xn
的插值多项式

只要 P 的阶数不大于 2n+1 ,则下一步等式成


229
Gauss 公式的稳定性
构造具有 2n+1 次代数精度的求积公式

由于该公式对 2n 次的多项式精确成立 , 将
f(x)=lk2(x) 代入得到

因此上述 Gauss 公式的求积系数是正的 .

230
Gauss 公式的稳定性
如果计算机计算时有舍入误差 , 实际计算得到
的值为
其中 fk* 为 f(xk) 的近似值 .
如果计算时 n 选取比较大 , 误差会不会也比较大 ?

Gauss 公式稳
定!

231
§5 数值微分
导数 f ’(a) 是均差
在 时的极限 .
因此可以取差商 ( 均差 ) 作为导数的近似值 .
一般有以下三种方法
向前差商

向后差商
中心差商

232
中点方法的误差
为分析中点公式
的误差 , 我们将 f(a+h) 及 f(a-h) 在 a 处
作 Taylor 展开 .

因此有

所以 , 从截断误差角度考虑 ,h 越小 , 结果越
精确 .
233
中点方法的误差
从舍入误差考虑 , 当 h 很小时 ,f(a+h) 与 f(a-h)
很接近 , 会造成有效数字的损失 .
因此 h 不能取得太小 .

例 用中点公式求 在 x=2 处
的一阶导数 .
计算公式为

234
h G(h)
中点方法的误差 1 0.3660
0.5 0.3564
精确到小数点后 4 位计
0.1 0.3535
算得到的结果如右表 .
0.05 0.3540
可以看出 , 在 h=0.1 是效 0.01 0.3500
果最好 ( 精确值 0.005 0.3600
0.353553) 0.001 0.3500
h 过小或过大都使得误差 0.0005 0.4000
较大 . 0.0001 0.5000

235
合适步长的选取 ( 补充 )
究竟以什么标准来选取合适的 h?
在用中点公式计算时 , 计算所得到的结果为

其中 分别为
f(a+h) 及 f(a-h) 带舍入误差的近似值 .

下面我们分析截断误差和舍入误差的总误差

236
合适步长的选取 ( 补充 )


设舍入误差限为 , 三阶导数的上界为 M,
则计算结果的误差限为

237
合适步长的选取 ( 补充 )
为使得误差最小 , 我们求误差限的最小值 .

当 即 时 (h) 取最小值
,
在上例中取

因此

利用为步算得的果
长算 得 的 结果


238
插值型的求导公式
利用函数在节点 (x0,x1,···,xn) 处的值
(y0,y1,···,yn), 作插值多项式 Pn(x), 再用 Pn(x) 的
导数值代替函数的导数值 , 所得的数值公式称
为插值型的求导公式 .

余项

239
插值型的求导公式

等式右端第二项中 的值一般
无法估计
当 x 取节点处的值时 ,n+1(x)=0, 第二项消失 .

因此 , 插值型的求导公式一般只用来计算节点
处的导数值 .

240
两点公式
取两个点 x0,x1 为插值节点 , 插值函数为

记 x1-x0=h, 对上式两边求导
因此
带余项的两点公式为

241
三点公式
取三个点 x0,x1,x2 为插值节点 , 作插值多项式
P2(x), 再令 x=x0+th, 对 P2(x) 求导可得

分别取 t=0,1,2 再考虑余项 , 可以得到以下的公


242
二阶导数公式

将上式再对 t 求导一次

一般以它为 x1 处的二阶导数公

243
作业 : 以二阶导数公式计算
在 x=2 处的二阶导数的近似值 , 若计算数
据精确到小数点后 4 位 , 试求步长 h 取何值时
计算误差最小 .
此时误差界为多少 ?
将此步长带入进行计算 , 并将实际误差与误差
界进行比较 .

244
第五章
常微分方程数值解法
作业
1. 用 Euler 公式 , 后退的 Euler 公式 , 梯形公
式 ,Euler 两步公式 , 改进的 Euler 公式 , 梯形 -
Euler 两步预测 - 校正公式 ,4 阶 Runge-Kutta 公
式求解初值问题 ( 步长取为 0.1, 计算到 y2 为止 )
 y '  x  y( 0  x  1)
y ( 0)  1
2. 分析改进的 Euler 公式与梯形公式求解上述
问题的收敛性 .
3. 研究改进的 Euler 公式与梯形公式的稳定
性.

246
作业
4. 对如下形式的线性多步法 , 在 r =2 时 , 分别
构造精度最高的显式与隐式公式 .
r r
yn 1  
k 0
k yn k  h   k yn  k
k 1

5. 用改进的 Euler 方法求解下面的微分方程


( 步长取为 1, 算一步y)  3 y  2 y  0
y(0)  1, y (0)  1
6. P142 第 14

247
常微分方程数值解
许多形式的常微分方程无法给出解析解 , 一般
要用数值的方法给出解 .
一般考虑一阶常微
分方程的初值问题
只要 f (x, y) 在 [a, b]  R1 上连续 , 且关于 y
满足 Lipschitz 条件 , 即存在与 x, y 无关的
常数 L 使

对任意定义在 [a, b] 上的 y1(x) 和 y2(x) 都


成立,则上述微分方程存在唯一解。 248
常微分方程数值解
所谓求微分方程的数值解 , 实际上是要计算出
解函数 y(x) 在一系列节点 a = x0< x1<···<xm=
b 处的近似值

节点间距 hn=xn+1-xn 为步长 , 通常采用等距节


点 , 即取 hn = h ( 常数 ) 。

249
Euler 公式
向前差商近似导数

记为

定义在假设 yn = y(xn), 即第 n 步计算是精


确的前提下 , 考虑的截断误差 Rn = y(xn+1) 
yn+1 称为局部截断误差。
250
Euler 公式
定义若某算法的局部截断误差为 O(hp+1), 则称
该算法有 p 阶精度 .
Euler 法的局部截断误差 :

Euler 法具有 1 阶精度 .


251
后退的 Euler 公式
向后差商近似导数

y ( x1 )  y0  h f ( x1 , y ( x1 ))

yn1  yn  hf ( xn1 , yn1 )

252
后退的 Euler 公式
yn 1  yn  hf ( xn 1 , yn 1 )
由于未知数 yn+1 同时出现在等式的两边 , 不
能直接得到 , 故称为隐式 Euler 公式 , 而前者
称为显式 Euler 公式 .
一般先用显式计算一个初值 , 再迭代求解 .
隐式 Euler 法的局部截断误差:

即隐式 Euler 公式具有 1 阶精度 .

253
梯形公式
Euler 公式的局部截断误差为
后退 Euler 公式局部截断误

取平均可以得到高阶的梯形公式

注 : 的确有局部截断误差 O(h3), 即梯形公式具


有 2 阶精度 , 比 Euler 公式有了进步 . 但注意
到该公式是隐式公式 , 计算时不得不用到迭代
法.
254
Euler 两步公式
中心差商近似导数

假设 yn-1=y(xn-1),yn=y(xn), 则可以导出
Rn=y(xn+1)-yn+1=O(h3),
即 Euler 两步公式具有 2 阶精度 .
Euler 两步公式的计算需要两个初值 .

255
改进的 Euler 公式

考虑梯形公式的迭代求解 ( 求解 yn+1), 它已经是


yn+1=(yn+1) 的形式 , 只需找一个初值进行迭代 .
我们用显式 Euler 公式求出的值作为 yn+1 的初

然后用上面的公式迭代一次 yp=yn+hf(xn,y(n不求出上面方程
)
的精确解 ) y  y  h f ( x , y )  f x , y  h f ( x , y )
n 1 n  n n  n 1 n n n 
2

上述公式称为改进的 Euler 公式 .
256
改进的 Euler 公式
改进的 Euler 公式可以看作一个显式公式和
一个隐式公式的结合 .
先用显式公式作预测 (predictor), 给出隐式公
式的一个初值 .
然后用隐式公式作校正 (corrector), 相当于只
迭代一步 , 得到的值作为隐式公式的近似解 .
注 : 此法亦称为预测 - 校正法 . 可以证明该
算法具有 2 阶精度 , 同时可以看到它是个单
步递推格式 , 比隐式公式的迭代求解过程简
单 . 后面将看到 , 它的稳定性高于显式 Euler
法.
257
算例 (Euler 公式 )
 2x
求解初值问题 
y'  y 
y
(0  x  1)
 y(0)  1
解 : 取步长 h=0.1.
(1)Euler 公式 yn+1=yn+hf(xn,yn),
此处的具体形式为 yn1  yn  h( yn 
2 xn
)
yn
该方程的精确解为 y  1  2x

下表给出了 Euler 公式的计算结果及误差 .

258
算例 (Euler 公式 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.1000 1.0954 -0.0046 0.6 1.5090 1.4832 -0.0257
0.2 1.1918 1.1832 -0.0086 0.7 1.5803 1.5492 -0.0311
0.3 1.2774 1.2649 -0.0125 0.8 1.6498 1.6125 -0.0373
0.4 1.3582 1.3416 -0.0166 0.9 1.7178 1.6733 -0.0445
0.5 1.4351 1.4142 -0.0209 1.0 1.7848 1.7321 -0.0537

259
算例 (Euler 公式 )
右图是计算
值与精确值
的比较 .
可以看出 ,
误差逐渐增
加.

260
算例 ( 后退的 Euler 公式 )
(2) 后退的 Euler 公式 yn+1=yn+hf(xn+1,yn+1),
此处的具体形式为 yn1  yn  h( yn 1 
2 xn1
)
yn1

yn  8hxn1  8h2 x n1  yn2


可以得到 yn1 
2(1  h)

计算结果见下表
实际求解时 , 一般得不到 yn+1 的具体表达
式.
261
算例 ( 后退的 Euler 公式 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.0907 1.0954 0.0046 0.6 1.4529 1.4832 0.0303
0.2 1.1741 1.1832 0.0091 0.7 1.5114 1.5492 0.0378
0.3 1.2512 1.2649 0.0137 0.8 1.5658 1.6125 0.0467
0.4 1.3231 1.3416 0.0185 0.9 1.6160 1.6733 0.0573
0.5 1.3902 1.4142 0.0240 1.0 1.6618 1.7321 0.0702

262
算例 ( 后退的 Euler 公式 )
红色 :
Euler 公式
蓝色 :
精确值
绿色 :
后退的
Euler 公式

263
算例 ( 梯形公式 )
(3) 梯形公式 yn+1=yn+h[f(xn,yn)+f(xn+1,yn+1)]/2,
此处的具体形式为 yn1  yn  h(
yn yn1 xn xn1
   )
2 2 yn yn1

2hxn  ( 2  h) yn2  8h( 2  h) x n1 yn2  (2hx n  ( 2  h) y n2 ) 2


yn1 
2( 2  h) yn

计算结果见下表
实际求解时 , 一般得不到 yn+1 的具体表达
式.
264
算例 ( 梯形公式 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.0957 1.0954 -0.0002 0.6 1.4843 1.4832 -0.0010
0.2 1.1836 1.1832 -0.0004 0.7 1.5504 1.5492 -0.0012
0.3 1.2654 1.2649 -0.0005 0.8 1.6139 1.6125 -0.0015
0.4 1.3423 1.3416 -0.0007 0.9 1.6751 1.6733 -0.0018
0.5 1.4151 1.4142 -0.0008 1.0 1.7341 1.7321 -0.0021

由于误差较小 , 已无法用图形来显示 .

265
算例 (Euler 两步公式 )
(4)Euler 两步公式 yn+1=yn-1+2hf(xn,yn),
此处的具体形式为 yn 1  yn 1  2h( yn 
2 xn
)
yn

取 y0=1.0,y1=y(0.1)=1.0954( 精确值 ) 来计

计算结果见下表
实际求解时 , 一般得不到 y1 的精确值 .

266
算例 (Euler 两步公式 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.0954 1.0954 - 0.6 1.4816 1.4832 0.0017
0.2 1.1826 1.1832 0.0007 0.7 1.5473 1.5492 0.0019
0.3 1.2643 1.2649 0.0006 0.8 1.6101 1.6125 0.0024
0.4 1.3405 1.3416 0.0011 0.9 1.6706 1.6733 0.0027
0.5 1.4130 1.4142 0.0012 1.0 1.7287 1.7321 0.0034

误差与梯形公式大致相当 .

267
算例 ( 改进的 Euler 公式 )
(4) 改进的 Euler 公式
yn+1=yn+h[f(xn,yn)+f(xn+h,yn+hf(xn,yn))]/2,
此处的具体形式为
h 2(1  h) xn 2( xn  h)
yn1  yn  [( 2  h) yn   ]
2 yn 2 xn
yn  h( yn  )
yn
计算结果见下表

268
算例 ( 改进的 Euler 公式 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.0959 1.0954 -0.0005 0.6 1.4860 1.4832 -0.0027
0.2 1.1841 1.1832 -0.0009 0.7 1.5525 1.5492 -0.0033
0.3 1.2662 1.2649 -0.0013 0.8 1.6155 1.6125 -0.0040
0.4 1.3434 1.3416 -0.0017 0.9 1.6782 1.6733 -0.0048
0.5 1.4164 1.4142 -0.0022 1.0 1.7379 1.7321 -0.0058

误差比梯形公式稍大 .

269
算例 (Euler 两步公式 - 梯形公
(5) 预测 - 校正公式 (Euler 式 ) - 梯形公式 )
两步公式

在改进的 Euler 公式中 , 采取 Euler 公式进


行预测 , 梯形公式进行校正 .
但是这两个公式的精度不一致 (Euler 公式 1
阶 , 梯形公式 2 阶 ). 下面改用 Euler 两步公式进
行预测 , 而用梯形公式进行校正 .
yp=yn-1+2hf(xn,yn),
yn+1=yn+h[f(xn,yn)+f(xn+h,yp))]/2.

270
算例 (Euler 两步公式 - 梯形公
xn y y(x ) R
式x
) y y(x ) R
n n n n n n n

0.1 1.0954 1.0954 - 0.6 1.4832 1.4832 0.0000


0.2 1.1833 1.1832 -0.0000 0.7 1.5490 1.5492 0.0002
0.3 1.2650 1.2649 -0.0001 0.8 1.6121 1.6125 0.0003
0.4 1.3417 1.3416 -0.0001 0.9 1.6727 1.6733 0.0006
0.5 1.4143 1.4142 -0.0000 1.0 1.7312 1.7321 0.0009

误差与梯形公式相当 ( 此处多用了一个精确值 ).

271
各种方法的优

方 法  
显式 Euler 简单 精度低
隐式 Euler 稳定性最好 精度低 , 计算量大
梯形公式 精度提高 计算量大
Euler 两步 多一个初值 ,
精度提高 , 显式
公式 可能影响精度
改进的 精度有所提高 , 精度比梯形
Euler 公式 显式 公式略差
梯形 - 精度最高 ,
多一个初值
Euler 两步 显式
272
Taylor 级数法
Euler 公式可以看作由 1 阶 Taylor 展式而来 .
如果将 Taylor 展式多写一项 , 可以得到

y’(xn) 可以直接得到 y’(xn)=


y’’(
f(xxnn),y是否可以计
n).
算?

273
Taylor 级数法
类似的可以利用高阶的 Taylor 级数

y 的各阶导数的求法

一般的

若使用 p 阶的 Taylor 展式 , 则局部截断误


差为 O(hp+1), 从而公式是 p 阶精度 .

274
算例 (Taylor 级数法 )
 2x
求解初值问题 
y'  y 
y
(0  x  1)
 y(0)  1
解 : 直接求导得
2x 2 y  2 xy ' 2 2 xy '
y'  y  y ''  y '  y '  2
y y 2
y y
2 y ' 4 x( y ')2 2( y ' xy '') 4 y ' 2 xy '' 4 x( y ')2
y '''  y '' 2  3
 2
 y '' 2

y y y y y3
( 4) 2 xy ''' 6 y '' 12 xy ' y '' 12( y ')2 12( y ')3
y  y ''' 2
 3

y y y4

275
算例 (Taylor 级数法 )
由 x0=0,y0=1, 得到
y '( x0 )  1 y ''( x0 )  1 y '''( x0 )  3 y ( 4 ) ( x0 )  15

取 h=0.1,

下表给出了 Taylor 级数方法的计算结果及误


差.
276
算例 ( 四阶 Taylor 级数方法 )
xn yn y(xn) Rn xn yn y(xn) Rn
0.1 1.0954 1.0954 0 0.6 1.4832 1.4832 0
0.2 1.1832 1.1832 0 0.7 1.5491 1.5492 0.0001
0.3 1.2649 1.2649 0 0.8 1.6123 1.6125 0.0002
0.4 1.3416 1.3416 0 0.9 1.6731 1.6733 0.0002
0.5 1.4142 1.4142 0 1.0 1.7318 1.7321 0.0003

误差是相当小的 .

277
Runge-Kutta 方法
Taylor 级数方法虽然可以达到比较高的精度 ,
但是计算相当复杂 .
是否有比较简单的算法 , 但是精度也比较高呢 ?
考虑改进的 Euler 公式
yn+1=yn+h[f(xn,yn)+f(xn+h,yn+hf(xn,yn))]/2,
它可以 yn1  yn  h [ K1  K 2 ]
改写为 K  f ( x , y2 ), K  f ( x  h, y  hK )
1 n n 2 n n 1

斜率
步长一定是
一定取 K1 K2
一个 h 吗?
的平均值吗?
278
将改进 Euler 法推广为
 yn 1  yn  h[1 K1  2 K 2 ]
 K1  f ( x n , yn )
 K 2  f ( xn  ph, yn  phK1 )
首先希望能确定系数  1,2,p, 使得到的算法
格式有 2 阶精度 , 即在 yn=y(xn) 的前提假设
下 , 使得
将 K2 在 (xn,yn) 点作 Taylor 展开

279
y
 n 1  y n  h[  K
1 1   K
2 2 ] K 2  y '( x n )  phy ''( x n )  O ( h 2
)
 K1  f ( x n , y n )
 K 2  f ( xn  ph, yn  phK1 ) 将 K2 代入计算公式 , 得
yn 1  yn  h{1  y '( xn )  2 [到
y '( xn )  phy ''( xn )  O( h2 )]}
 yn  (1  2 )h y '( xn )  2 ph2 y ''( xn )  O( h3 )
将 yn+1 与 y(xn+1 ) 在 xn 点的 Taylor 展开作
比较
要求 y(xn+1)-yn+1=O(h3), 则必须有
存在无穷
这里有 3 个
未知数 ,2 个 多个解。
方程 .
280
二阶 Runge-Kutta 方法
 yn 1  yn  h[1 K1  2 K 2 ]
 K1  f ( x n , y n )
 K 2  f ( xn  ph, yn  phK1 )

所有满足上式的格式统称为 2 阶 Runge-Kutta 公
式.
注意到 就
是改进的 Euler 法 .
为获得更高的精度 , 应该如何进一步推广?

281
三阶 Runge-Kutta 方法
为了获得更高的精度 , 我们多取一个点 xn+q
(p≤q≤1), 用三个点的斜率的线性组合来作为平
均斜率 , 即考虑如下的公式
 yn 1  yn  h(1 K1  2 K 2  3 K 3 )
 K1  f ( x n , yn )
 K  f ( x  ph, y  phK )
 K 2  f ( x n  qh, y n  qh( rK1  sK ))
 3 n n 1 2

我们的目的是选取合适的 1,2,3,p,q,r,s 使得
公式的精度尽量的高 .
282
三阶 Runge-Kutta 方法
 yn1  yn  h(1 K1  2 K 2  3 K 3 )
 K 1  f ( x n , yn )
 K  f ( x  ph, y  phK )
 K 2  f ( x n  qh, y n  qh( rK1  sK ))
 3 n n 1 2

根据较为复杂的推导 , 在参数满足下列关系时 , 上
面的公式具有三阶精度 ( 不可能达到四阶 )

r  s  1
 1  2  3  1
 2 p 2 3q 2 1 / 2
 2 p  3q  1 / 3
 3 pqs  1 / 6

283
四阶 Runge-Kutta 方法
通过类似的方法可以得到下面常用的四阶
Runge-Kutta 公式
 h
 yn 1  yn  6 ( K1  2 K 2  2 K 3  K 4 )
 K 1  f ( x n , yn )
 h h
 K 2  f ( x n  , yn  K 1 )
 2 2
h h
 K 3  f ( x n  , yn  K 2 )
 2 2
 K 4  f ( xn  h, yn  hK 3 )

284
算例 ( 四阶 Runge-Kutta 方法 )
 2x
再次考虑问题 
y'  y 
y
(0  x  1)
 y(0)  1
令 h=0.2, 用四阶 Runge-Kutta 公式求解此问
题.  h
 yn 1  yn  6 ( K1  2 K 2  2 K 3  K 4 )
具体迭代格式为  2 xn
具体计算结果  K1  yn  yn

见下表 .  K  y  h K  2 xn  h
 2 n 1
2 yn  hK1 / 2
 h 2 xn  h
 K 3  yn  K 2 
 2 yn  hK 2 / 2
 2( xn  h)
 K 4  yn  hK 3  yn  hK 3
285
算例 ( 四阶 Runge-Kutta 方法 )
xn yn y(xn) 可以看出 , 在小数点后 4 位几
乎没有误差 .
0.2 1.1832 1.1832
和改进的 Euler 公式相比 , 四
0.4 1.3417 1.3416
阶的 Runge-Kutta 公式每步
0.6 1.4833 1.4832 的计算量是两倍 .
0.8 1.6125 1.6125 计算到 x=1 为止 , 总的计算量
1.0 1.7321 1.7321 是一致的 . 但是四阶 Runge-
Kutta 公式在 x=1 处的误差要
小得多 .
286
Runge-Kutta 的主要运算在于计算 Ki 的值 ,
即计算 f 的值 .Butcher 于 1965 年给出了
计算量与可达到的最高精度阶数的关系:
每步须算 Ki 的个数 2 3 4 5 6 7

可达到的最高精度

由于 Runge-Kutta 方法的导出基于 Taylor


展开 , 故精度主要受解函数的光滑性影响 .
对于光滑性不太好的解 , 最好采用低阶算法
而将步长 h 取小 .

287
单步法的收敛性
定义 若某算法对于任意固定的 xn = x0 + nh,
当 h0 ( 同时 n  ) 时有 yn  y( xn ) ,
则称该算法是收敛的。
例 : 就初值问题 考察 Euler 公
式的收敛性 .
解:该问题的精确解为 y(x)=y0ex
Euler 公式

对任意固定的 xn = nh,



288
单步法的收敛性
关于单步法 , 有下面的收敛性定理 .
定理 1 假设单步法 yn+1=yn+h(xn,yn,h) 具有 p 阶精
度 , 且增量函数 (x,y,h) 关于 y 满足 Lipschtz 条件
|  ( x , y , h)   ( x , y , h) | L | y  y |
又设初值 y0 是准确的 , 即 y0=y(x0), 则整体截断
误差 y ( xn )  y n  O ( h p )

289
单步法的收敛性
由于前面所研究的方法最低是 1 阶的 , 根据上
述定理 , 若增量函数关于 y 满足 Lipschtz 条件 ,
则方法收敛 .
|  ( x , y , h)   ( x , y , h) | L | y  y |
增量函数关于 y 的偏导数有界 , 则上面的条件
一定成立 .
在实际应用中 , 有时用这一增强的条件 .

290
单步法的稳定性
例考察初值问题
在区间 [0, 0.5] 上的解 . 分别用 Euler 显 , 隐
式格式和改进的 Euler 格式计算数值解。
节点
Euler 显式 Euler 隐式 改进 Euler 法 精确解
xn
0.0 1.0000 1.0000 1.0000 1.0000
0.1 2.0000 2.5000101 2.5000 4.9787102
0.2 4.0000 6.2500102 6.2500 2.4788103
0.3 8.0000 1.5625102 1.5626101 1.2341104
0.4 1.6000101 3.9063103 3.9063101 6.1442106
0.5 3.2000101 9.7656104 9.7656101 3.0590107

291
定义若某算法在节点 yn 上大小为  的扰动 ( 误
差 ) 于以后各节点值 ym(m>n) 上产生的偏差均
不超过 , 则称该算法是稳定的 .
一般分析时 , 只考虑模型方

将 Euler 公式用于模型方程有

设 yn 上有扰动 n, yn* = yn+n, 假设 Euler 公式


计算时不再产生新的扰动 ( 不考虑截断误差 ),
则有
因此

292
的充要条件为
此处 , 上述条件在 h 充分小时成

这说明 Euler 公式是条件稳定的 , 稳定性条件

293
再考虑后退的 Euler 公式
对于模型方程 , 后退的 Euler 公式为

类似的可以说明
的充要条件为
由于 <0, 这时恒成立
这说明后退的 Euler 公式是无条件稳定的 .

294
线性多步法
Euler 两步公式

Euler 两步公式每次只需计算一个函数 (f ) 值 ,
但其精度是两阶的 .
即 , 该公式精度与改进的 Euler 公式一致 , 但
计算量减少了一半 .

一般的多步法都有这一优点 .

295
基于数值积分的构造方法
前面的方法都是基于数值微分或者 Taylor 级数 .
数值积分公式也可以构造常微分方程数值解法 .

将方程 y’=f(x,y) 在区间 [xn,xn+1] 上进行积分 ,


得 x

n 1
y( x )  y( x ) 
n 1 n f ( x , y( x ))dx
xn

对上面的积分采用数值的方法进行近似计算
就可以得到 y(xn+1) 的近似值 .

296
基于数值积分的构造方法
xn 1
y( xn1 )  y( xn )   f ( x , y( x ))dx
xn
xn  1
左矩形公式  f ( x , y( x ))dx  hf ( xn , yn )
xn

yn1  yn  hf ( xn , yn ) Euler 公式
右矩形公式 xn  1
 xn
f ( x , y( x ))dx  hf ( xn1 , yn1 )
yn 1  yn  hf ( xn1 , yn1 ) 后退的 Euler 公
梯形公式  f ( x , y( x ))dx  h [ f ( xn式
xn  1
, yn )  f ( xn 1 , yn1 )]
xn 2
h
yn1  yn  [ f ( xn , yn )  f ( xn 1 , yn 1 )]
2
梯形公式
297
基于数值积分的构造方法
xn  1
y( xn 1 )  y( xn )   f ( x , y( x ))dx
xn

如果直接在 [xn,xn+1] 上利用已知的数值积分公


式 , 一般要利用区间内部的点 ( 除了前面的三
个公式 ), 而这样又要计算函数 f 的值 .
为例如避免这一情况 , 我们借用区间外部的点 .
若已知 (xn,fn),(xn-1,fn-1),···,(xn-r,fn-r), 构造插值多
项式近似代替 f(x,y(x)), 得到数值积分 , 进一步
可以得到 y(xn+1) 的近似值 .

298
Adams 显式公式
xn  1
y( xn1 )  y( xn )   Pr ( x )dx
xn

已知 (xn,fn),(xn-1,fn-1),···,(xn-r,fn-r), 构造插值多项式
Pr(x)( 利用 Newton 后插公式 ,t =(x-xn)/h):
 
r
j t
Pr ( xn  th)  
j0
(  1)
j
 j
f n j

将 Pr(x) 表达式带入前面的公式 , 得到下面的


Adams 显式公式
r r
y n 1  y n  h   j  j f n  j 或 yn1  yn  h  ri f n  i
j0 i 0

299
Adams 显式公式
对 (xn,fn),(xn-1,fn-1),(xn-2,fn-2) 三个数据点构造的
多项式为
t ( t  1)
P2 ( xn  t h)  f n  t ( f n  f n 1 )  ( f n  2 f n 1  f n  2 )
2
xn  1 1 t ( t  1)
 xn
Pr ( x )dx  h [ f n  t ( f n  f n1 ) 
0 2
( f n  2 f n 1  f n  2 )]dt
1 5
 h[ f n  ( f n  f n1 )  ( f n  2 f n 2  f n 2 )]
2 12
23 16 5
 h[ f n  f n1  f n 2 ]
12 12 12
因此有 yn1  yn  h[
23
fn 
16
f n1 
5
f n 2 ]
12 12 12
其它各阶公式的系数见书中表 5-7.

300
Adams 隐式公式
如果在构造插值多项式时 , 考虑数据点
(xn+1,fn+1), 则得到如下形式的 Adams 隐式公式
r
yn 1  yn  h  ri* f n  i 1
i 0

r=0 时得到的是后退的 Euler 公式 ,r=1 时得到


的是梯形公式 .
r=2 时得到公式 y  y  h[ 5 f  8 f  1 f ]
n 1 n n 1 n n 1
12 12 12

301
Adams 公式的截断误差
考虑 Adams 显式公式
h
yn1  yn  [55 f n  59 f n 1  37 f n  2  9 f n  3 ]
24
若 yn-k=y(xn-k)(k=0,1,2,3), 则 fn-k=y’(xn-k), 带入上
式 h
y  y( x )  [55 y '( x )  59 y '( x )  37 y '( x )  9 y '( x )]
n 1 n n n 1 n 2 n3
24
将右端各项在 xn 处进行 Taylor 展开 , 可以得到

302
Adams 公式的截断误差
h
yn 1  y ( xn )  [55 y '( x n )  59 y '( x n1 )  37 y '( x n 2 )  9 y '( x n  3 )]
24 2 3 4
h h ( 4) h ( 5)
y '( xn1 )  y '( xn )  hy ''( xn )  y '''( xn )  y ( xn )  y ( xn )  
2 6 24
4h2 8h3 ( 4 ) 16h4 ( 5 )
y '( xn 2 )  y '( xn )  2hy ''( xn )  y '''( xn )  y ( xn )  y ( xn )  
2 6 24
9 h2 27h3 ( 4 ) 81h4 ( 5 )
y '( xn 3 )  y '( xn )  3hy ''( xn )  y '''( xn )  y ( xn )  y ( xn )  
2 6 24
h2 h3 h4 ( 4 ) 49 ( 5)
yn 1  y( xn )  hy '( xn )  y ''( xn )  y '''( xn )  y ( xn )  y ( xn )  
2 6 24 144
h2 h3 h4 ( 4 ) h5 ( 5 )
y( xn1 )  y( xn )  hy '( xn )  y ''( xn )  y '''( xn )  y ( xn )  y ( xn )  
2 6 24 120
251 5 ( 5 )
y( xn 1 )  yn1  h y ( xn )
720

303
Adams 公式的截断误差
h
yn1  yn  [55 f n  59 f n1  37 f n 2  9 f n 3 ]
24
251 5 ( 5 ) 四阶公式
y( xn1 )  yn1  h y ( xn )
720
h
yn 1  yn  [9 f n1  19 f n  5 f n1  f n 2 ]
24

y( xn1 )  yn1 
19 5 ( 5 )
h y ( xn ) 四阶公式
720

304
Adams 预测 - 校正系统
Adams 隐式公式一般不用迭代法求解 , 而是
用显式公式进行预测之后 , 用它来进行校正 ,
即有如下的 Adams 预测 - 校正系统
h
预测 yn1  yn  [55 f n  59 f n1  37 f n 2  9 f n 3 ]
24
f n1  f ( xn1 , yn 1 )

h
校正 yn 1  yn  [9 f n 1  19 f n  5 f n 1  f n  2 ]
24
f n1  f ( xn1 , yn 1 )

305
算例 (Adams 四阶预测 - 校正系
统 )
求解初值问题  y '  y  x (0  x  1)
 2
 y
 y(0)  1

解 取 h=0.1, 前三个初值 y1,y2,y3 采用四阶


Runge-Kutta 方法计算 .

计算结果见下表 .

306
算例 ( 四阶 Adams 预测 - 校正系

x y ( 预测 ) y ( 校正 )
)
精确值 R (A) R (R-K)
n n n n n

0.1 1.09544553 1.09544512 -4.17 -4.17


0.2 1.18321675 1.18321596 -7.89 -7.89
0.3 1.26491223 1.26491106 -11.64 -11.64
0.4 1.34155176 1.34164136 1.34164079 -5.71 -15.67
0.5 1.41416568 1.41421383 1.41421356 -2.71 -20.16

表中误差的结果应乘以 10-7

307
算例 ( 四阶 Adams 预测 - 校正系

x y ( 预测 ) y ( 校正 )
)
精确值 R (A) R (R-K)
n n n n n

0.6 1.48321206 1.48323982 1.48323970 -1.27 -25.25


0.7 1.54917625 1.54919338 1.54919334 -0.42 -31.14
0.8 1.61244047 1.61245154 1.61245155 0.13 -38.00
0.9 1.67331257 1.67332000 1.67332005 0.54 -46.06
1.0 1.73204556 1.73205072 1.73205081 0.88 -55.58

表中误差的结果应乘以 10-7

308
对于此例 , 可以看出 ,Adams 的稳定性比 R-K
方法好 ,
计算到 x=5 时 , 四阶 Adams 预测 - 校正方法的
的误差为 1.88*10- 4,
而四阶 Runge-Kutta 的误差为 -93.36*10-4.
另外 , 其计算量也小 ( 每步函数值只计算两次 ,
而 Runge-Kutta 方法计算四次 ).

309
基于 Taylor 展开的方法
在 Adams 方法中 ,yn+1 的计算都是用 yn 加上 f 的
函数的线性组合 .
在 Euler 两步方法中 , yn+1 的计算是用 yn-1 加上 f
的函数的线性组合 .
事实上 , yn+1 的计算可以采用如下形式 .
r r
yn1  
k 0
k yn k  h   k yn  k
k 1

当 -1=0 时是显式公式 , 否则是隐式公


式.
310
基于 Taylor 展开的方法
r r

yn1  
k 0
k yn  k  h   k yn  k
k 1

对于这种形式的公式 , 一般采用 Taylor 展开


的方法确定其中的系数 .
假设 yn k  y( xn  k ), yn  k  y( xn  k )

然后在 xn 处进行 Taylor 展开 , 就可以确定待


定系数 .

311
基于 Taylor 展开的方法
考察 r=1 时的公式 .
yn1 y( xn1 )  yn  hyn  yn 
h2
2
h3
6 yn  h4
24 y ( 4)
n  h5
120 yn( 5 )  
  0 yn yn  yn
1 yn1
2 3
h4 h5
yn1  yn  hyn  h2 yn  h6 yn  24 y ( 4)
n  120 yn( 5)  
 h(  1 yn 1 hyn 1 
3
h4 h5
hyn  h2 yn  h2 yn  6 y ( 4)
n  24 yn( 5 )  
  0 yn hyn  hyn
 1 yn 1 ) hyn 1  3
hyn  h2 yn  h2 yn  h4
6 y (4)
n  h5
24 yn( 5 )  
1   0  1
1  1   1   0  1 1  1  3 1  31
1  1  2   1  2  1 1  1  4   1  4  1

312
基于 Taylor 展开的方法
如果要求公式有 4 阶 1   0  1
精度 , 则右边等式成立 1  1   1   0  1
解得 1  1  2   1  2  1
1 4 1 1  1  3 1  31
 0  0, 1  1,  1  ,  0  , 1 
3 3 3 1  1  4   1  4  1
得到如下公式
h
y n 1  yn 1  ( yn 1  4 yn  yn 1 ) Simpson 公式
3

313
基于 Taylor 展开的方法
若要求是显式公式 , 则 -1=0, 1   0  1
划去右边最后一个等式 1  1   1   0  1
解得 1  1  2   1  2  1
 0  4, 1  5,  1  0,  0  4, 1  2 1  1  3 1  31
1  1  4 1  41
得到如下公式
yn 1  4 yn  5 yn 1  h( 4 yn  2 yn 1 )

该公式具有 3 阶精

314
1   0  1   2   3
1  1  2基于
 2  3 3Taylor
  0  1 展开的方法
2  3
Taylor
1 r=3
1 考察 4时的显式公式
2  9 3  2 1 . 4  2  6  3
1  1  8 2  27 3  31  12  2  27  3
1yn 1 1  16 1n  32  3
2 3
h4 ( 4) h5
y(x2n 1 )81
y3n 4hy h
2 y
 n2 
 6 y
h
108 n 24 y n  120 yn( 5 )  
  0 yn y n  yn
1 yn 1
2 3 4 5
y n 1  y n  hy n  h
2 y 
n  h
6 y 
n  h
y
24 n
( 4)
 ( 5)
120 n  
h
y
 2 yn  2 yn 2  yn  2hyn  42h yn  86h yn  1624h yn( 4 )  32120h yn(5)  
2 3 4 5

 3 yn 3 yn3  yn  3hyn  9h2 yn  276h yn  8124h yn( 4 )  243120h yn( 5)  
2 3 4 5

 h(  0 yn hyn  hyn


 1 yn 1 hyn 1  3 4
hyn  h2 yn  h2 yn  h6 yn( 4 )  h24 yn( 5 )  
5

  2 yn  2 hyn  2  hyn  2h2 yn  42h yn  8h6 yn( 4 )  1624h yn(5)  
3 4 5

  3 yn  3 ) hyn 3  hyn  3h2 yn  92h yn  276h yn( 4 )  8124h yn(5 )  
3 4 5

315
基于 Taylor 展开的方法
考察 r=3 时的显式公式 .
yn 1 y( xn1 )  yn  hyn  yn  yn  y  yn( 5 )  
h2
2
h3
6
h4
24
( 4)
n
h5
120
  0 yn y n  yn
1 yn 1
2 3 4 5
y n 1  y n  hy n  h
2 y 
n  h
6 y 
n  h
y
24 n
( 4)
 ( 5)
120 n  
h
y
 2 yn  2 yn 2  yn  2hyn  42h yn  86h yn  1624h yn( 4 )  32120h yn(5)  
2 3 4 5

 3 yn 3 yn3  yn  3hyn  9h2 yn  276h yn  8124h yn( 4 )  243120h yn( 5)  
2 3 4 5

 h(  0 yn hyn  hyn


 1 yn 1 hyn 1  3 4 5
hyn  h2 yn  h2 yn  h6 yn( 4 )  h24 yn( 5 )  
  2 yn  2 hyn  2  hyn  2h2 yn  42h yn  8h6 yn( 4 )  1624h yn(5)  
3 4 5

  3 yn  3 ) hyn 3  hyn  3h2 yn  92h yn  276h yn( 4 )  8124h yn(5 )  
3 4 5

316
基于 Taylor 展开的方法
如果要求公式有 4 阶精度 , 则下列等式成立
55 59
1   0  1   2   3  0  1,  0 
24
, 1  
24
1  1  2 2  3 3   0  1   2   3
37 9
1  1  4 2  9 3  2 1  4  2  6  3  2  , 3  
24 24
1  1  8 2  27 3  31  12  2  27  3
1  1  16 2  81 3  4 1  32  2  108 3
该方程组有 8 个未知数 ,5 此时得到的即为显
个方程 , 可以有三个自由变 式的 Adams 公式 .
量. 根据 Taylor 展式 ,
令 1=2=3=0,
可以得到余项公式 .

317
Milne 公式
1   0  1   2   3
1  1  2 2  3 3   0  1   2   3 此时得到公式
1  1  4 2  9 3  21  4 2  6 3 为 Milne 公式
1  1  8 2  27 3  31  12  2  27  3
1  1  16 2  81 3  4 1  32  2  108 3

令 0=1=2=0, yn1  yn 3 


4h
( 2 yn  yn 1  2 yn  2 )
3
得 8
 3  1,  0  , 1  
4
3 3
Milne 公式常与
8 Simpson 公式构成预测 -
 2  , 3  0
3
校正系统 .
318
Hamming 公式
类似的方法可以推出隐式的 Adams 公式 , 及
常用的 Hamming 公式 ( 该公式稳定性较好 )
1 3h
yn1  (9 yn  yn  2 )  ( yn 1  2 yn  yn 1 )
8 8
Milne 公式可与 Hamming 公式构成预测 - 校
正系统 .
事实上 r =3 时 , 可以选择系数达到更高的精
度 , 不过在实际应用中 , 一般最多选取 4 阶的
公式 .
319
方程组的求解
考察一阶微分方程组 初始条件为
 y1  f1 ( x , y1 , y2 , , y N )  y1 ( x0 )  y10
 y2  f 2 ( x , y1 , y2 , , y N )  y2 ( x0 )  y20
   
 y   f ( x , y , y , , y )  0
 N N 1 2 N y
 N 0( x )  y N
采用向量的记号
y  ( y1 , y2 , , y N )T ; y 0  ( y10 , y20 , , y N0 )T , f  ( f1 , f 2 , , f N )T
上面的方程组可以记为
求解方程的各种方法都
 y  f ( x , y )
y ( x0 )  y0

可以用来求解方程组 .

320
高阶方程的求解
考察 m 阶微分方程 初始条件为
y ( m )  f ( x , y , y, , y ( m 1) )  y( x0 )  y0
 y( x0 )  y0

引进新的变量  y ( m 1) ( x )  y ( m 1)
( m 1) 0 0
y1  y , y2  y , , ym  y
则 m 阶方程可以化为一阶方程组
 y1  y2
 y2  y3 再求解该方程组即可求
 得原微分方程的解 .
 ym 1  ym
 ym  f ( x , y1 , y2 , , ym )

321
算例 ( 高阶方程 )
用 4 阶 Runge-Kutta 方法求解方程 .

y  3 y  2 y  x  1, 0  x  10
y(0)  2, y(0)  1
 
解 : 设 y1=y,y2=y’, 则 再设 Y  y1 , Y0  2
y2 1
y有
1  y2
 2 y  3 y  x  1 
y   2 y  3 y  x  1 f ( x , Y ) 
2 1 2
1
y2
2

 y ( 0)  1
y ( 0)  2
1
2

322
算例 ( 高阶方程 )
2 y  3 y  x  1 
Y   y  ,Y   12  , f ( x , Y )  
1 y
2
y 2
0
1 2

Runge-Kutta 公式为 取 h=0.2, 第一步计算过程


n 1
h
Y  Y  ( K  2 K  2 K  K ) K为
6 n 1 2 1 3
f ( x
4 0 , Y0 )   4  3  0  1   0 
1  1

其中 K1  f ( xn ,Yn ) K 2  f ( x0  , Y0  K1 )  f ( 0.1,  2.1 )


h h
2 2 1

   
h h 1
K 2  f ( xn  , Yn  K1 )
2 2   1
4.2  3  0.1  1 0.1
h h
K 3  f ( xn  , Yn  K 2 )
2 2    
K 3  f (0.1, 2.1 )  0.99
0.99 0.13
K 4  f ( xn  h, Yn  hK 3 )
   
K 4  f (0.2, 2.198 )  0.974
0.974 0.274
h

Y1  Y0  ( K1  2 K 2  2 K 3  K 4 )  2.1984667
6 0.9755333 
323
算例 ( 高阶方程 )
xn Yn y(xn)
0.2 (2.1984667, 0.9755333) (2.1984466, 0.97549041)
0.4 (2.3855009, 0.8791838) (2.3854395, 0.87905423)
0.6 (2.5422297, 0.6623530) (2.5420896, 0.66206034)
0.8 (2.6375660, 0.2496112) (2.6372828, 0.24902472)
1.0 (2.6215527,-0.4751457) (2.6210178,-0.47624622)

该方程的精确解为 y( x )  1 (5  4e x  e 2 x  2 x )
4

324
边值问题
考虑二阶微分方程 y”=f (x,y,y’),
若定解条件由 y(a)=,y’(a)=m 给出 , 称为初
值问题 .
在实际应用中 , 若在区间 [a,b] 上求解上述方
程 , 常给出边界条件 y(a)=,y(b)=, 称为边值
问题 .

325
试射法
对于常微分方程边值问题 , 一种比较初等的方
法是试射法 . 先猜测出 y’(a) 值的下界 m1, 上界
m2, 然后分别在 y’(a)=m1 与 y’(a)=m2 的条件下求
解初值问题的微分方程 .
获得 y(b) 的两个值后 , 与已知的 y(b) 的值进行
比较 .
然后再反复调整 , 得到最终的解 .
这一方法显然有很大的局限性 .

326
线性常微分方程的差分方程方法
下面主要研究线性方程 y”+p(x)y’+q(x)y=r(x)
的解法 .
取一定的步长 h, 将导数用差商去近似 .
yn 1  2 yn  yn 1 yn 1  yn 1
yn  2
, yn  ,
h 2h
得到以下的方程
yn1  2 yn  yn 1 yn1  yn 1
 pn  qn yn  rn ( n  1, 2, , N  1)
h 2
2h

327
线性常微分方程的差分方程方法
yn1  2 yn  yn 1 yn 1  yn 1
 pn  qn yn  rn ( n  1, 2, , N  1)
h 2
2h
将边界条件 y0=, yN= 代入 , 可以得到方程组
 2 h 2 h
 ( 2  h q1 ) y1  (1  2 p1 ) y2  h r1  (1  2 p1 )
 h 2 h 2
 (1  ) y n 1  (  2  h q n ) y n  (1  pn ) y n 1  h rn ( n  2, 3, , N  2)
 2 2
h 2 2 h
 (1  pN 1 ) y N  2  ( 2  h q N 1 ) y N 1  h rN 1  (1  p N 1 ) 
 2 2

328
线性常微分方程的差分方程方法
前面的方程组的系数矩阵为三对角矩阵
 2  h2 q1 1  h2 p1 0 0  0 0 0 
 1  h2 p2 2
2  h q2 1  2 p2
h
0  0 0 0 
0 1  h2 p3 2
2  h q3 1  h2 p3  0 0 0 
 
        
0 0 0 0  1  h2 pN  2 2  h2 q N  2 1  h2 pN  2 
 0 0 0 0  0 1  h2 pN 1 2  h2q N 1 

可用追赶法求解方程组 .

329
算例 ( 边值问题 )
用差分方法求解边值问题 解 取步长 h=0.2, 节


y  y  x , 0  x  1
y(0)  0, y(1)  1 xn=0,0.2,0.4,0.6,0.8,1.0
.
 2.04 1 0 0 得到的方程组为
  y1   0.008 
 1 2.04 1 0   y2    0.016 
 0 1 2.04 1   y3   0.024 
 0 0 1 2.04   y4   0.968 

解此方程组的到的解见下表 .

330
算例 ( 边值问题 )
xn yn y(xn) Rn(10-4)
0.2 0.142811 0.142641 -1.70
0.4 0.299335 0.299033 -3.02
0.6 0.483832 0.483480 -3.52
0.8 0.711682 0.711411 -2.71

该方程的精确解为 2(e x  e  x )
y( x )  1
x
ee

331
本章小结
建立常微分方程 ( 初值 ) 数值公式的四种方法 :
数值微分 Euler 方 后退的 Euler 方 Euler 两步方
法 法 法
数值积分 梯形方法 Adams 方法 Simpson 方法

Taylor 级 Runge-Kutta 方 Hamming 方 Milne 方


数 法 法 法
预测 - 校 改进的 Euler 方 梯形 -Euler 两
正 法 步
Adams 系统 Milne-Hamming

Milne-Simpson

边值问题的方法 差分方法

332
本章小结
各种方法的比较
Taylor 级数方法 : 具有一般性 , 不利于应用
Runge-Kutta 方法 : 精度高 , 计算量大 , 适用
于光滑性好的函数
Euler, 改进 Euler: 计算量小 , 精度底 , 适用于
光滑性差的函数
多步方法 : 计算量小 , 必须用其它方法提供初

333
第六章
方程求根
作业
一 . 教材 P164 第 9 题

二 . 分别有 Newton 法与改进的 Newton 法求解


方程 1-cosx=0.( 取初值 x0=0.5, 计算到 x2)

335
作业
三 . 用下列方法求 f(x)=x3-2x-1=0 在区间 [1,2]
内的根 .
(1) 二分法 ( 精确到小数点后 2 位 )
(2)Newton 法 (x0=1, 求 x2)
(3) 弦截法 (x0=1,x1=2, 求 x3)
(4) 抛物线法 (x0=1,x1=2,x2 为弦截法中 x2, 求 x3)

336
问题的提出
实际应用中很多问题常常归结为解方程 f(x)=0.
这里 f(x) 是单变量 x 的函数 , 它可以是代数多
项式 , 也可以是超越函数 .
满足方程 f(x)=0 的 x 值通常叫做方程的根或
解 , 也叫函数 f (x) 的零点 .
如果 f(x)=(x-)mg(x) 且 g()≠0, 则称为 f(x)=0
的 m 重根 .
m=1 称为单根 , m>1 称为重根 .

337
求根步骤
方程的求根问题一般分两步进行 :
1. 根的搜索 确定根所在的区间 , 使方程在
这个小区间内有且仅有一个根 , 这一过程称为
根的搜索 , 做好根的搜索工作 , 就可以获得方
程各个根的近似值 .
2. 根的精确化 已知一个根的近似值后 , 再
用一种方法把此近似值精确化 , 使其满足给定
的精度要求 .

338
设函数 f (x) 在 [a, b] 内连续,严格单调,
且有 f (a)·f (b) < 0 ,则在 [a, b] 内方程 f (x)
= 0 有且仅有一个实根。
y f(a)f(b)<0→ 至少一个根
严格单调→最多一个根
f(x)
设函数 f(x) 在 [a,b] 上
连续 , 且 f(a)f(b)<0,
o 这时称 [a,b] 是 f(x)=0
a x* b x 的有根区间 .

339
有根区间的搜索
有根区间的搜索可以采用如下方法 :
(1) 作 y=f(x) 的草图 , 由 y=f(x) 与横轴交点的
大致位置来确定根的搜索区间 .
(2) 逐步搜索 , 在连续区间 [a,b] 内 , 选择一系
列的 x 值 ( 等步长或不等步长 ), 当出现两个
相邻点上函数值反号时 , 在此小区间内至少有
一个实根 .

340
二分法
二分法的基本思想 :
用对分区间的方法,通过判别函数 f(x) 的符
号 , 逐步将有根区间缩小 , 使在足够小的区
间内 , 方程有且仅有一根 .

341
二分法
考察 f(x) 的有根区间 [a,b], 用中点 x0=(a+b)/2
将区间分成两半 , 分别考虑以下三种情况 :
(1)f(x0)=0, 此时 x0 是所求的根 ;
(2)f(x0) 与 f(a) 异号 , 此时令 a1=a,b1=x0, 得到
有根区间 [a1,b1], 其长度是原来区间的一半 ;
(3)f(x0) 与 f(b) 异号 , 此时令 a1=x0,b1=b, 也得
到有根区间 [a1,b1], 长度也是原区间的一半 .
注 : 由于 f(a) 和 f(b) 异号 , 如果 f(x0)≠0,(2)(3)
两种情况必居其一 .
342
上述的过程可以一直进行下去 , 或者求出了
根 , 或者求出一系列的有根区间 :

如果我们不考虑中间求出根的情况 , 由于根
x* 在区间 [ak,bk] 内 , 令 xk=(ak+bk)/2, 我们有
|x*-xk|≤(bk-ak)/2=(b-a)/2k+1
只要二分足够多次 (k 足够大 ), 就有
|x*-xk|<  , 其中 是预先设定的精度 .

343
二分法的计算步骤
step1 准备计算 f (x) 在有根区间 [a, b] 端点处
的值
step2 二分计算 f(x) 在区间中点处的函数值
step3 判断若 ,则 即是根 , 计算过程
结束 , 否则检验:
•若 与 f (a) 异号,则根位于区间
内,

•若 代替 b;
与 f (a) 同号,则根位于区间
内,以 代替 a ;

344
二分法的计算步骤
反复执行 step2 和 step3 ,直到区间 [a, b] 长
度缩小到允许误差范围之内,此时区间中点
即可作为所求的根。
何时结束 ?

a a x*
bx1 b


不能保证 x 的精
度 345
例 2 求方程 f(x)=x3-x-1=0 在区间
[1.0,1.5] 内的一个实根 , 精确到小数点后
第二位 .
解 : 这里 a=1.0,b=1.5, 而 f(a)<0,f(b)>0, 取区间
的中点 x0=1.25, 由于 f(x0)<0, 根在 [x0,b] 内 , 逐
渐二分得到下面的表 .

346
例 2 求方程 f(x)=x3-x-1=0 在区间
[1.0,1.5] 内的一个实根 , 精确到小数点后
第二位 .
k ak bk xk
0 1.0(-) 1.5(+) 1.25(-)
1 1.25(-) 1.375(+
2 1.375(+ )1.3125(-
3 1.3125(- ) )1.3438(+
4 ) 1.3438(+ )1.3281(+
5 )1.3281(+ )1.3203(-)
6 1.3203(-) ) 1.3242(-)

347
例 2 求方程 f(x)=x3-x-1=0 在区间
[1.0,1.5] 内的一个实根 , 精确到小数点后
第二位 .
k ak bk xk
0 1.0(-) 1.5(+) 1.25(-)
最终我们求得根的近似之为 x6=1.3242, 满足
1 1.25(-) 1.375(+
|x*-x6|<0.005 1.375(+ )1.3125(-
2
3 1.3125(- ) )1.3438(+
4 ) 1.3438(+ )1.3281(+
5 )1.3281(+ )1.3203(-)
6 1.3203(-) ) 1.3242(-)

348
误差分析
第 0 步产生的 有误差
x第
1, k 步产生的 x 有误
k

对于给定的精度  , 可估计二分法所需的步数
k:
1.计算简单,方法可靠;
2.对 f (x) 要求不高 ( 只要连续即可 ) ;
3.收敛性总能得到保证。
1.无法求复根及偶重根
2.收敛慢
一般常用来为其它方法求近似根时提供初值。
349
迭代法
迭代法的基本思想 :
迭代法是一种逐次逼近的方法 , 首先给
定一个粗糙的初始值 , 然后用同一个迭代公
式 , 反复校正这个初值 , 直到满足预先给定的
精度要求为止 .
迭代法的关键在于如何构造一个合适的
迭代公式 .

350
迭代法
等价变换
f (x) = 0 x =  (x)

f (x)=0 的 y=x 与 y=  (x)


的交点

从一个初值 x0 出发,计算 x1 = (x0), x2 =
(x1), …, xk+1 = (xk), … 若
收敛,即存在 x* 使得
若 连续,则由

可知 x* = (x* ), 则 x* 351
例 3 求方程 f(x)=x3-x-1=0 在
x0=1.5 附近的根 x*
将方程改写为 x=(x+1)1/3. 得到迭代公式
xk+1=(xk+1)1/3.
根据 x0=1.5 得到 x1=1.35721,
…,x7=1.32472,x8=1.32472
由于 x7 和 x8 已经前六位相等 , 终止迭代 .
我们求得方程的近似根为 1.32472.

352
迭代图形
y=(x)
对函数的迭代过程 , 我们可以用几何图象来直观
地显示它 . 在平面上 , 先作出函数 y=(x) 与 y=x
的图象 , 对初值 x0, 在曲线上可确定一点 P0.

过 P0 引平行 x 轴的直线交直线 y=x 于点 Q1, 再过


Q1 作平行 y 轴的直线 , 它与曲线的交点记为 P1,
重复上面的过程就得到一系列点 P1,P2,…, 这些
点逐步趋向于曲线 y=(x) 与直线 y=x 的交点 P*. 353
迭代图形
对函数的迭代过程 , 我们可以用几何图象来直观
地显示它 . 在平面上 , 先作出函数 y=(x) 与 y=x
的图象 , 对初值 x0, 在曲线上可确定一点 P0.

过 P0 引平行 x 轴的直线交直线 y=x 于点 Q1, 再过


Q1 作平行 y 轴的直线 , 它与曲线的交点记为 P1,
重复上面的过程就得到一系列点 P1,P2,…, 这些点
逐步趋向于曲线 y=(x) 与直线 y=x 的交点 P*. 354
迭代法的收敛性
对于前面的方程 f(x)=x3-x-1=0, 如果取迭代公
式 xk+1=xk3-1, 仍然取初值 x0=1.5, 则有
x1=2.375,x2=12.39,x3=1901,…,
显然迭代是发散的 .
下面的图形给出了迭代收敛和发散的几种情
况.

355
y y=x y y=x
p1 p0
y=(x)
p0

 p1
y= (x)

x x
x0 x1 x* x0 x* x1
y y=x y y=x
y= (x)
y= (x)
p0

p0
 p1

p1

x x
x1 x0 x* x0 x* x1
356
迭代法的收敛性
定理考虑方程 x = (x), (x)C[a, b], 若
( I ) 当 x[a, b] 时 , (x)[a, b];
( II ) 存在 0  L < 1 使得 | ’(x) |  L < 1 对
任意 x[a, b] 成立 .
则迭代过程 xk+1 = (xk) 对于任意初值 x0[a, b]
均收敛于 x =(x) 的根 x*, 且有误差估计式 :


357
迭代法的收敛性
x x
y y=(x)
y=x y y=x

y=(x)
P*
P0(x0,x1)
P* P1
o o
x* x1 x0 x x1 x0 x* x0 x

358
证明:① f(x) 在 [a, b] 上有根?

② 根唯一? 有根 
反证:若不然,设还有
 在x * 和x 之间
而 
③ 当 k   时 , xk 收敛到
x*?
 L | x *  xk 1 |  ......  Lk | x *  x0 | 0

L<1
359
④ 可用
来控制
收敛精度


L 越小 收敛
越快

360
注:定理条件非必要条件 , 可将 [a, b] 缩小 , 定义
局部收敛性 : 若在 x* 的某 邻域
B= { x | | x  x* |   }
有 C1[a, b] 且 |’(x*) | < 1, 则由
则由 x0B 开
始的迭代收敛 . 即调整初值可得到收敛的结果 .

361
迭代法的局部收敛性
定义:对于方程 x=(x), 若在 x* 的某个邻域
内,对任意初
值 , 迭代格式 xk+1=(xk) 都收
敛 , 则称该迭代格式在 x* 的附近是局部收敛
的。
定理:设方程 x=(x) 有根 x*, 且在 x* 的某
个邻域
内 (x) 存在一阶连续导数 , 则
( 1 )当 时 , 迭代格式
局部收敛;
( 2 )当 时 , 迭代格式
发散。 362
迭代法的计算步骤
step1 准备 提供迭代初值 x0;
step2 迭代 计算迭代值 x1=(x0)
step3 控制 检查 |x1-x0|: 若 |x1-x0|> ,( 为预先
指定的精度 ), 则以 x1 替换 x0 转 step2 继续迭代 ;
当 |x1-x0|≤ 时终止计算 , 取 x1 作为所求的结果 .

363
Steffensen 加速法
y
y =  (x)
y=x

P(x1, x2)

P(x0, x1)

x
x1 x* x2 x0

364
Steffensen 加速法
一般地 , 有

365
算例
例 : 求方程 x3-x-1=0 在 x0=1.5 附近的根 , 设建立下列相
应的迭代公式 , 分析收敛性 .
解:
(x)

在区间 [1,2] 上 收敛

2)x=x3-1

在区间 [1,2] 上 发散

366
算例
用 Steffensen 法求方程 x3-x-1=0 在 1.5 附近的根

x0=1.5
=1.35721
=1.33086
=1.32490

=1.32475
=1.32472
x2=1.32472
367
算例
对于第二种迭代格式, xk+1=xk3-1
k xk
0 1.50000
x0=1.5
1 2.37500 12.3965 1.41629
=2.375
2 1.84092 5.23887 1.35565
=12.3965
3 1.49140 2.31727 1.32895
4 1.34706 1.44435 1.32480
以下的求解过程为 5 1.32517 1.32712 1.32472
6 1.32472

368
Newton 法
原理 : 将非线性方程逐步化为线性方程来求解 .
设 f (x)=0 有近似根 xk, 将 f(x) 在 xk 处作一阶
Taylor 展开
 在 xk 和 x 之间 .
将 (x*  xk)2 看成高阶小量 , 则有 :

369
Newton 法

线性方程

Newton 公式

只要 fC1, 每一步迭代都有 f ’(xk)  0, 而且 {xk}


有极限 x*, 则 x* 就是 f 的根 .

370
Newton 法的几何解释

迭代公式就是切线
与 x 轴交点的横坐
标 , 所以牛顿法是用
切线与 x 轴的交点
来近似代替曲线与 x o
x* x
轴交点的横坐标 .

371
Newton 迭代法的计算步骤
step1 准备选定初始值 x0, 计算 f0=f(x0) 和 f0’=f’(x0)
step2 迭代按公式 x1=x0-f0/f0’ 迭代一次 , 得新的近
似值 x1, 计算 f1=f(x1) 和 f1’=f’(x1).
step3 控制如果 x1 满足 | |<1 或 |f1|<2, 则终止迭
代 , 以 x1 作为所求的根 ; 否则转 step4. 此处 1,2 是
允许误差 , 而  | x1  x0 | if | x1 | C
   | x1  x0 | if | x | C
 | x1 | 1

其中 C 是取绝对误差或相对误差的控制常
数 , 一般可取 C=1.
372
Newton 迭代法的计算步骤
step4 修改 如果迭代次数达到预先指定的
次数 N, 或者 f1’=0, 则方法失败 ;
否则以 (x1,f1,f1’) 代替 (x0,f0,f0’) 继续迭代。

373
迭代法的收敛速度
定义:设序列 {xk} 收敛于 x*, 并记
ek=xk-x*,(k=0,1,2,···)
如果存在非零常数 c 和正常数 p, 使得

则称序列 {xk} 是 p 阶收敛的 .


注 : 上面的极限通常换为

374
定理若 (x) 在 x* 附近的某个邻域内有 p 阶连续
导数 , 且
则对一个任意靠近 x* 的初始值 , 迭代公式
xk+1=(xk) 是 p 阶收敛的,且有

注如果 p=1 ,要求


证明

=0
x* k
C

375
Newton 法的局部收敛性
一般 迭代 , 若              , 称为线性
收敛 , 这时 p = 1 , 0 < C < 1 。

 Steffensen 加速有         
称为超线性收敛 。

 Newton 迭代
, 只要
就有 p  2. 重根是线性收敛的。

376
有根 根唯一

定理 (收敛的充分条件)设 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 ;
则牛顿法产生的序列 { xk } 收敛到 f (x) 在
f ( x) f ( x ) f "( x )
 ([a,
x ) b]x 的唯一根。  '( x ) 
f '( x ) [ f '( x )]2
 '( x*)  0 Newton 法在根
附近至少二阶收

377
注: Newton 法收敛性依赖于 x0 的选取。

x0 x0 x
0
x*

378
下山法—— Newton 法局部微调
原理:若由 xk 得到的 xk+1 不能使 | f | 减小,则在 xk 和
xk+1 之间找一个更好的点 ,使得 。

xk xk+1

注: = 1 时就是 Newton 公式。


当  = 1 代入效果不好时,将  减半计
算。
379
改进 Newton 迭代公式 ( 补充 )
在 f ’(x*)=0 时 ,Newton 法是线性收敛的 , 收敛速
度不快 . 此时 x* 是 f(x)=0 的重根 , 设 f(x)=(x-
x*)mq(x), 且 q(x*)≠0. 令 m
f ( x) ( x  x*) q( x )
( x)  
f '( x ) m ( x  x*)m 1 q( x )  ( x  x*)m q '( x )
q( x )
 ( x  x*)
mq( x )  ( x  x*)q '( x )
q( x*) 1
由于 q(x*) ≠0, 所以 
mq( x*)  ( x *  x*)q '( x*) m
0

因此 ,x* 是 (x) 的单根 , 对 (x) 用牛顿法 , 就


可以求出 x*, 是二阶收敛的 .
380
弦截法
Newton 法要计算 f 和 f ’, 计算量较大 , 比
较费时 . 现用 f 的值近似 f ’, 可减少计算量。
割线

收敛比 Newton 法 慢 , 切线
且对初值要求同样高。

x1 x0

切线斜率割线斜率

需要 2 个初值 x0 和
x 1. 381
抛物线法
如果已知 f(x)=0 的三个近似根 , 以这三个点
为插值节点构造二次插值多项式 P2(x), 然后
以 P2(x) 的一个零点作为新的近似根 .
这样的迭代过程称为抛物线方法 .
设已知的三点为 xk-2,xk-1,xk, 则插值多项式为

P2(x)=f[xk]+f[xk,xk-1](x-xk)+f[xk,xk-1,xk-2](x-xk)(x-xk-1)

382
抛物线法
P2(x) 有 2 f ( xk )
xk 1  xk 
两个零点    2  4 f ( xk ) f [ xk , xk 1 , xk  2 ]
其中 = f[xk,xk-1]+f[xk,xk-1,xk-2](xk-xk-1)
在实际计算时 , 我们选取更接近于 xk 的一个
零点作为 xk+1.
即分母中的正负号以为准 , 这样可使分母
的绝对值较大 .
2 f ( xk )
xk 1  xk 
  sign( )  2  4 f ( xk ) f [ xk , xk 1 , x k  2 ]

383
例:分别用迭代法 ,Newton 法 , 弦截法 , 抛物线法
(x0=1.5,x1=1.0) 求方程 x3-x-1=0 在 x=1.5 附近的根
解: Newton 法

取初值 x0=1.5,

x2=1.32520,x3=1.32472,x4=1.32472

384
( 3 )弦截法 x0=1.5, x1=1

x0=1.5,f(x0)=0.875,x1=1,f(x1)=-1

x3=1.34830,x4=1.32341, x4=1.32469,
x5=1.32472, x6=1.32472

385
( 3 )抛物线法 x0=1.5, x1=1.0, x2=1.25
f(x0)= 0.875 f(x1)=-1 f(x2)=-0.29688

f[x1, x0] =3.75 f[x2, x1] =2.8125 f[x2, x1 , x0] =3.75

= f[x2, x1] + f[x2, x1 , x0](x2-x1) =3.75


2 f ( x2 )
x3  x2  2 =1.32373
    4 f ( x2 ) f [ x2 , x1 , x0 ]

x4=1.32472, x5=1.32472

386
例 : x=0 是 ex-x-1=0 的二重根 , 比较用 Newton
法和改进的 Newton 法求解方程 ex-x-1=0( 取初
值为 1)
Newton 法 : 设 f(x)=ex-x-1,Newton 法的迭代公式为
f ( xn ) e xn  x n  1
xn 1  xn   xn 
f '( xn ) e xn  1
设 f ( x) e x  x  1
( x)  
f '( x ) ex 1
改进的 Newton 法的迭代公式为
 ( xn ) e xn ( xn2  2)  e 2 xn  1
xn 1  xn  
 '( xn ) e xn ( xn  1)  1

387
用 Newton 法和改进的 Newton 法进行迭代得
到的结果见下面的表格

n xn 法改 n xn

Newton

0 1.0 进 0 1.0
1 0.581977 的 1 -2.34211 10-1

Newton
2 0.319055 2 -8.45828 10-3
3 0.167996 3 -1.18895 10-4
4 0.0863489 4 -6.86382 10-6
5 0.0437957 5 -2.80852 10-7

可以看出 , 改进的 Newton 法的收敛速度比


Newton 法要快的多 .
388
多项式求值
多项式求值的秦九韶方法
设 f(x)=a0xn+a1xn-1+ … +an-1x+ an (a0≠0), 其系
数均为实数 .
要计算 f(x) 在一点 x0 的函数值 .
若直接带入计算 , 则乘法的计算次数为
n+n-1+···+1=n(n+1)/2

389
多项式求值
将多项式重新写为
f(x)=a0xn+a1xn-1+ … +an-1x+ an
=an+x(an-1+x(···+x(a1+a0x)))
则乘法计算次数减少为 n.
上述计算过程可以写为
b0=a0,bi=ai+x0bi-1(i=1,2,···,n),
f(x0)=bn.

390
多项式求值
b0=a0,bi=ai+x0bi-1(i=1,2,···,n),f(x0)=bn.
设 p(x)=b0xn-1+b1xn-2+···+bn-2x+bn-1,
则 ( x - x 0) p ( x )
= b0xn+b1xn-1 +b2xn-2+···+bn-2x2 +bn-1x
-x0b0xn-1-x0b1xn-2-···-x0bn-3x2-x0bn-2x-x0bn-1
=a0xn+a1xn-1+a2xn-2+···+an-2x2+an-1x+an-bn
=f(x)-f(x0)

391
多项式求值
p(x)=b0xn-1+b1xn-2+···+bn-2x+bn-1,
(x-x0)p(x) =f(x)-f(x0)
因此 f(x) =(x-x0)p(x) + f(x0)
即 p(x) 是 f(x) 除以 (x-x0) 的商式 ,
f(x0) 是 f(x) 除以 (x-x0) 的余式 ( 数 ).

392
多项式求值
b0=a0,bi=ai+x0bi-1(i=1,2,···,n),f(x0)=bn.
例 求 f(x)=x5+4x4-6x2+3x-9 在 x0=2 处的函数值 .
解 : 将多项式的系数及 x0 写为如下形式 .
2 1 4 0 -6 3 -9 类似可求以后
x0*b0 2 12 24 36 78 的各个数值 .
该数即为
b0=a0 1 6 12 18 39 69
b5=f(x0)

b1=a1+x0*b0 商式 p(x) 的系

393
导数求值
对 n 次多项式 f(x), 下面的 Taylor 展式精确成立 .
f "( x0 ) 2 f ( n ) ( x0 )
f ( x )  f ( x0 )  f '( x0 )( x  x0 )  ( x  x0 )    ( x  x0 )n
2! n!

显然 ,f(x) 除以 (x-x0) 的商式



p1 ( x )  f '( x0 ) 
f "( x0 )
( x  x0 )   
f ( n ) ( x0 )
( x  x 0 )n 1
2! n!
p1(x) 除以 (x-x0) 的余式为 f ’(x0), 商式设为
p2(px2)(x除以
). (x-x0) 的余式为 f ’’(x0)/2.

该过程进行下去可以求得 f(x) 在 x0 的各阶导数


值.
394
2 1 4 0 -6 3 -9
导数求值 2 12 24 36 78
例 求 f(x0
2 1 6 12 18 39 69
f(x)=x5+4x4- 2 16 56 148 )
6x2+3x-9 在 f '( x0 )
2 1 8 28 74 187
x0=2 处的各
2 20 96 f "( x0 )
阶导数值 .
2 1 10 48 170 2!
2 24
f ( x0 )
2 1 12 72
3!
2 ( 4)
f ( x0 )
1 14 4!
f ( 5 ) ( x0 )
5!
395
导数求值
由以上的过程可以得到
f(2)=69,f ’(2)=187,f ”(2)=340,f ’’’(2)=432,
f (4)(2)=336,f (5)(2)=120.
另外还可以给出 f(x) 在 x0=2 处的 Taylor 展

f(x)=69+187(x-2)+170(x-2)2+72(x-2)3
+14(x-2)4+(x-2)5

396
第七章
解线性方程组的直接方法
第七章
解线性方程组的直接方法
§1 引言
解线性方程组的两种方法 :
直接法 : 通过有限步算术运算直接求出方程
组的精确解 , 最常用的是消元结合代入的方
法.
实际上除非是采用无穷位精度计算 , 一般都得
不到精确解 .
直接方法适用于解低阶稠密矩阵方程组 .

399
§1 引言
迭代法 类似于方程求根的迭代法 , 用一个迭代过程
逐步逼近方程组的解 .
迭代有可能不收敛 , 或虽然收敛 , 但收敛速度慢 .
迭代法适用于求解高阶稀疏矩阵方程组 .
稀疏矩阵 : 矩阵非零元素较少 , 且在固定的位置上 .
稀疏矩阵一般是人为构造的 , 例如 36 页三转角插值
时方程组 (8.12),(8.15) 的系数矩阵 .

400
§2 Gauss 消去法
问题 : 求解 Ax=b.
思路 : 将 A 化为上三角阵 , 再回代求解 .

401
例题
例 1 用消去法解方程组  x1  x2  x3  6
 4 x2  x3  5
 2 x1  2 x2  x3  1
Step1 用第一个方程消  x1  x2  x3  6
去后两个方程的 x1. 得  4 x2  x3  5
 4 x2  x3  11
Step2 用第二个方程消  x1  x2  x3  6
去第三个方程的 x2. 得  4 x2  x3  5
 2 x3  6

402
例题
 x1  x2  x3  6
 4 x 2  x3  5
  2 x3   6
Step3 回代求解
根据第三个方程得 x3=3, 代入第二个方程得
x2=2.
再一起代入第一个方程得到 x1=1.
于是得到原方程组的解 (1,2,3)T.

403
Gauss 消去法 ( 第一次消元 )
(1) (1) (1) (1)
考虑方程组  a x1  a x2   a xn  b
11 12 1n 1
 a x1  a x2   a xn  b
(1) (1) (1) (1)
A x=b
(1) (1)
 21 22 2n 2

 (1) (1) (1) (1)
 an1 x1  an 2 x2   ann xn  bn
第一次消元用第一个方程将后面方程的 x1 消
去 . a (1)
计算乘数 mi1  i(11) 条件 :a11(1)≠0
a11
用 -mi1 乘以第一个方程加到第 i 个
(i=1,···,n) 方程上 , 则消去了第 i 个方程中的
x1.
404
Gauss 消去法 ( 第一次消元 )
经过上述过程 , 得到方程组 A(2)x=b(2),
(1) (1) (1) (1)
a 11 a 12  a   x1   b 
1n 1
 0 a ( 2)
22  a   x2    b 
( 2)
2n
( 2)
2
          
 0 ( 2)
an 2 ( 2)   x   ( 2) 
 ann   n   bn 
其中 a ( 2 )  a (1)  m a (1) ,
ij ij i1 1 j

bi( 2 )  bi(1)  mi1b1(1) , ( i , j  2, 3, , n)


ai(11)
mi1  (1)
a11
405
Gauss 消去法 ( 第 k 次消元 )
假设已完成 k-1 次消元 , 得到方程组 A(k)x=b(k).
 a11(1) a12(1)  a1(1,k) 1 a1(1k)  a1(1n) 
0 (2)
a22  a2( 2, k) 1 a2( 2k)  a2( 2n) 
       
 ( k 1) 
0 0  ak( k1,1k) 1 ak( k1,1k)  ak 1,n 
(k ) (k )
0 0  0 akk  akn 
       
(k ) (k )
 0 0  0 ank  ann 
第 k 次消元的目的是将 akk(k) ( 称为主元 ) 下面
的元素变为 0.

406
Gauss 消去法 ( 第 k 次消元 )
(k ) (k )
a  a 
kk kn
对 A(k) 右下角的矩阵     
 ank
(k ) (k ) 
 ann 
计算乘数 aik( k )
mik  ( k ) 条件 :akk(k)≠0
akk
用 -mik 乘以第 k 个方程加到第 i 个
(i=k+1,···,n) 方程上 , 则消去了第 i 个方程中的
xk, 得到方程组 A(k+1)x=b(k+1).

407
Gauss 消去法 ( 第 k 次消元 )
第一步消元的计算公式
ai(11)
aij( 2 )  aij(1)  mi1a1(1j ) , bi( 2 )  bi(1)  mi1b1(1) , mi1  (1)
a11
类似可以得到第 k 步消元的计算公式
aij( k 1)  aij( k )  mik akj( k ) ,

bi( k 1)  bi( k )  mik bk( k ) , ( i , j  k  1, , n)

aik( k )
mik  ( k )
akk

408
Gauss 消去法
消去法完成后最终得到与原方程组等价的三
角形方程组 A(n)x=b(n).
(1)
a
 11 a12(1)  a1(1n)   x1   b1(1) 
 0 ( 2)
a22 ( 2)

 a2 n  2   b2 
x  ( 2)

          
 0 0 (n)   x 
 ann  n    (n) 
 bn 
一共需进行 n-1 ? 步

409
Gauss 消去法 ( 算法 )
k  1, , n  1
i  k  1, , n
mik  aik( k ) / akk
(k )

i , j  k  1, , n
aij( k 1)  aij( k )  mik akj( k )
i  k  1, , n
bi( k 1)  bi( k )  mik bk( k )
xn  bn( n ) / ann
(n)

k  n  1, ,1
n
xk  (bk( k )  
j  k 1
akj( k ) x j ) / akk
(k )

410
完成 Gauss 消去法的条件
Gauss 消去法可以完成的充要条件为
aii( i )  0( i  1, 2, , n  1)
如何用原始的系数矩阵 A 来表示上面的条
件 ?
考察消去法进行 k-1 步后的系数矩阵 A(k)
 a11(1)  a1(1k)  a1(1n)  其第 k 个顺序主子式为
     
 (k )
akk  (k ) 
akn a11(1) a22
( 2) (k)
 akk
    
 a (k )
 (k ) 
ann
 nk 

411
完成 Gauss 消去法的条件
在 Gauss 消去法的过程中我们对矩阵 A 实施的
是矩阵的第二种初等行变换 ( 一行乘以一个数加
到另一行 ), 不改变任何子式的值 .
因此 , 若设 Dk 为矩阵 A 的第 k 个顺序主子式 , 则
Dk  a11(1) a22
( 2) (k )
 akk
显然 aii( i )  0( i  1, 2, , n  1) 的充要条件为
Di  0( i  1, 2, , n  1)

412
完成 Gauss 消去法的条件
定理 2(P169) 如果 n 阶矩阵 A 的所有顺序主子
式均不为零 , 即 Di≠0(i=1,2,···,n), 则可通过
Gauss 消去法 ( 不进行交换两行的初等变换 ),
将方程组 Ax=b 约化为三角形方程组 .
注 : 实际求解方程组时 , 通常要求 |A|≠0, 因此 ,
定理 2 中条件虽然比前面的充要条件稍强一
些 , 却是比较自然的 .

413
完成 Gauss 消去法的条件
定理 2 中的条件是相当强的 , 一般不能满足 ,
比如第一个方程的 x1 的系数为零 .
此时通常的做法是交换两行 , 使得消去法可以
进行 .
定理 1(P168) 如果 A 为非奇异矩阵 , 则可以
通过 Gauss 消去法及交换两行的初等变换将
原方程组化为三角形方程组 .

414
完成 Gauss 消去法的条件
 a11(1)  a1(1k)  a1(1n) 
      如果 akk(k) 以及它下方
 (k )
akk  (k ) 
akn 的元素全为零 , 则矩
    

 a (k )
nk  (k ) 
ann  阵是奇异的 .
因此在矩阵非奇异
在遇到主元 akk(k) 为零
时 , 结合换行 ,Gauss
时 , 可以选择它下面 消去法总是可以完成
的非零元素作为主元 .
的.

415
矩阵的三角分解
Gauss 消去法第 k 步消元时 , 以– mik 乘以矩阵
A(k) 第 k 行加到第 i 行 (i=k+1,···,n) 得到矩阵
A(k+1), 因此 A(k+1)=LkA(k)
1 
其中   
 
 1 
Lk   
  mk 1,k 1 
   
 
  mnk 1 

416
矩阵的三角分解
根据 A(k+1)=LkA(k)(k=1,···,n–1), 可以得到
A(n)=Ln-1··· L2L1A(1)
因此 A=A(1)=L1-1L2-1 ··· Ln–1-1 A(n)
令 L1-1L2-1 ··· Ln–1-1=L, A(n) =U, 有 A=LU.
若 Gauss 消去法可以完成 , 则 U(A(n)) 为上三
角矩阵 .
另一方面 , 我们可以求出 L 的形式 .

417
由 1  可得 1 
     
   
 1   
Lk    1
1
 mk 1,k 1 Lk   
   mk 1,k 1 
     
   
  mnk 1   
 mnk 1 

 1 
 m 
于是  21 1 
 m31 m32 1 
L=L1-1L2-1 ··· Ln–1-1  
     
 mn1,1 mn 1,2 mn 1,3  1 
 
 mn1 mn 2 mn 3  mn , n 1 1 

418
矩阵的三角分解
根据前面的推导 , 在 Gauss 消去法可以进行
时 , 矩阵可以分解为一个单位下三角矩阵 ( 对
角线元素为 1 的下三角矩阵 ) 和一个上三角
矩阵的乘积 .
即 , 若矩阵 A 的顺序主子式 Di≠0(i=1,2,···,n–
1), 则 A 可以分解为单位下三角矩阵 L 和一个
上三角矩阵 U 的乘积 .

419
矩阵的三角分解
那么 , 上述分解是否具有唯一性 ?
即若 A=LU=L1U1(L,L1 为单位下三角矩阵 ,U,U1 为
上三角矩阵 ), 那么是否 L=L1,U=U1?
若 A 非奇异 , 则有 L–1L1=UU1–1(U1 非奇异 ).
等式右端为上三角矩阵 , 左端为单位下三角矩阵 ,
因此等式两边为单位阵 ,L=L1,U=U1.
在 A 为奇异时 , 唯一性的证明作为作业 .
最终我们得到定理 3(Page170).

420
矩阵的三角分解
定理 3 设 A 为 n 阶矩阵 , 如果矩阵 A 的顺序主
子式 Di≠0(i=1,2,···,n–1), 则 A 可以分解为单位下
三角矩阵 L 和一个上三角矩阵 U 的乘积 , 且这
种分解是唯一的 .

例 对于矩 由前面的消元过程可知
阵 1 1 1 m21=0,m31=2,m32= –1, 因此
A   0 4 1  1 0 0   1 1 1
 2 2 1 A   0 1 0   0 4 1
 2 1 1  0 0 2 

421
计算量 (P170)
下面是第 k 次消元时所需要完成的计算 , 我们
考察其乘除法的计算次数 .
aik( k )
mik  ( k ) , ( i  k  1, , n) nk
akk
aij( k 1)  aij( k )  mik akj( k ) , ( i , j  k  1, , n) ( n  k )2

bi( k 1)  bi( k )  mik bk( k ) , ( i  k  1, , n) nk


消元时总的乘 n 1

除工作量为  [(
k 1
n  k ) 2
 2( n  k )]

422
计算量
在得到三角形方程组后 , 回代求解的计算公式为
bn( n ) 1
n
xn  ( n ) xk  ( k ) (bk( k )   akj( k ) x j )( k  n  1, ,1)
ann akk k 1
n 1
乘除法的计算量为 1   ( n  k  1)
k 1
乘除法的总的计算量为
n 1 n 1
n3 n
 [(
k 1
n  k ) 2
 2( n  k )]  1   ( n  k  1)
k 1

3
2
n 
3

423
§3 Gauss 主元素消去法
考虑方程组
 0.001 2.000 3.000   x1  1.000 
 1.000 3.712 4.623   x    2.000 
   2  
 2.000 1.072 5.643   x3   3.000 

如果将系数都看成精确的 , 可以得到有理数
解 , 取 4 位有效数字为 (-0.4904,-
0.05104,0.3675)T.

424
Gauss 主元素消去法
 0.001 2.000 3.000 1.000 
Gauss 消去法求解  1.000 3.712 4.623 2.000 
 
 2.000 1.072 5.643 3.000 
 0.001 2.000 3.000 1.000 
r1 1000  r2  r2  
 0 2004 3005 1002 
r
1 2000  r3  r
3  0
 4001 6006 2003 
 0.001 2.000 3.000 1.000 
4001
r2 (  )  r3  r3  0 2004 3005 1002 
 2004
 0 0 5.000 2.000 

425
 0.001 2.000 3.000 1.000 
 0 2004 3005 1002 
 
 0 0 5.000 2.000 
2.000
因此有 x3   0.4000,
5.000
1002  30050.4000
x2   0.09980,
2004
1.000  2.000( 0.09980)  3.0000.4000
x1   0.400,
0.001
得到解为 x  ( 0.400, 0.09980, 0.4000)T .

精确解为 (-0.4904,-0.05104,0.3675)T, 误差很


大!
426
分析
 0.001 2.000 3.000 1.000   0.001 2.000 3.000 1.000 
 1.000 3.712 4.623 2.000  r1 1000  r2  r2  
  r 2000  r  r  0 2004 3005 1002 
3 
 2.000 1.072 5.643 3.000    0
1 3
4001 6006 2003 

在右面的矩阵中 ,2004 处的值应该是


1.000
3.712  2.000(  )  3.712  2000  2004
0.001
事实上 ,3.712 处的值换成 3.500 到 4.499 间的任
何值时 , 变换后相应位置的值都是 2004.
变换后的方程组不能完全反映原来的方程组 !

427
分析
1.000
3.712  2.000(  )  3.712  2000  2004
0.001

之所以造成这种情况 , 主要是因为 2000 相对


于 3.712 而言太大 .
进一步分析可以发现 ,2000 太大的一个关键原
因是主元 0.001 太小 .
在求解时 , 我们尽量选取大的主元 .

428
Gauss 主元素消去法
Gauss 选主元素消去法求解
 0.001 2.000 3.000 1.000 
 1.000 3.712 4.623 2.000 
 
 2.000 1.072 5.643 3.000 
 2.000 1.072 5.643 3.000 
r
 r  1.000 3.712 4.623 2.000 
1 3 
 0.001 2.000 3.000 1.000 
1.000  2.000 1.072 5.643 3.000 
r1 (  )  r2  r2  0
2.000  3.176 1.801 0.5000 
r
1 (0.001 / 2.000)  r3   r3 0 2.001 3.003 1.002 

429
 2.000 1.072 5.643 3.000 
 0 3.176 1.801 0.5000 
 
 0 2.001 3.003 1.002 
 2.000 1.072 5.643 3.000 
2.001
r2 (  )  r3  r3  0 3.176 1.801 0.5000 
3.176
 
 0 0 1.868 0.6870 
因此有
0.6870
x3   0.3678,
1.868
0.5000  1.8010.3678
x2   0.05113,
3.176
3.000  1.072( 0.05113)  5.6430.3678
x1   0.4900.
2.000
430
Gauss 主元素消去法
得到解 x  ( 0.4900, 0.05113, 0.3678)T .

精确解为 (-0.4904,-0.05104,0.3675)T, 误差很


小!

431
Gauss 主元素消去法
Gauss 主元素消去法分为列主元素消去法和
全主元素消去法 .
列选主元消去法
 a11(1)  a1(1k)  a1(1n) b1(1) 
      
如果已经进行了 k-1 (k )
akk (k )
 akn bk( k ) 
步消元 , 得到右边      
 a (k ) (k )
 ank bn( k ) 
的增广矩阵 . nk

432
Gauss 列选主元素消去法
 a11(1)  a1(1k)  a1(1n) b1(1) 
      
 (k )
akk (k )
 akn bk( k ) 
     
 a (k ) (k )
 ank bn( k ) 
 nk

在 akk( k ) , , ank( k ) 中选取绝对值最大的元素


| ai(kk,)k | max | aik( k ) |
kin

交换第 ik 行与第 k
行,
然后将主元以下元素消为零 , 即完成第 k 步消
去.
433
k  1, , n  1
| aik ,k | max | aik |
kin

ik  k NO
YES
j  k , , n
akj  aik , j bk  bik
算 i  k  1, , n
mik  aik( k ) / akk
(k )

法 i , j  k  1, , n aij( k 1)  aij( k )  mik akj( k )


i  k  1, , n
bi( k 1)  bi( k )  m ik bk( k )
xn  bn( n ) / ann(n)

k  n  1, ,1 n
xk  (bk( k )  
j  k 1
akj( k ) x j ) / akk
(k )

434
Gauss 主元素消去法
全选主元消去法
另一种主元素消去法称位全选主元消去法 , 第 k
步消去时 , 选取系数矩阵的第 k 行至第 n 行 , 第
k 列至第 n 列中绝对值最大的元素作为主元 .

a
 11(1)
 a (1)
1k  a1(1n) b1(1)  注 : 在全选主元
       时 , 必须对矩阵进
 (k )
akk (k )
 akn bk( k ) 
      行列变换 , 此时必
 a (k ) (k )
 ank bn( k )  须记录列交换的过
 nk
程.
435
Gauss-Jordan 消去法
在消元过程中 , 如果在不仅消去对角线下方的元素 ,
同时消去对角线上方的元素 , 同时使对角线元素变
为 1, 这种方法称为 Gauss-Jordan 消去法 .
1 1 1 6 1 1 1 6 
 0 4 1 5  r ( 2)  r  r  0 4 1 5 
 1 3 3 
  
 2 2 1 1   0 4 1 11

 1 0 5 / 4 19 / 4 
r2 ( 1 / 4)  r1  r1  0 4 1 
 5 
r2 ( ( 4) / 4)  r3  r3  0 0 2 6 

436
Gauss-Jordan 消去法
 1 0 5 / 4 19 / 4  1 0 5 / 4 19 / 4 
 0 4 1 5  r (1 / 4)  r  0 1 1 / 4 5 / 4 
  2 2  
 0 0 2 6   0 0 2 6 
1 0 0 1 
r3 ( (5 / 4) /( 2))  r1  r1  
 0 1 0 2 
r
3 (  (  1 / 4) /(  2))  r2  r

2
 0 0 2 6 
1 0 0 1 
  于是得到解为
r3 (1 /( 2))  r3  0 1 0 2 
 0 0 1 3  x =(1,2,3) T
.

注 : 求解时 , 也可以先将主元变为 1, 再消元 .


437
kk 1,1,
, n, n1
| aik ,k | max | aik |
kin

ik  k NO
YES
j  k , , n
akj  aik , j bk  bik
i  1, k 1,
n,i  , nk
算 mik  aik( k ) / akk
(k )
(k )

mkk  1 / akk
法 ii , 1j,
 kn,i 1, k ,, nj  k  1, , n
aij( k 1)  aij( k )  mik akj( k )
i  k  1, , n bi( k 1)  bi( k )  m ik bk( k )
j  k , , n akj( k 1)  akj( k ) mkk
bk( k 1)  bk( k ) mkk

438
k  1, , n
| aik ,k | max | aik | j=k
kin
时,不
ik  k NO 用计
YES
j  k , , n 算,令
计 akj  aik , j bk  bik
akk=1
i  1, n, i  k
算 mik  aik( k ) / akk
(k )
n 1
(k )
量 mkk  1 / akk 1
i  1, n, i  k , j  k  1, , n ( n( k) 1)( n  k )
( k 1) (k )
aij  aij  mik akj
i  k  1, , n bi( k 1)  bi( k )  m ik bk( k ) n  k
j  k , , n akj( k 1)  akj( k ) mkk nk
bk( k 1)  bk( k ) mkk 1
439
计算量
我们可以得到 Gauss-Jordan 消去法的总的乘
除法的计算量为
n 3 3
n n n
 [(n  1)(n  k )  n  1] 
k 1 2
n 2

2

2
 O( n2 )
n3 2
Gauss 消去法的计算量   O ( n )
3

可以看出 ,Gauss-Jordan 消去法的计算量大
约是 Gauss 消去法的 1.5 倍 .

440
Gauss-Jordan 消去法求逆矩阵
Gauss-Jordan 消去法的计算量较大 , 一般不直
接用来求解单个的方程组 , 而用来求解有着相
同系数矩阵的多个方程组 .
已知矩阵 A, 其逆矩阵 A-1 满足 AA-1=I.
令 A-1=[x1,x2,···,xn], 则有
Axi=ei( 第 i 个分量为 1, 其余为零的向量 ).
因此 , 求逆矩阵的问题可以转化为求解 n 个系
数矩阵均为 A 的线性方程组问题 .
441
用 Gauss-Jordan 方法求
的逆 A-1

主元

A-1
主元
442
§4 Gauss 消去法的变形
根据 Gauss 消去法 , 可以得到矩阵的 LU 分解 .
另一方面 , 我们也可以直接根据矩阵的元素写出
矩阵 L,U 的元素的计算公式 .
若 A=LU, 求解则方程组 Ax=b 可以转化为求解两
个三角形方程组 Ly=b( 求 y),Ux=y( 求 x).

443
直接三角分解法
设 A 为 n 阶非奇异矩阵 , 且有分解式 A=LU, 其
中 L 为单位下三角矩阵 ,U 为上三角矩阵 , 即
1   u11 u12  u1n 
l 1  u22  u2 n 
A   21 
     
  
 ln1 l n 2  1  unn 

考虑 A 一共有 n2 个元素 , 可以确立 n2 个等


式 , 在一定条件下可以解出上式中的 n2 个未
知数 .
444
直接三角分解法
1   u11 u12  u1n 
l 1  u22  u2 n 
A   21 
     
  
 ln1 ln 2  1  unn 

根据上式有
a1i  u1i ( i  1, , n), ai 1  li 1u11 , li 1  ai 1 / u11 ( i  2, , n)

可以求出 U 的第一行以及 L 的第一列 .

445
直接三角分解法
假设 U 的前 r-1 行和 L 的前 r-1 列已经求出 .
考虑 A 的第 r 行的元素
n r 1 n
ari   lrk uki   lrk uki  lrr uri  l rk uki
k 1 k 1 k  r 1

由于 L 为单位下三角矩阵 , 因此
larr=1, l
r 1
=0( k >r ), r 1

ri 
 rkl u  u , u  a  l u
k 1
rk ki ri ri ri 
k 1
rk ki

从而可以求出 U 的第 r 行元素 uri(i=r,···,n).

446
直接三角分解法
再考虑 A 的第 r 列元素
n r 1 n
air   lik ukr   lik ukr  lir urr  l ik ukr
k 1 k 1 k  r 1

由于 U 为上三角矩阵 , 因此 ukr=0(k>r),
r 1 r 1
air   l ik ukr  l ir urr , lir  (air   lik ukr ) / urr ,
k 1 k 1

从而可以求出 L 的第 r 列元素 lir(i=r+1,···,n).

447
直接三角分解解方程组 ( 算法 )
(1)i  1, , n : u1i  a1i ; (2)i  2, , n : li 1  ai 1 / u11 ;
r 1
(3)r  2, , n  1 : i  r , , n : uri  ari   l rk uki ;
k 1
r 1
i  r  1, , n : l ir  (air   l ik ukr ) / urr ;
n 1 k 1
(3')unn  ann   lnk ukn ;
k 1 i 1
(4) y1  b1 , i  2, , n : yi  bi   l ik yk ;
k 1
n
(5) xn  yn / unn , i  n  1, ,1 : xi  ( yi  u
k  i 1
ik xk ) / uii .

448
直接三角分解解方程组 ( 计算量 )
(1)i  1, , n : u1i  a1i ; (2)i  2, , n : li 1  ai 1 / u11 ; n 1
r 1
(3)r  2, , n  1 : i  r , , n : uri  ari   l rk uki ; ( r  1)( n  r  1)
k 1
r 1
i  r  1, , n : l ir  (air   l ik ukr ) / urr ; r ( n  r )
n 1 k 1
(3')unn  ann   l nk ukn ; n  1
k 1 i 1
(4) y1  b1 , i  2, , n : yi  bi   l ik yk ; i  1
k 1
n
(5) xn  yn / unn , 1 i  n  1, ,1 : xi  ( yi  u
k  i 1
ik xk ) / uii . n  i  1
n 1 n n 1
2n  1   [( r  1)( n  r  1)  r ( n  r )]   ( i  1)   ( n  i  1)
r 2 i2 i 1

449
直接三角分解解方程组 ( 计算量 )
通过计算可以得到
n 1 n n 1
2n  1   [( r  1)( n  r  1)  r ( n  r )]   ( i  1)   ( n  i  1)
r 2 i2 i 1
3
n 2 n
 n 
3 3

该计算量和 Gauss 消去法解方程组的计算量


是完全一致的 .

450
直接三角分解法
前面所述的直接求矩阵的三角分解方法称为
Doolittle 分解 .

注 :(1) 教材中介绍了直接三角分解方法在程
序计算时节省存储的方法 , 这一类方法现在已
经不具备重要的意义 .
(2) 类似于选主元的 Gauss 消去法 , 直接三角
分解也有选主元的方法 .

451
对称矩阵的三角分解
对于一般的矩阵 , 在一定条件下可以实现其
LU 分解 .
对于对称矩阵 , 这种分解没有利用其对称性 ,
计算量不是最省的 . 我们下面来利用对称性 ,
讨论其三角分解的算法 .
在实际应用中 , 对称正定矩阵是广泛出现的 ,
因此讨论其三角分解有着实用价值 .

452
对称矩阵的三角分解
设 A 是对称矩阵 , 且其所有顺序主子式均不
为零 , 于是 A 有如下的三角分解

1   u11 u12  u1n 


l 1  u22  u2 n 
A   21 
     
  
 ln1 ln 2  1  unn 

453
对称矩阵的三角分解
将上面分解中的 U 再进行分解
 u12 u1n 
1 u11

u11 
 u11  
 u22     
U    DU 0
   un 1, n 
  1
 unn  un 1,n 1 
 
 1 
将 U 分解为对角阵 D 与单位上三角阵 U0 的
乘积 .

454
对称矩阵的三角分解
于是 A=LU=LDU0.
根据 A 的对称性 A=AT=U0T(DLT).
由分解的唯一性 (U0T 是单位下三角矩阵 ), 有
U0T=L.
因此 A=LDLT.
定理 7 设 A 为 n 阶对称矩阵 , 其所有顺序主子
式均不为零 , 则 A 可唯一的分解为 A=LDLT,
其中 L 为单位下三角矩阵 ,D 为对角阵 .

455
Cholesky 分解
若 A 为正定矩阵 ,A 有上述形式的分解 A=LDLT.
设 di 为 D 的第 i 个对角线元素 ,Di 为 A 的顺序主
子式下面说明 D 的对角元均为正数 .
由于 L 为单位下三角阵 , 容易证明
Di=d1d2 ··· di( 将 A,L,D 写为分块矩阵的形式来
证 , 或根据 P169 推论 )
因此 d1=D1,di=Di/Di-1>0(i=2,3,···,n-1).

456
Cholesky 分解
因此 d1 
 d2 
D 
  
 
 d n 

 d1   d1 
   1 1
 d2  d2 
    D 2
D 2

    
 d n   d n 

457
Cholesky 分解
1 1 1 1
因此有 2 2 T 2 2 T
T
A  LDL  LD D L  ( LD )( LD )  L1 L1 .
T

定理 8 如果 A 为 n 阶对称正定矩阵 , 则存在
一个实的非奇异下三角阵 L 使得 A=LLT, 当
限定 L 的对角元素为正时 , 这种分解是唯一
的.
注 : 这一分解称为对称正定阵的 Cholesky 分
解.
利用顺序主子式的值可以证明唯一性 .
458
平方根法
 l11   l11 l 21  l n1 
l l22   
l 22  l n 2 
A   21 
     
  
 ln1 l n 2  l nn   l nn 

设 i≥j, 根据 A 的 Cholesky 分解式 ,


n j 1 n
aij   l ik l jk   lik l jk  l jj lij   lik l jk
k 1 k 1 k  j 1

j<k 时 ,ljk=0, 因此 j 1
aij   l ik l jk  l jj l ij
k 1

459
平方根法
j 1
aij   lik l jk  l jj lij
k 1 j 1
在上式中 , 令 i=j 得 a jj   l 2jk  l 2jj
k 1
j 1 1

设 lii≥0, 得 l jj  (a jj   l 2jk ) 2

k 1
j 1
在 i=j+1,···,n 时 lij  (aij   lik l jk ) / l jj
有 k 1

对 j=1,2,···,n 用上面公式 , 就得 Cholesky 分


解.
乘除法计算量 : 约为 n3/6.
460
改进的平方根法
在平方根法中 , 需要进行开方计算 , 工作量较
大 . 为避免开方运算 , 我们常计算 LDLT 分解 .

1   d1  1 l21  ln1 
l 1  d2  
1  l
A   21   n2 
       
   
 l n1 ln 2  1  dn   1

461
改进的平方根法
LDLT 分解得计算公式为 : 对 i=1,2,···,n,
j 1 i 1
lij  (aij   lik d k l jk ) / d j ( j  1, 2, , i  1) d i  aii   l ik d k
2

k 1 k 1

在上面得计算中 , 需重复计算 likdk, 我们可以


设 tij=lijdj, 得到下面得公式 : 对 i=1,2,···,n,
j 1
(1)t ij  aij   t ik l jk ( j  1, 2, , i  1)
k 1 i 1
(3)d i  aii   t ik l ik
(2)lij  t ij / d j ( j  1, 2, , i  1) k 1

462
§5 向量和矩阵的范数
定义 1 (1) 设 x=(x1,x2,···,xn)T, y=(y1,y2,···,yn)∈Rn
( 或 Cn). 将实数( x , y )  yT x  n x y
i 1
i i

n
或复数 ( x , y )  y H x   x i yi
i 1

称为向量 x,y 的数量积 ( 内积 ).


1 n 1
(2) 将非负实 || x ||2  ( x , x ) 2  (  | xi |) 2
数 i 1

称为 x 的欧式范数 (2 范数 ).

463
内积的性质
定理 10 设 x, y∈Rn ( 或 Cn), 则
1. (x,x)=0 当且仅当 x=0 时成立 ;
2. (x,y)=(x,y)=(x,y), 为实数
( 或 (x,y)=(x,y)=(x,y), 为复数 );
3. (x,y)=(y,x)( 或 (x,y)=( y , x ) );
4. (x1+x2,y)=(x1,y)+(x2,y);
5. (Cauchy-Schwarz 不等式 )|(x,y)|≤||x||2||y||2,
等式当且仅当 x 与 y 线性相关时成立 ;
6. 三角不等式 ||x+y||2≤||x||2+||y||2;
464
向量的范数
定义 2 如果向量 x∈Rn ( 或 Cn) 的某个实值函
数 N(x)=||x||, 满足条件
(1)||x||≥0(||x||=0 当且仅当 x=0)( 正定性 );
(2)||x||=||·||x||( 对于任意∈ R 或 C);
(3) ||x+y||≤||x||+||y||( 三角不等式 );
则称 N(x) 为 Rn ( 或 Cn) 上的一个向量范数 .

465
常用的向量范数
n
1- 范数 || x ||1   | xi |
i 1
n 1

2- 范数 ( 欧式范 || x ||2  (  | xi | ) 2 2

i 1
数)
∞- 范数 || x ||   max | xi |
1 i  n

n 1

p- 范数 || x || p  (  | xi | ) p p

i 1

∞- 范数是 p- 范数的极限 || x ||   lim || x || p


p 

466
常用的向量范数
对向量 x=(1,-2,3)T, 有
|| x ||1  6,

|| x ||2  14  3.74166,

|| x ||3  3 36  3.30193,

|| x ||  3.

||x||p 是 p 的单调递减函数 .

467
向量范数的性质
定理 11 ( 范数的连续性 ) 设非负函数 N(x)=||x||
为 Rn 上任一向量范数 , 则 N(x) 是 x 分量
x1,x2,···,xn 的连续函数

定理 12 ( 向量范数的等价性 ) 设 ||x||s , ||x||t 为


Rn 上向量的任意两种范数 , 则存在常数 c1,c2>0,
使得对任意 x∈ Rn 有c1 || x ||s || x ||t  c2 || x ||s .

468
向量序列的极限
设 {x(k)} 是 Rn 中的向量序列 ,x*∈Rn, 如果
lim xi( k )  xi* ( i  1, 2, , n)
k 

则称 {x } 收敛于 x*, 记 k 
(k) lim x ( k )  x * .

定理 13 设 || · || 为向量的任意一种范数 , 则
lim x ( k )  x *  lim || x ( k )  x * || 0.
k  k 

469
矩阵范数
定义 4 如果矩阵 A∈Rn×n 的某个实值函数
N(A)=||A||, 满足条件
(1) ||A||≥0(||A||=0 当且仅当 A=0)( 正定性 );
(2) ||cA||=|c|·||A||( 对于任意 c∈R);
(3) ||A+B||≤||A||+||B||( 三角不等式 );
(4) ||AB||≤||A||·||B||( 相容性 )
则称 N(A) 为 Rn×n 上的一个矩阵范数 .

470
Frobenius 范数
n 1
|| A ||F  (  a ) 2 2
ij
i , j 1

将 Rn×n 中的元素看成 n2 维的向量 , 再取向量


的 2- 范数 , 就得到上述的矩阵范数 , 称为
Frobenius 范数 , 简称 F- 范数 .
F- 范数满足矩阵范数定义的前三条性质是容
易证明的 ( 根据 n2 维的向量范数的性质 ), 而
相容性的证明比较困难 , 在此略去 .

471
矩阵的算子范数
定义 5 设 x∈Rn , A∈Rn×n , 给出一种向量范数 ||
x||(=1,2 或∞ ), 相应地定义一个矩阵的非负
函数 || A ||  max || Ax || .
x0 || x ||
可以验证 ||A|| 是矩阵范数 , 称为 A 的算子范
数 .
算子范数的定义可以改写为等价于
|| A ||  max || Ax || .
|| x||  1

472
矩阵的算子范数
定理 14 设 ||x|| 是 Rn 上一个向量范数 , 则 ||A||
是 Rn×n 上矩阵的范数 , 且对任意的 x∈Rn 满足
相容条件 || Ax ||  || A || || x || .

证明 根据定 || A ||  max || Ax || .



义 x0 || x ||
|| Ax ||
因此 , 对任意的 x(≠0)∈R , n || A || 
|| x ||
,

从而 || Ax ||  || A || || x || .

473
矩阵的算子范数
关于范数定义的正定性和齐次性 , 证明较简单 ,
三角不等式的证明作为作业 .
下面证明第四条性质 , 即 ||AB||≤||A||·||B||.
由于 || ABx || || A |||| Bx || || A || || B || || x ||

因此 , || AB ||  max || ABx || || A || || B || .


|| x || 1

474
常见的算子范数
定理 15 设 A∈Rn×n , 则
n
(1) || A ||  max  | aij | ( 称为 A 的行范
1 i  n
j 1
n 数)
(2) || A ||1  max  | aij | ( 称为 A 的列范
1 j  n
i 1
数)
(3) || A ||2  max ( AT A) ( 称为 A 的 2- 范
数)
其中 max(ATA) 表示 ATA 的最大特征值 .

475
常见的算子范数
证明 我们仅证明 2,3
n
(2) || A ||1  max  | aij |
1 j  n
i 1

我们证明两个方面 :
n

<1> 若 x∈Rn ,||x||=1, || Ax ||1  max  | aij |


1 j  n
i 1 n
则 存在 x∈Rn ,||x|| =1, 使 || Ax ||1  max  | aij |
<2>  1 j  n
i 1

于是
n
max  | aij |  max || Ax ||1 || A ||1 .
1 j  n || x ||1 1
i 1

476
常见的算子范数
n
<1> 若 x∈R ,||x||=1, 则 n
|| Ax ||1  max  | aij |
1 j  n
i 1
n n
设  | aij 0
|  max  | aij |, 若 ||x||=1,
1 j  n
i 1 i 1
n n n n 则 n n
|| Ax ||1   |  aij x j |   | aij || x j |    | aij || x j |
i 1 j 1 i 1 j 1 j 1 i 1
n n n n
  (| x j |  | aij |)   (| x j |  | aij0 |)
j 1 i 1 j 1 i 1
n n n
 (  | aij0 |)(  | x j |)  max
1 j  n
 | aij |
i 1
i 1 j 1

477
常见的算子范数
n
<2> 存在 x∈R ,||x||=1, 使 n
|| Ax ||1  max  | aij |
1 j  n
得 n n
i 1

仍然设  | aij |  max 0


1 j  n
 | aij |,
i 1 i 1

令 ej0 为第 j0 个分量为 1, 其余分量为零的向量 ,


n n n n
则j ||1   |  aij e j |   | aij |  max  | aij |.
|| Ae0 0 0 1 j  n
i 1 j 1 i 1 i 1

478
常见的算子范数
(3) || A ||2  max ( AT A)

仍然证明两个方面 :
<1> 若 x∈Rn ,||x||=1, || Ax ||2  max ( AT A)
则 存在 x∈Rn ,||x|| =1, 使 || Ax ||   ( AT A)
<2>  2 max


于是 max ( AT A)  max || Ax ||2 || A ||2 .
|| x ||2  1

479
常见的算子范数
容易证明 ,ATA 为半正定实对称矩阵 , 有 n 个相
互正交的标准特征向量 u1,u2,···,un, 假设其对应
的特征值 1≥2≥···≥n 是从大到小排列的 .
<1> 若 x∈Rn ,||x||=1, || Ax ||2  max ( AT A)
则 n

设 x   ci ui , 则 || Ax ||22  ( Ax )T ( Ax )  xT AT Ax
i 1
n n n n n
 (  ci u i ) (  ci A Aui ) (  ci u i ) (  ci i ui )  ci2  i
T T T

i 1 i 1 i 1 i 1 i 1
n n
 1  ci2  1 (|| x ||22   ci2  1)
i 1 i 1

480
常见的算子范数
<2> 存在 x∈Rn ,||x||=1, 使 || Ax ||2  max ( AT A)

对向量 u1, 有 ||u1||2=1, 且
|| Au1 ||22  u1T AT Au1  u1T 1 u1  1 u1T u1  1

注 : 对于复矩阵 , || A ||2  max ( A H A)


481
常见的算子范数
 1 2 
对矩阵 A   ,
 3 4 

|| A ||1  max{4, 6}  6, || A ||  max{3, 7}  7,

|| A ||F  1  4  9  16  30  5.477,

T  10 14 
A A   ,  ( AT
A)  15  221,
 14 20 

|| A ||2  15  221  5.465.

482
谱半径
定义 6 设 A∈Rn×n 的特征值为 i(i=1,2,···,n), 称
 ( A)  max | i |
1 i  n

为 A 的谱半
径 .16 设 A∈Rn×n , 则 (A)≤||A||, 即 A 的谱
定理
半径不超过 A 的任何一种算子范数 ( 或 F-
证明思路
范数 ).
Ax   x |  ||| x ||||  x |||| Ax |||| A |||| x |||  ||| A ||

注 :||A||2≤||A||F.

483
谱半径
作业 : 证明下面的定理

定理 17 如果 A∈Rn×n 为对称矩阵 , 则 (A)=||


A||2.

484
算子范数
定理 18 如果 ||B||<1, 则 I±B 为非奇异矩阵 , 且
1 1
|| ( I  B ) || .
1 || B ||
其中 || · || 为矩阵的算子范
数 . 仅就 I-B 来证 .
证明
若 det(I-B)=0, 则存在非零向量 x, 使得 Bx=x.
|| Bx ||
于是 || B || max
|| x ||  0 || x ||
 1, 矛盾 . 因此 det(I-
B)≠0.

485
算子范数
又 ( I  B )( I  B )1  I , 得
( I  B ) 1  I  B ( I  B ) 1 ,

|| ( I  B )1 |||| I ||  || B( I  B ) 1 ||

 1 || B |||| ( I  B ) 1 ||
因此 1
1
|| ( I  B ) || .
1 || B ||

486
§6 误差分析
对于数值分析中的许多算法 , 我们有必要研究
问题中的数据出现小的误差对于结果的影响 .
本节研究线性方程组 Ax=b 中系数矩阵 A 与
右端向量 b 出现小的误差时 , 求出的解会出现
怎样的误差 .

487
最小二乘问题算例
在区间 [0,1] 求函数 f(x)=sinx 的最佳平方逼近二次
函数 .
解 : 设二次函数为 P2(x)=a2x2+a1x+a0 法方程组为
1 1 1 1
a0  1dx  a1  xdx  a2  x dx  2
 sin  xdx
0 0 0 0

1 1 1 1
a0  xdx  a1  x dx  a2  x dx 
2 3
 x sin  xdx
0 0 0 0
1 1 1 1
a0  x dx  a1  x dx  a2  x dx 
2 3 4
 x 2 sin  xdx
0 0 0 0

488
最小二乘问题算例
计算得到
1 1 2 1 1 1 1 1 1 1 2  4
a0  a1  a2  a0  a1  a2  a  a  a 
2 3  2 3 4  3 0 4 1 5 2 3

解得 2
12  120
a0  3
 0.050465,

720  60 2
a1   a2  3
 4.12251,

因此 P2(x)= -4.12251x2+4.12251x-
0.050456

489
最小二乘问题算例
1 1 2 1 1 1 1 1 1 1 2  4
a0  a1  a2  a0  a1  a2  a  a  a 
2 3  2 3 4  3 0 4 1 5 2 3

如果我们采用 3 位有效数字计算 , 上面的方程


组变为

1.00a0  0.500a1  0.333a2  0.637


0.500a0  0.333a1  0.250a2  0.318
0.333a0  0.250a1  0.200a2  0.189

490
最小二乘问题算例
 1.00 0.500 0.333 0.637 
 0.500 0.333 0.250 0.318 
 0.333 0.250 0.200 0.189 
 1.00 0.500 0.333 0.637 
r1 g( 0.500)  r2  r2 0 0.083 0.083 0.001 
ruuuuuuuuuuuuuuuuuuuu
g(  0.333 )  r  r 
1 3 u3ru 0 0.083 0.089 0.023 
 1.00 0.500 0.333 0.637 
ruuuuuuuuuuuuuuuuuuuu
2 g( 1.000 )  r3  r 3 0
uru 0.083 0.083 0.001 
0 0 0.006 0.022 

于是 a2= -0.022/0.006= -3.67,
a1=(-0.001-0.083a2)/0.083=3.65,
a0=(0.637-0.500a1-0.333a2)=0.027. 误差相当
大! 491
病条件方程组
在上面的线性方程组中 , 系数矩阵和右端向量
出现了微小误差 ( 舍入误差是很小的 ), 引起
了方程组的解的巨大变化 , 这样的方程组称为
病条件方程组 .(P192 定义 7)

492
右端向量的扰动
设方程组 Ax=b 的精确解为 x, 现在假设 A 精
确 ( 没有误差 ), 右端向量 b 有误差 b, 带误差
的方程组的解为 x+x, 即 A(x+x)=b+b,
由于 Ax=b, 易得 x=A–1b.
1
取算子范数 ||  x |||| A ||||  b ||
||  x || || b || || A1 ||||  b ||
考虑相对误差 
|| x || || x || || b ||
|| Ax || || A1 ||||  b || 1 ||  b ||
 || A |||| A ||
|| x || || b || || b ||

493
右端向量的扰动
因此 , 在右端向量有扰动时 , 解的相对误差与
右端向量的相对误差的关系为
||  x || 1 ||  b ||
|| A |||| A ||
|| x || || b ||
即 ||A–1|| ||A|| 为相对误差放大倍数的界 .

494
系数矩阵的扰动
设方程组 Ax=b 的精确解为 x, 现在假设 b 精
确 ( 没有误差 ), 系数矩阵 A 有误差 A, 带误
差的方程组的解为 x+x, 即 (A+ A)(x+x)=b,
由于 Ax=b, 易得
(A+ A)x= – A x.
如果 A 不受限制 , A+ A 可能奇异 .
由于 A+ A=A(I+A-1 A).
在 ||A-1 A||<1 时 , (I+A-1 A)–1 存在 .
495
系数矩阵的扰动
 x   ( I  A1 A)1 A1 ( A) x
|| A1 ||||  A |||| x ||
取算子范数 ||  x ||
1 || A1 A ||
1 ||  A || 1 ||  A ||
|| A |||| A || || A |||| A ||
||  x || || A || || A ||
 
|| x || 1
1 || A  A || 1 ||  A ||
1 || A |||| A ||
|| A ||
( 右边的不等式必须假设 ||A-1 || || A||<1)

496
系数矩阵的扰动
1 ||  A ||
|| A |||| A ||
||  x || || A ||

|| x || 1 ||  A ||
1 || A |||| A ||
|| A ||

由上式 , 解的相对误差较系数矩阵的误差放大
的倍数的界比 ||A–1|| ||A|| 要大一些 .

497
同时扰动
在右端向量与系数矩阵同时扰动的情况下 , 有
下面的结果

||  x || || A1 |||| A ||  ||  A || ||  b || 
   
|| x || ||  A ||  || A || || b || 
1 || A1 |||| A ||
|| A ||

498
条件数
从上面几种情况的分析可以看出 , ||A–1|| ||A||
刻划了解对原始数据变化的灵敏程度 , 即刻划
了方程组的病态程度 .
定义 8 设 A 为非奇异矩阵 , 称数
cond(A)= ||A–1|| ||A|| (=1,2 或∞ ) 为矩阵的
条件数 .

499
条件数
最常用的条件数是无穷条件数与 2 条件数
( 称为谱条件数 ).
T

对谱条件数有 cond ( A)2  max T A)
( A
min ( A A)

A 为对称矩阵时 cond ( A)2  | 1 |


| n |
其中 1,n 分别为 A 的绝对值最大与绝对值
最小的特征值

500
条件数的性质
1 若 A 为非奇异矩阵 , cond(A)≥1
cond(A)= ||A–1|| ||A|| ≥ ||A–1A|| ≥ ||I||=1
2 若 A 为非奇异矩阵 , 对常数 c≠0, 有
cond(cA)=cond(A)
3 若 A 为正交矩阵 , 则 cond(A)2 =1; 若 A 为非奇
异矩阵 ,R 为正交矩阵 , 则
cond(RA)2 = cond(AR)2 = cond(A)2 .
2,3 的证明作为作业 .

501
Hilbert 矩阵的条件数
 1 1 
1 2

n 
 
1 1

1 
Hn   2 3 n1 
 
    
1 1 1 
  
n n1 2n  1 

上述矩阵称为 Hilbert 矩阵 .
下面计算 H3 的条件数 .

502
Hilbert 矩阵的条件数
 1 1
1 2 3
   9 36 30 
1 1 1
H3   H 31   36 192 180 
2 3 4
   30 180 180 
1 1 1
 3 4 5 
11
|| H 3 || , || H 31 || 408,
6
因此 cond(H3)∞=748.

503
Hilbert 矩阵的条件数
前 8 个 Hilbert 1 1
矩阵的条件数为 2 27
3 748
4 2.84e4
可见 , 随着阶数的
5 9.44e5
增加 ,Hilbert 矩阵
6 2.91e7
的条件数增长很
7 9.85e8
快.
8 3.39e10

504
Hilbert 矩阵的条件数
在前面的最小二乘问题中 , 系数矩阵与右端向
量的相对误差为
||  A || 4 ||  b ||
 1.8210 ,  5.9710 4 ,
|| A || || b ||
解的相对误差为 ||  x ||
 0.115
|| x ||

相对误差大约扩大了 200
倍.

505
病条件的判断
若根据条件数的定义来判断病条件 , 必须计算
A–1, 这通常计算量较大 ( 如果是病条件 ,A–1 本
身计算就有较大误差 ), 一般改用别的方法大
致地判断是否病条件 .
(1) 三角约化时 ,( 尤其是选主元情况下 ) 出现
小主元 , 一般可以判断矩阵病条件 .
(2) 矩阵的绝对值最大特征值与绝对值最小特
征值的比比较大时 , 矩阵病条件 .

506
病条件的判断
(3) 矩阵的行列式很小 , 或某些行近似线性相
关 , 则矩阵可能病态 .
(4) 矩阵的各元素数量级相差很大 , 且无一定
规则 , 则矩阵可能病态 .

507
第八章
解线性方程组的迭代法
§1 引言
在处理一元方程 f(x)=0 时 , 我们将其转化为 x=(x)
的形式 , 然后用不动点迭代的方法进行求解 .
对于线性方程组 Ax=b, 我们也可以将其转化为类似
的形式 : x=Bx+f,
任取初始向量 x(0), 令 x(k+1)=Bx(k)+f(k=0,1,···), 则得到
一个向量的序列 {x(k)}.
若该序列收敛于向量 x*, 对 x(k+1)=Bx(k)+f 两边取极
限得到 x*=Bx*+f, 即 x* 是方程组的解 .

509
§2 Jacobi 迭代法与 Gauss-Seidel 迭代法
对于方程组 
 8 x1  3 x 2  2 x3  20
 4 x1  11x2  x3  33
 6 x1  3 x2  12 x3  36
 1
 x 1  ( 3 x 2  2 x3  20 )
8
我们将其改写为  x  1 ( 4 x  x  33)
 2 1 3
 11
1
 x3  ( 6 x1  3 x2  36)
 12

510
Jacobi 迭代法
写成矩阵的形式为 x=B0x+f, 其中

 3 2  20 
 0 8
 
8  8 
 4 1   33 
B0    0 f  
11 11  11
 36 
 6 3 
  0   
 12 12   12 

511
Jacobi 迭代法
利用 x(k+1)=Bx(k)+f 进行迭代 , 得到结果如下

k x1(k) x2(k) x3(k) || x ( k )  x ( k 1) ||

0 0 0 0
1 2.5 3.0 3.0 3.0
2 2.87500000 2.36363636 1.00000000 2.0
8 3.00020012 2.00063786 0.99983051 3.30e-3
9 3.00028157 1.99991182 0.99974048 7.26e-4
10 3.00003181 1.99987402 0.99988126 2.50e-4

512
Jacobi 迭代法
从上表可以看出 , 迭代序列逐步逼近方程组的
精确解 (3,2,1)T.
注 : 在迭代中 , 我们不可能得到 x(k) 和精确解
之间的误差 , 一般我们用 ||x(k)-x(k-1)||( 通常用无
穷范数 ) 的值来判断是否终止迭代 .
在上面的例子中 , 我们将第 i 个方程变形为左
边是 xi, 右边是其它分量和常数的线性组合 ,
然后进行迭代 , 这一方法称为 Jacobi 迭代 .

513
Jacobi 迭代法
一般的 , 对于方程组 Ax=b, 设 A 非奇异且
aii≠0(i=1,2,···,n), 将 A 改写为 A=D – L – U, 其中
 a11   0 
 a22   a21 0 
D a33  L    a31 a32 0 
        
 ann   an1 an 2 an3 0 
 0 a12 a13  a1n 
 0 a23  a2 n 
U   0  a3 n 
  
 0 

514
Jacobi 迭代法
将方程组改写为
Dx=(L+U)x+b
x=D–1(L+U)x+D–1b
令 B0=D–1(L+U)( 称为 Jacobi 迭代矩阵 ),f=D–1b,
上式简记为 x=B0x+f.
我们得到 Jacobi 迭代公式 x(k+1)=B0x(k)+f.
n
1
写成分量的形式为 x
( k 1)
i  (bi   aij x (jk ) )
aii j 1
ji

515
Gauss-Seidel 迭代法
 ( k 1) 1 (k ) (k )
x
 1  ( 3 x 2  2 x 3  20) 在前面的例子中 ,
8
 ( k 1) 1 ((kk)1) (k ) 我们计算 x1(k+1), 用
x
 2  (  4 xx 11  x 3  33)
11
 1 ((kk)1) ((kk)1)
的是第 k 步的 x2,x3;
 x3( k 1)
x
 ( 6 x11  3 x22  36) x
 12
计算 x2(k+1), 用的是第 k 步的 x1,x3, 我们有理
由认为已经计算出的第 k+1 步的 x1 比第 k
步的“好” . 因此 , 我们应该用第 k+1 步的
x1 和第 k 步的 x3 来计算 x2.
类似地 , 我们也应该用新信息计算 x3.

516
Gauss-Seidel 迭代法
n
1
xi( k 1)  (bi   aij x (jk ) )
aii j 1
ji

我们可以将上面一般的 Jacobi 迭代公式改写为


i 1 n
1
xi( k 1)  (bi   aij x (jk 1)   a ij x (jk ) )
aii j 1 j  i 1

这一迭代方法称为 Gauss-Seidel 迭代 .

517
Gauss-Seidel 迭代法 ( 算例 )
对于方程组  8 x1  3 x2  2 x3  20
 4 x1  11x2  x3  33
 6 x1  3 x2  12 x3  36
其 Gauss-Seidel 迭代公式为
 ( k 1) 1 (k ) (k )
x
 1  ( 3 x 2  2 x3  20)
8
 ( k 1) 1
 x2  ( 4 x1( k 1)  x3( k )  33)
 11
( k 1) 1
 x3  ( 6 x1( k 1)  3 x2( k 1)  36)
 12

518
Gauss-Seidel 迭代法 ( 算例 )
同样取 x(0)=(0,0,0)T, 迭代结果如下
k x1(k) x2(k) x3(k) || x ( k )  x ( k 1) ||

0 0 0 0
1 2.50000000 2.09090909 1.22727273 2.5
2 2.97272727 2.02892562 1.00413223 0.477
3 3.00981405 1.99680691 0.99589125 3.25e-2
4 2.99982978 1.99968838 1.00016302 9.98e-3
5 2.99984239 2.00007213 1.00006077 3.84e-4

519
Gauss-Seidel 迭代法
一般而言 , 如果 Jacobi 迭代与 Gauss-Seidel 迭
代都收敛 , 那么 Gauss-Seidel 迭代收敛的速度比
Jacobi 迭代收敛的速度快 ( 不总是如此 !).

不过 , 有时 Jacobi 迭代收敛 , 而 Gauss-Seidel 迭


代不收敛 .

520
Gauss-Seidel 迭代法 ( 矩阵表示 )
i 1 n
1
x ( k 1)
i  (bi   aij x (j k 1)   a ij x (jk ) )
aii j 1 j  i 1

上面的 Gauss-Seidel 迭代方法等价于


i 1 n
aii xi( k 1)  bi   aij x (j k 1)   a ij x (j k )
j 1 j  i 1
i 1 n

 ij j
a
j 1
x ( k 1)
 a x
ii i
( k 1)
 bi  
j  i 1
a ij x (jk )


( D  L) x ( k 1)  b  Ux ( k )

521
Gauss-Seidel 迭代法 ( 矩阵表示 )
( D  L) x ( k 1)  b  Ux ( k )
x ( k 1)  ( D  L)1Ux ( k )  ( D  L)1 b

因此 Gauss-Seidel 迭代方法的矩阵形式为
x(k+1)=Gx(k)+f
其中 G=(D–L)–1U( 称为 Gauss-Seidel 迭代矩
阵 ),
f=(D–L)–1b.

522
§3 迭代法的收敛性

定义 2 设有矩阵序列 Ak=(aij(k))n(k=1,2,···) 及
A=(aij)n, 如果
lim aij( k )  aij ( i , j  1, 2, , n)
k 

成立 , 则称 {Ak} 收敛于 A, 记为 lim


k 
Ak  A.

定理 1 lim
k 
Ak  A 的充要条件是 ||Ak-A||
→0(k→∞).
其中的范数是任何一种矩阵范数 .

523
迭代法的收敛性
 1  k
k  k 1  ,
对于矩阵 A   0   , 有 Ak  
   0  k 

因此 , 当 ||<1 Ak   0 0  ( k   ).
0 0
时,

524
迭代法收敛的条件 (P204)
根据方程组的解 x*, 可以定义误差向量
(k)=x(k)-x*,
由 x(k+1)=Bx(k)+f, x*=Bx*+f 可以得到
(k+1)=B(k).
因此 (k)=Bk(0),
要迭代收敛 , 必须 (k)0( 零向量 ), 即 Bk(0) 0.
我们希望对任意 (0) 上式都成立 , 必须
Bk O( 零矩阵 ).

525
迭代法收敛的条件
性质 ( 习题 6)lim
k 
Ak  A 的充要条件是对于
任意的向量 x 均有 lim Ak x  Ax .
k 

证明思路 必要性 : 根据下面的不等式得到


|| Ak x  Ax |||| Ak  A |||| x ||
充分性 : 取单位向量 e1,e2,···,en, 根据下式可证
|| Ak  A ||1  max{|| ( Ak  A)ei ||}
1 i  n

526
迭代法的收敛性
对于迭代格式 x(k+1)=Bx(k)+f, 要使它对任意的
初始向量 x(0) 都收敛 , 必须 Bk→O(k→∞).
如果 B 有 n 个线性无关的特征向量
u1,u2,···,un, 对应的特征值为 1,2,···,n.
对于任意的 n 维向量 x, x 可以写为
n

x  u
i 1
i i

527
迭代法的收敛性
由于 Bui=iui,
可以证明 Bkui=kui(k=1,2,···).
n n
因此 B k x    i B k ui    i ik ui
i 1 i 1

若 |i|<1(i=1,2,···,n), 显然当 k→∞ ik  0,


n
时 ,
对于任意向量 x, B k
x    
k
u  0.
i 1
i i i

因此 Bk→O.

528
迭代法的收敛性
反之 , 若 Bk→0, 则 Bkui=ikui→0, 因此 , 对
i=1,···,n, 均有 |i|<1.
所以在 B 有 n 个线性无关的特征向量的条件下 ,
Bk→O(k→∞) 的充要条件是 (B)<1.
事实上 , 有下面的定理
定理 2 设 B=(bij)n, 则 Bk→O(k→∞) 的充要条件
是 (B)<1.

529
迭代法基本定理
定理 3 设有方程组
x=Bx+f
对于任意的初始向量 x(0) 及任意的 f, 解此方程
组的迭代法 (x(k+1)=Bx(k)+f) 收敛的充要条件是
 (B)<1.

530
迭代法基本定理
 3 2
在例 1 中 ,Jacobi 迭  0 8
 
8
 4 1 
代矩阵为 B0    0
11 11 
 6 3 
  0 
B0 的特征方程  12 12 
为 I  B0 )   3  0.034090909  0.039772727  0,
det(
解得 1  0.3082, 2,3  0.1541  0.3245i ,
显然有 (B0)<1,Jacobi 迭代收敛 .

531
迭代法的收敛速度
如果 B 有 n 个线性无关的特征向量 u1,u2,···,un,
对应的特征值为 1,2,···,n. 设初始误差向量为
n

 ( 0)   u
i 1
i i

则第 k 步的误差向量
n n
为 (k )
 k (0)
B  k
 B u
i 1
i i   
i 1
i i
k
ui

若 (B)<1, 则 ik→0. 收敛速度可以用 max|


i| 即 (B) 来衡量 .

532
迭代法的收敛速度
n

 (k )   i i ui
 
i 1
k

一般 , 在要求误差小于 =10-s 时 , 我们直接要求


[  ( B )]k  10 s

s ln 10
k
 ln  ( B )
有时称– ln(B) 为迭代法的收敛速度 .

533
迭代法的收敛性
特征值是比较难以计算的 , 因此 , 用 (B) <1
这一条件来判断迭代是否收敛较为困难 .
由于 (B)≤||B||(=1,2,∞, 或 F), 所以 ||B||<1
是迭代收敛的一个充分条件 .

534
迭代法的收敛性
设 ||B||=q<1, 则
|| x ( k 1)  x ( k ) ||
|| ( Bx ( k )  f )  ( Bx ( k 1)  f ) ||
|| B( x ( k )  x ( k 1) ) ||
|| B || || x ( k )  x ( k 1) ||
(k ) ( k 1)
 q || x x ||
因此
|| x ( k 1)  x ( k ) ||  q || x ( k )  x ( k 1) ||

535
迭代法的收敛性
设 x* 为方程组的解 (x*=Bx*+f)
|| x ( k 1)  x * ||
|| ( Bx ( k )  f )  ( Bx *  f ) ||
|| B( x ( k )  x * ) ||
|| B || || x ( k )  x * ||
(k ) *
 q || x  x ||
因此
|| x ( k 1)  x * ||  q || x ( k )  x * ||

536
迭代法的收敛性
( k 1) * (k ) *
|| x || || ( x
( k 1)
x (k )  x )  ( x  x ) ||
|| x ( k )  x * ||  || x ( k 1)  x * ||
 (1  q ) || x ( k )  x * ||
|| x ( k )  x * ||  q || x ( k )  x * ||
1 q (k ) ( k 1)
|| x ( k ) *
 x ||  || x ( k 1) (k ) 
 x || 1  q || x  x ||
1 q
根据上式和 ||x(k+1)–x(k)|| ≤q||x(k)–x(k–1)|| , 可以得到
k
q
|| x ( k )  x * ||  || x (1)  x ( 0 ) ||
1 q

537
迭代法的收敛性
(k ) * q
|| x  x ||  || x ( k )  x ( k 1) ||
1 q
我们在实际计算时 , 常根据 ||x(k)–x(k–1)|| 的值来判
断是否终止计算 .
上面的不等式表明这样终止计算有一定的根据 .
在 q 的值接近于 1 时 , 可能会出现 ||x(k)–x(k–1)|| 较
小而 ||x(k)–x*|| 较大的情况

538
迭代法的收敛性
定理 4 如果方程组 x=Bx+f 的迭代公式为
x(k+1)=Bx(k)+f (x(0) 为任意初始向量 ), 且迭代矩阵
的某一种算子范数 ||B||=q<1, 则
1. 迭代法收敛 (F 范数小于 1, 此结论也成立 )
q
2. || x (k ) *
 x ||  || x ( k )  x ( k 1) ||
1 q
3. q k
|| x ( k )  x * ||  || x (1)  x ( 0 ) ||
1 q

539
迭代法的收敛性
 3 2
 0 8
 
8
 4 1 
B0    0
11 11 
 6 3 
  0 
 12 12 

对于前面的算例中的 Jacobi 迭代矩阵 B0, 易见


||B0||∞=max{5/8,5/11/9/12}=9/12<1,
因此 ,Jacobi 迭代收敛 .

540
迭代法的收敛性
存在这样的矩阵 , 其谱半径小于 1, 但各种范
数大于 1, 因此不能根据范数大于 1 来判断迭
代法发散 .


B 0. 9 0  1  0.9, 2  0.8
 0.3 0.8 
|| B ||1  1.2,|| B ||  1.1,|| B ||2  1.021,|| B ||F  1.54 .

541
对角优势阵
定义 4 设 A=(aij)n∈Rn×n( 或 Cn×n),
(1) 如果矩阵 A 满足条件
n

| aii | | a
j 1
ij |( i  1, 2, , n)
ji

即 A 的每一行的对角元素的绝对值都严格
大于同行其它元素绝对值之和 , 则称 A 为
严格对角优势矩阵 .

542
对角优势阵
n
(2) 如果 | aii |  | aij |( i  1, 2, , n)
j 1
ji

且至少有一个不等式严格成立 , 称 A 为弱对
角优势矩阵 .

543
对角占优定理
定理 6 如果 A=(aij)n∈Rn×n( 或 Cn×n) 为严格对角
优势阵 ( 或为不可约弱对角优势阵 ), 则 A 为非
奇异矩阵 .
证明 若 det(A)=0, 则 Ax=0 有非零解 , 记为
x=(x1,x2,···,xn)T. 又记 | xk | max
1 i  n
| xi | 0
Ax=0 的第 k 个方程 n

为 a
j 1
kj x j  0,

544
对角占优定理
n n n

| akk xk ||  akj x j |  | a kj || x j | | xk |  | akj |


j 1 j 1 j 1
jk jk jk

n
因此 | a | | a |,
kk  kj j 1
jk

与假设矛盾 , 故 det(A)≠0, 即 A 非奇异 .

545
迭代法收敛的充分条件
定理 7 如果 A∈Rn×n 为严格对角优势矩阵 ( 或
为不可约弱对角优势矩阵 ), 则对任意的 x(0),
解方程组 Ax=b 的 Jacobi 迭代法 ,Gauss-
Seidel 迭代法均收敛 .
证明 我们证明 Jacobi 迭代法收敛 .
由假设可知 aii≠0(i=1,2,···,n), 解方程组 Ax=b
的 Jacobi 迭代法的迭代矩阵为
B0=D–1(L+U).

546
迭代法收敛的充分条件
det( I  B0 )  det(  I  D 1 ( L  U ))
 det( D 1 )det(  D  ( L  U ))
设 B=D-(L+U)
下面说明 ||≥1 时 ,det(B)≠0, 从而 det(I-B0)≠0,
于是 (B0)<1,Jacobi 迭代法收敛 .
  a11 a12 a1n 
a  a22 a2 n 
B  21

    
 
 an1 an 2   ann 

547
迭代法收敛的充分条件
  a11 a12 a1n 
a  a22 a2 n 
B   D  ( L  U )   21
    
 
 an1 an 2   ann 
n

A 为严格对角优势阵 ,| aii |  | aij |( i  1, 2, , n)


j 1
n ji
若 ||≥1, 显然 |  aii | | a
j 1
ij |( i  1, 2, , n)
ji

因此 B 为严格对角优势阵 ,det(B)≠0.

548
§4 超松弛迭代 (SOR) 方法
xi( k ) xi((kG)1) (1   ) xi( k )   xi((kG)1)
沿着从 xi(k) 到 xi (k+1) (G) 的方向再向前走 , 就得到
超松弛迭代 (SOR) 方法 .
假设已知第 k 步的迭代向量 x(k) 以及第 k+1 步
迭代向量 x(k+1) 的前 i–1 个分量已知 ,Gauss-
Seidel 迭代法取 1 i 1 n
x i( k 1)  (bi   aij x (j k 1)   a ij x (jk ) )
aii j 1 j  i 1

549
超松弛迭代方法
我们定义新的 xi(k+1) 为 xi(k) 与 x i( k 1) 的加权平均 .
xi( k 1)  (1   ) xi( k )   x i( k 1)  xi( k )   ( x i( k 1)  xi( k ) )
i 1 n

 x (k )
i  (bi   aij x j
( k 1)
  aij x j )
(k )
aii j 1 ji

在 =1 时 , 上述方法就是 Gauss-Seidel 方
法 ,<1 时 , 称为低松弛法 ,>1 时称为超松弛
法 ( 有时不管的范围 , 统称为超松弛方法 ).

550
超松弛迭代方法 ( 算例 )
 4 1 1 1   x1  1
对于方程组  1 4 1  x   
1   2  1
 
1 1 4 1   x3  1
    
1 1 1 4   x4  1

松弛方法迭代格式为
 x1( k 1)  x1( k )   (1  4 x1( k )  x2( k )  x3( k )  x4( k ) ) / 4
 ( k 1)
 x2  x2( k )   (1  x1( k 1)  4 x2( k )  x3( k )  x4( k ) ) / 4
 ( k 1)
 x3  x3( k )   (1  x1( k 1)  x2( k 1)  4 x3( k )  x4( k ) ) / 4
 x4( k 1)  x4( k )   (1  x1( k 1)  x2( k 1)  x3( k 1)  4 x4( k ) ) / 4

551
超松弛迭代方法 ( 算例 )
取 x(0)=0,=1.3, 终止准则为 ||x(k)–x(k–1)||∞<10-5.
k x1(k) x2(k) x3(k) x4(k) || x ( k )  x ( k 1) ||

0 0 0 0 0
1 -0.32500000 -0.43062500 -0.57057813 -0.75601602 0.756
2 -0.79858622 -0.88649937 -0.94718783 -0.95368731 0.474
10 -1.00000717 -0.99999179 -1.00000289 -1.00000170 3.45e-5
11 -0.99999667 -1.00000287 -0.99999954 -0.99999919 1.11e-5
12 -1.00000152 -0.99999922 -1.00000012 -1.00000052 4.85e-6

552
超松弛迭代方法 ( 算例 )
我们来观察松弛因子对收敛速度的影响 .
 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
步数 301 156 104 76 59 47 38 31 26 21
 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
步数 17 12 12 15 18 24 35 55 114 **

步数表示 ||x(k)–x(k–1)||∞<10-5 时的迭代步数 ,=2.0


时 ,500 步以内不收敛 .

553
超松弛迭代方法 ( 矩阵表示 )
i 1 n

xi( k 1)  xi( k )  (bi   aij x (j k 1)   aij x (j k ) )
aii j 1 ji

超松弛迭代格式可以写为
i 1 n
aii x ( k 1)
i  (1   )aii x (k )
i   (bi   a ij x ( k 1)
j  a ij
(k )
x )
j
j 1 j  i 1

用矩阵可以表示为
Dx ( k 1)  (1   ) Dx ( k )   (b  Lx ( k 1)  Ux ( k ) )
( D   L) x ( k 1)  ((1   ) D  U ) x ( k )   b

554
超松弛迭代方法 ( 矩阵表示 )
( D   L) x ( k 1)  ((1   ) D  U ) x ( k )   b
在 aii≠0(i=1,2,···,n) 时 D–L 非奇异 ,
x ( k 1)  ( D   L)1 ((1   ) D  U ) x ( k )   ( D   L) 1 b
超松弛方法迭代格式为 x ( k 1)  L x ( k )  f
其中 Lw  ( D   L)1 ((1   ) D  U )
f   ( D   L ) 1 b

555
超松弛迭代方法 ( 收敛的必要条
件)
定理 9 设方程组系数矩阵的对角元非零 , 求解
定理 9 设方程组系数矩阵的对角元非零 , 求解
方程组的超松弛迭代方法收敛 , 则 0< <2.
证明 由于迭代法收敛 , 显然 (L)<1.
设 L 的特征值为 1,2,···,n, 则
| det( L ) || 12  n |  (  ( L ))n , | det( L ) |1/ n   ( L )  1.
而 det( L )  det(( D   L)1 )det((1   ) D  U )
 det( D 1 )det((1   ) D  U )
n
 det((1   ) I   D U ) 1  (1   )
因此 | 1   | 1, 0    2.

556
超松弛迭代方法 ( 收敛的充分条
件)
对于一般的系数矩阵 , 我们较难给出超松弛迭
代方法的充分条件 . 在 A 为对称正定矩阵时 ,
有下面的结果 .

定理 10 如果 A 为对称正定矩阵 , 且 0<<2,
则求解以 A 为系数矩阵的超松弛迭代法收敛 .
证明略 .

557
第九章
矩阵的特征值
与特征向量计算
作业
(1)Page 252 1
(2) 用 Householder
变换的方法对矩阵
进行 QR 分解 ( 用精确值计算 ).

答案 :

559
§1 引言
定理 1 如果 i(i=1,2,···,n) 是矩阵 A 的特征值 , 则有

1
2
定理 2 设 A 与 B 为相似矩阵 ( 存在可逆矩阵
T, 使得 B=T-1AT), 则
1 A 与 B 有相同的特征值
2 若 x 是 B 的一个特征向量 , 则 Tx 是 A 的特
征向量 .
560
Gerschgorin’s 定理
定理 3 设 A=(aij)n×n, 则 A 的每一特征值必属
于下述某个圆盘之中 :

注 : 我们只能断定任何一个特征值在 n 个圆
盘的并集之中 , 不能说 n 个特征值分别在
n 个圆盘之中 .

561
Gerschgorin’s 定理
证明 设为 A 的任意一个特征值 ,x 为对应的
特征向量 , 则有
(I-A)x=0.
记 x=(x1,x2,···,xn)T≠0 及 |xi|=max{|xk||1≤k≤n},
方程组的第 i 个方程为

562
Gerschgorin’s 定理

因此有

563
Gerschgorin’s 定理
注 : 并不是 n 个特征值分属于 n 个圆盘 , 定理
只是说明特征值一定在特征向量中绝对值最
大的的分量对应的圆盘中 .
矩阵第三行对应的
例如 : 矩 圆盘为 |–33|≤9.

该圆盘中无特征
的三个特征值为 -7,14,21. 值.

564
Rayleigh 商
定义 1 设 A 为 n 阶实对称矩阵 , 对于任一非零向量
x, 称 R(x)=xTAx/xTx 为对应于向量 x 的 Rayleigh 商 .
定理 4 设 A 为 n 阶实对称矩阵 , 其特征值次序
记为 1≥2≥···≥n, 对应的特征向量 x1,x2,···,xn
组成规范化正交组 , 即 (xi,xj)=ij, 则
1

565
§2 幂法及反幂法
对于一个 n 阶矩阵 A, 一个 n 维向量 u,Au 是
一个 n 维向量 , 如果再用 A 连续地进行左乘 ,
得到一个向量序列 , 该序列有什么性质 ?

Aku(k=1,2,···,10) 这 10 个向量所代表的点可以
用下面的图形来表示 .

566
150

125

100

75

50

25

567
50 100 150 200 250 300
幂法
可以看出 , 上面这 10 个点近似的在一条直线上 .
下表给出了 10 个向量的单位化向量以及它们的长
度 ( 无穷范数 ).
k Aku/max(Aku) max(Aku) k Aku/max(Aku) max(Aku)
1 (1.,0.875000) 2.67 6 (1.,0.503078) 42.78
2 (1.,0.630435) 5.11 7 (1.,0.501230) 71.39
3 (1.,0.549587) 8.96 8 (1.,0.500492) 119.04
4 (1.,0.519449) 15.23 9 (1.,0.500197) 198.43
5 (1.,0.507720) 25.59 10 (1.,0.500079) 330.75
568
幂法
可以看出 , 向量的方向趋于一致 .
向量的长度逐渐扩大 , 扩大的倍数是下面几个数 :
1.91667, 1.75362, 1.69972, 1.67963, 1.67181,
1.66872, 1.66749, 1.66699, 1.6668
长度扩大的倍数也趋于一致 .

569
幂法


因此
x 是 A 的近似特征向量 , 是 A 的近似特征
值.
570
幂法
问题 : 计算矩阵的主特征值及对应的特征向量
条件 :A 有特征根 |1| > |2|  …  |n|  0,
对应 n 个线性无关的特征向量 x1,···,xn.
思路 : 从任意 v0≠0 出发

571
幂法

当 k 充分大时 ,

求得近似特征向量

求得近似特征值

572
幂法
定理 5 设 A∈Rn×n 有 n 个线性无关的特征向量
x1,x2,···,xn, 主特征值 1 满足 |1|>|2|  …  |n|,
对于初始向量 v0=a1x1+a2x2+···+anxn(a1≠0), ≠0
vk=Akv0, 则有

注 若绝对值最大的特征值只有一个 , 且为实
数 , 则当其为重根时 , 上面的结论依然成立 .
573
幂法
在上面的方法中 , 向量长度逐渐扩大 ( 扩大的倍
数是 |1|), 有可能导致计算溢出 ( 趋于无穷或零 ).
为避免溢出 , 计算时 , 可以每次将向量规范化 . 任
取向量 u0=v0≠0(a1≠0), 构造向量序列

574
幂法

根据

可得

规范化向量序列收敛到主特征值对应的特征向
量.
575
幂法
类似可以得到

576
幂法
定理 6 设 A∈Rn×n 有 n 个线性无关的特征向量
x1,x2,···,xn, 主特征值 1 满足 |1|>|2| ≥··· ≥ |n|,
对于初始向量 v0=u0=a1x1+a2x2+···+anxn(a1≠0), ≠0
按如下方法构造的向量序列

577
幂法
注 : 上述定理是错误的 !
错误的原因 :max 运算不具备连续性 .
若 不能推出
若加上条件 : 主特征值对应的特征向量只
有一个分量的绝对值最大 , 则定理成立 .

578
幂法 ( 算例 )
用幂法计算右边矩阵的
主特征值和相应的特征
向量 .
解 : 取初始向量 v0=u0=(1,1,1)T.
v1=Au0=(2.5,2.25,2.75)T,max(v1)=2.75,
u1=v1/max(v1)=(0.9091,0.8182,1)T.
下面的计算过程见下表 .
( 终止准则 : |max(vk)-max(vk–1) |<5*10-5)

579
幂法 ( 算例 )
k ukT max(vk) |max(vk)-max(vk–1) |
0 (1,1,1)
1 (0.9091,0.8182,1) 2.75000 0.1818
2 (0.8376,0.7346,1) 2.65909 7.46e-2
14 (0.7484,0.6498,1) 2.53670 9.82e-5
15 (0.7483,0.6497,1) 2.53662 7.13e-5
16 (0.7483,0.6497,1) 2.53658 4.16e-5
因此 , 主特征值约为 2.5367, 主特征向量约
为 (0.7483,0.6497,1)
580
加速方法 ( 原点平移法 )
应用幂法计算矩阵 A 的主特征值的收敛速度主
要由比值 r=1/2 来确定 . 当 r 接近于 1 时 , 收
敛速度较慢 .
令 B=A-pI,
若 A 的特征值为 1,2,···,n, 则 B 的特征值为
 1-p,2-p,···,n-p, 且对应特征向量相同 .
选择 p 的目的 :1-p 仍然是 B 的主特征值 , 且

581
加速方法 ( 原点平移法 )
例 2 若四阶矩阵 A 的特征值为 11,12,13,14,
则对应的比值 r=1/2 =0.9286.
作变换 B=A-12I.
则 B 的特征值为 2,1,0,-1.
应用幂法求 B 的主特征值的收敛速度对应的
比值为 0.5.
显然收敛速度得到加快 .

582
加速方法 ( 原点平移法 )
如果 A 的特征值满足 1>2 ≥···>n,
则 B=A-pI 的主特征值为 1-p 或 n-p.
选取 p 的目的是使
| 1-p |>| n-p |, 且使下式取得最小

583
加速方法 ( 原点平移法 )
显然 , 当 2-p=-(n-p), 即
p=(2+n)/2=p* 时为最小 ,
这时对应的比值为

584
原点平移法算例

对上面的矩阵作变换 B=A-pI, 取 p=0.75, 则

对 B 应用幂法 , 得到下表的结果 .

585
原点平移法算例
k ukT max(vk) |max(vk)-max(vk–1) |
0 (1,1,1)
1 (0.8750,0.7500,1) 2.00000 0.2500
2 (0.7833,0.7000,1) 1.87500 9.17e-2
9 (0.7483,0.6497,1) 1.78666 1.69e-4
10 (0.7482,0.6497,1) 1.78659 7.35e-5
11 (0.7482,0.6497,1) 1.78655 4.36e-5
因此 ,B 的主特征值约为 1.78655,A 的主特
征约为 1.7866+0.75=2.53655.
586
Rayleigh 商加速
根据定理 4

对称矩阵的绝对值最大 , 最小的特征值可以
用 Rayleigh 商的极值来表示 .
我们可以将 Rayleigh 商应用到幂法计算对
称矩阵的主特征值的加速收敛上来 .

587
Rayleigh 商加速
定理 7 设 A∈Rn×n 为对称矩阵 , 特征值满足 |1|>|
2| ≥··· ≥ |n|, 应用幂法计算 A 的主特征值 1, 则
规范化向量 uk 的 Rayleigh 商给出 1 的较好的近

588
Rayleigh 商加速 ( 算例 )

我们采用幂法及 Rayleigh 商加速来计算 A 的


主特征值 . 取初始向量 v0=u0=(1,1,1)T.
v1=Au0=(2.5,2.25,2.75)T,max(v1)=2.75,
u1=v1/max(v1)=(0.9091,0.8182,1)T.

589
Rayleigh 商加速 ( 算例 )
k

1 2.52483
2 2.53252 7.68e-3
3 2.53516 2.64e-3
4 2.53606 9.02e-4
5 2.53637 3.08e-4
6 2.53647 1.05e-4
7 2.53651 3.57e-5

590
反幂法
反幂法用来计算矩阵的按模最小的特征值及对应
的特征向量 .
设 A∈Rn×n 为非奇异矩阵 , 特征值满足 |1| ≥ |2|
≥··· ≥ |n|, 相应的特征向量为 x1,x2,···,xn, 则 A-1 的
特征值为 |1/n| ≥ |1/n-1| ≥··· ≥ |1/1|, 对应的特征
向量为 xn,xn-1,···,x1.
因此计算 A 的模最小的特征值转化为计算 A-1 的
主特征值 .
对 A-1 应用幂法进行迭代就称为反幂法 .
591
反幂法
定理 8 设 (1)A∈Rn×n 有 n 个线性无关的特征向
量 x1,x2,···,xn,(2) A 非奇异且特征值满足 |1| ≥ |
2| ≥··· > |n|>0, 对于初始向量
v0=u0=a1x1+a2x2+···+anxn(an≠0),
≠0 按如下反幂法

构造的向量序列 {vk},{uk} 满足

注 : 本定理有类似于定理 6 的问题 .
592
反幂法
如果已知矩阵的某个特征值 j 的近似值 p, 满足
|j-p|<|i-p|(i≠j), 于是 1/(j-p) 是 (A-pI)-1 的主特
征值 . 我们可以用反幂法来求出该特征值及对
应的特征向量 .
在计算过程中 , 有 vk=(A-pI)-1uk-1.
我们通过求解方程组 (A-pI)vk =uk-1 得到 vk.
由于要反复求解同一个系数矩阵对应的方程组 ,
我们先对 (A-pI) 进行三角分解 , 然后求解 .

593
反幂法 ( 算例 )
例 4 用反幂法求 A 的对应计算特征值
 =1.2679 的特征向量 .

对应的精确特征值为

594
反幂法 ( 算例 )
解 : 先对 (A-pI) 用列选主元方法进行三角分
解 , 得到 P(A-pI)=LU, 其中

 1 1.7321 1 
U   0 1 2.7321 

 0 0 0.29517  103 

595
反幂法 ( 算例 )
取 Uv1=(1,1,1)T, 得
v1=(12644,-9255.1,3387.9)T,
u1=(1,-0.73198,0.26795)T,
由 LUv2=Pu1, 得
v2=(20328,-14881,5446.8)T,
u2=(1,-0.73205,0.26795)T.
而 A 的对应的特征向量的精确值取前 5 位有效数
字与 u2 是一致的 .
596
§3 Jacobi 方法
本节考虑的问题是计算实对称矩阵的全部特
征值与对应的特征向量 .
若 A 为实对称矩阵 , 则存在正交阵 P, 使得

D 的对角元就是 A 的特征值 ,PT 的列向量就


是 A 的特征向量 .
正交阵 P 是指 PPT=PTP=I 或 P 的列向量为规
范向量组 .
597
Jacobi 方法 ( 二阶 )
对于二阶对称阵
我们要寻找二阶正交阵 P, 将 A 对角
化 .
P 可以写为如下形

此时可以求得

其中

598
Jacobi 方法 ( 二阶 )

为使得 c12 与 c21 为零 , 可以选择使得

因此
当 a11=a22 时选取 =/4.

599
Jacobi 方法
在 Rn 空间中 , 我们针对其中的两个分量实施
旋转变换 y=Px. 其中

600
Jacobi 方法
具体的坐标变换格式为

变换矩阵 P 具有如下性质
1. P 为正交阵
2. P 与单位阵只在 (i,i), (i,i), (i,i), (i,i)4 个位置
上的元素不一样
3. PA 只改变 A 的第 i 行与第 j 行元素 ,APT 只
改变 A 的第 i 列与第 j 列元素 .PAPT 只改变 A
的第 i 行 , 第 j 行 , 第 i 列 , 第 j 列元素 .

601
Jacobi 方法
定理 10 设 A 为 n 阶对称矩阵 ,C=PAPT, 其中
P 为正交矩阵 , 则

明:

同理
A 与 C 的特征值一致 , 因

602
Jacobi 方法
对 A∈Rn×n ,P(i,j) 为一平面旋转矩阵 , 则
C=PAPT 的计算公式为

603
Jacobi 方法
若 A 的非对角元 aij≠0, 可以选择平面旋转矩阵
P(i,j), 使得

即选择 , 使

604
Jacobi 方法
设 A∈Rn×n 为对称矩阵 , aij≠0 为 A 的一个非对角元
素 , 则可选择一平面旋转阵 P(i,j), 使 C=PAPT 的非
对角元素 cij=cji=0 且 C 与 A 的元素满足下列关系

C 的对角元的平方和比 A 的对角元的平方和
增加了 2a2ij, 而非对角元的平方和减少了 2a2ij.
605
Jacobi 方法
Jacobi 方法首先在 A 的非对角线元素中选取
绝对值最大的元素 , 然后选择一个平面旋转矩
阵 P1, 使得 A1=P1AP1T 在该处的元素变为 0, 然
后再对 A1 实施类似的变换 . 最终使得矩阵的
非对角线元素的绝对值充分的小 , 从而求得 A
的全部近似特征值 .

606
Jacobi 方法
对 A 实施了 m 次平面旋转变换后 , 有

其中 D 是一个对角矩阵 .
令 Rm=Pm···P2P1, 则有
RmARmT≈D.
于是 ,RmT 的列向量就是 A 的近似特征向量 .

607
Jacobi 方法的收敛性
定理 13 设 A=(aij)n 为实对称矩阵 , 对 A 实施上述
一系列平面旋转变换 Am=PmAm-1PmT(m=1,2,···,) 则
( 对角矩阵 )
证明 记


608
Jacobi 方法的收敛性

因此

上式说明 A 的非对角元趋于零 .
关于对角元的收敛性证明略去 .

609
Jacobi 方法计算步骤
(1) 先选取 A 的绝对值最大非对角线元素 , 设为 aij.
(2) 计算平面旋转矩阵对应的角度的三角函数

610
Jacobi 方法计算步骤
(3) 计算 A 矩阵变换后的第 i,j 行和 i,j 列元素

(4) 计算 R 矩阵变换后的第 i,j 列元素

611
Jacobi 方法 ( 算例 )
例 5 用 Jacobi 方法计算对称矩

的特征值和特征向量
的特征值和特征向量 .
解 : 第 1 步 A0=A, 选取 A0 的绝对值最大的元
素 a12= -1,i=1,j=2.
d=0,t=1,c=s=0.7071068,

612
Jacobi 方法 ( 算例 )

设终止准则为非对角线平方和小于 10-10, 可以
得到下面的计算结果 .

613
614
A8 的非对角元平方和为 6.06×10-16.
特征值精确值 :3.41421356, 2, 0.585786438,

615
Jacobi 方法 ( 算例 )
最终得到的矩阵 R 为

精确值为

616
Jacobi 过关法
在 Jacobi 方法每一步迭代过程中 , 矩阵的计
算为 O(n).
但是每一步迭代时需要进行 n(n-1)/2 个比较 ,
会浪费太多的时间 .
实际计算中 , 我们将 Jacobi 方法改为 Jacobi
过关法 .

617
Jacobi 过关法

设置关口 v1=v0/n, 在 A 的 ( 上三角部分 ) 非对


角线元素中按行扫描 , 一旦有非对角元 aij 的绝
对值大于等于 v1, 则实施平面旋转变换将 aij 的
化为零 .
重复这一过程 , 直到所有非对角元都 “过
关” .
再设第 2 道关口 v2=v1/n.
618
Jacobi 过关法 ( 算例 )
对于前面的算例 , 改用 Jacobi 过关法 , 前两步
得到的 A 矩阵是一致的

在得到 A2 后 , 由于 a12 不能过关 , 我们直接


对该元素进行变换 , 因此 A3 矩阵与 Jacobi
方法中不再一致 .

619
Jacobi 过关法 ( 算例 )

实施 8 次变换最终得到的 A 矩阵为

对角元平方和为 3.75×10-15, 与 Jacobi 方法计


算结果基本一致 .

620
HouseHolder 方法
对于实对称矩阵 A, 虽然在理论上存在正交矩
阵 P, 使得 PAPT 为对角矩阵 , 但是矩阵 P 一
般不易直接求得 .
不过我们容易实现一个实对称矩阵与三对角
矩阵的正交相似 .
对于一般的矩阵 , 我们可以将其与一个上
Hessenberg 矩阵实现正交相似 .

621
上 Hessenberg 矩阵
如下形式的矩阵称为上 Hessenberg 矩阵 .

622
矩阵的上 Hessenberg 化
对于一般的矩阵 , 我们将其正交相似与一个上
Hessenberg 矩阵 , 然后再使用 QR 方法 ( 下一
节 ) 可以求出其特征值与特征向量 .

623
初等反射阵
给定 Rn 空间中的一点 ( 用向量 v 表示 ), 给定
一个平面 S:wTx=0(w 为其单位法向量 ).
现在要求出 v 关于平面 S 的对称点
v’.
设 y 为 v 在 w 方向上的投

即 .v=x+w,xTw=0. 则有 x
S
w v=w (x+w)=w w=
T T T
v
因此 v’=v-2y=v-2wwTv=(I-2wwT)v.
 =wTv.
624
初等反射阵
v’= (I-2wwT)v.
称矩阵 H=I-2wwT 为初等反射阵 , 记为 H(w).

对于非零向量 u,u/||u|| 为单位向量 , 因此矩阵


H=I-2uuT /||u||2 为初等反射阵 .

625
初等反射阵的性质
定理 15 初等反射阵 H 是对称阵 (HT=H), 正
交阵 (HTH=I), 对合阵 (H2=I).
证明 : H=I-2wwT, HT=(I-2wwT)T=I-2wwT=H.
HTH=H2=(I-2wwT) (I-2wwT)
=I-4wwT+4wwTwwT
=I

626
初等反射阵
问题 : 对于 Rn 空间中的任意两个长度相等的向量
x≠y, 能否找到初等反射阵 H, 使得 Hx=y?

显然 , 将向量 x – y, 单位化得
到向量 w, 其对应的初等反射
阵 H, 能够使得 Hx=y.
即 S

627
初等反射阵

因此

628
矩阵的上 Hessenberg 化
对于一般的矩阵 A, 我们希望借助于通过初等
反射阵将 A 通过相似变换 ( 称为 Householder
变换 ) 进行简化 , 即使得 A0=H1AH1T 尽量的简
化.
我们可以找到一个初等反射阵 H 先使得 A 的
第一列的零元素尽量的多 .
即 H[a1,a2,···,an]=[e1,b2,···,bn],
其中为 a1 的长度 .

629
矩阵的上 Hessenberg 化
H[a1,a2,···,an]=[e1,b2,···,bn]
我们目的是求矩阵的特征值 , 因此必须对矩阵
实施相似变换 .
因此用 H 左乘时 , 必须用 H(=H-1) 也进行右乘 .
得到的矩阵为
HAHT=[e1,b2,···,bn]HT
此时矩阵的第一列一般不再稀疏 .

630
矩阵的上 Hessenberg 化
要使得矩阵右乘一个矩阵 H 保持第一列不
变 ,H 的第一行必须为 [1,0,···,0].

因此实施 Householder 变换的初等反射阵只能


是下面的形式

其中 H0 为 n-1 阶的方阵 .

631
矩阵的上 Hessenberg 化

将矩阵 A 进行类似
的分块 . 可以得到
因此 , 我们只能选取 n-1 阶
的初等反射阵 H0, 使得
H0A21 成为 e1(n-1 维 ), 通
过对应的矩阵 H 对 A 实施
Householder 变换后得到如
下形式的矩阵 .
632
矩阵的上 Hessenberg 化
对于右下角的 n-1 阶矩
阵 , 我们类似的可以找
到一个 Househoulder 变
换将其第一列的后面 n-3
个元素变为 0.

这样两步变换后矩
阵的形式成为

633
矩阵的上 Hessenberg 化
最终我们可将矩阵变换为上 Hessenberg 矩阵 .

634
矩阵的上 Hessenberg 化


选取初等反射阵 H(n-1 阶 ), 使得 Hx= -e1(n-1
维 ),
显然有


若 a21 与 1 异号 , 会造成有效数字的损失 , 因
此取

635
矩阵的上 Hessenberg 化
第1

2
n-2
1 1 n-2
636
假设对 A 已经进行了 k-1 步正交相似约化 , 得

k
n-k
k-1 1 n-k
637
k
n-k
第k k-1 1 n-k

将此过程进行 n-2 步 , 即得到初等反射阵 U1,···,Un-


2, 使得 Un-2···U1AU1···Un-2=C( 上 Hessenberg 阵 )

638
对称矩阵的上 Hessenberg 化
若 A 为对称矩阵 , 根据前面结论 , 存在初等反射阵
初等反射阵 U1,···,Un-2, 使得 Un-2···U1AU1···Un-2=C
( 上 Hessenberg 阵 ).

显然此时 C 为对称矩阵 .
对称的上 Hessenberg 阵显然为三对角矩阵 .
我们得到定理 18.

639
对称矩阵的上 Hessenberg 化
定理 18 如果 A∈Rn×n 为对称矩阵 , 存在初等
反射阵 U1,···,Un-2, 使得

640
上 Hessenberg 化 ( 算例 )
例 6 用 Householder 方法将下述矩阵化为上
Hessenberg 阵 .

解 : 确定变

其中 R1 为初等反射阵 ,

641
上 Hessenberg 化 ( 算例 )

于是可以得到 R1 的数值 .
根据 R1,U1 就确定下来 , 可以得到
A2=U1AU1.

642
QR 算法
若 A 为非奇异矩阵 , 则存在正交矩阵 Q 及上
三角矩阵 R, 使得 A=QR.
如果限定 R 的对角元为正数 , 则这种分解是
唯一的 .

643
Schmidt 正交化方法
矩阵的 QR 分解有许多方法 .
方法一 Schmidt 正交化方法 ( 参见矩阵论教
材 ).
对线性无关的向量组 a1,a2,···,an, 通过下面的
Schmidt 正交化方法可以得到正交的向量组
b1,b2,···,bn, 且这两组向量可以相互线性表示 .

644
Schmidt 正交化方法

645
Schmidt 正交化方法

则有

因此 其中 C 为正交阵

646
方法二 平面旋转变换
引理 1 对于向量 x=(1,···,i,···,j,···,n)T, 可以
选择一个平面旋转矩阵 P(i,j) 使得
Px=y=(1,···,i’,···,j’,···,n)T,
其中 i’=(i2+j2)1/2,j’=0.
根据引理 1, 我们可以用一个平面旋转矩阵使
得一个向量的指定位置变为 0.

647
平面旋转变换
在 Rn 空间中 , 我们针对其中的两个分量实施
旋转变换 y=Px. 其中

648
平面旋转变换
具体的坐标变换格式为

变换矩阵 P 具有如下性质
1. P 为正交阵
2. P 与单位阵只在 (i,i), (i,i), (i,i), (i,i)4 个位置
上的元素不一样
3. 对于向量 x,Px 只改变 x 的第 i 个及第 j 个分
量.

649
平面旋转变换
对于矩阵 A, 我们选择平面旋转矩阵 P1, 使得
a21 变为 0, 再选择平面旋转矩阵 P2, 使得 a31 变
为 0,···, 选择平面旋转矩阵 Pn-1, 使得 an1 变为
0.
于是 A 的第一列成为 e1 的形式 .
类似的再变化第二列 ,···, 第 n-1 列 .
最终得到定理 19.

650
平面旋转变换
定理 19 如果 A 为非奇异矩阵 , 则存在正交矩
阵 P1,P2,···,Pn-1( 即一系列平面旋转矩阵 ) 使

且 rii>0(i=1,2,···,n-1).

651
矩阵的 QR 分解
定理 20 如果 A∈Rn×n 为非奇异矩阵 , 则 A 可分
解为一正交阵与上三角矩阵 R 的乘积 , 即
A=QR, 且当对角元素都为正数时分解唯一 .
证明 : 根据定理 19, 存在正交阵 P1,P2,···,Pn-1,
使得 Pn-1 ···P2P1A=R 为上三角阵 .
令 Q=(Pn-1 ···P2P1 )T, 则 QTA=R, 即 A=QR.
唯一性 : 若 A=Q1R1=Q2R2, 其中 Q1,Q2 为正交
阵 , R1,R2 为非奇异上三角阵 .

652
矩阵的 QR 分解
A=Q1R1=Q2R2,
于是 ,Q2TQ1=R2R1-1.
从而上三角阵 R2R1-1 是正交阵 .
因此该矩阵为对角矩阵 ( 根据正交矩阵的定义以
及矩阵相乘的定义 ).
即 R2R1-1 =D=diag[d1,d2,···,dn].
由于该矩阵为正交阵 , 所以 D2=I.
又 R1,R2 的对角元为正数 ,di>0, 所以 di=1,D=I.
因此 R1=R2, 进一步有 Q1=Q2.

653
Householder 变换
对于一般的矩阵 A, 直接采用 Householder 变
换 ( 初等反射阵相乘 ) 的方法可以将矩阵的第
一列化成为 e1 的形式 .
即 H[a1,a2,···,an]=[-sgn(a11)e1,b2,···,bn],
其中为 a1 的长度 .( 计算时添上 -sgn(a11) 是
为了保证舍入误差尽量小 )
通过一系列的 Householder 变换可以将矩阵
进行 QR 分解 .
654
Householder 方法算例
用 Householder 方法对
矩阵 A 进行 QR 分解 .

解:
选取 H1, 使得

655
Householder 方法算例

下面求二阶初等反射阵约化 A2 右下角的二阶
矩阵 .
选取 H2, 使得

656
Householder 方法算例

因此

657
Householder 方法算例
根据上面的过程得到 HA=R, 其中

因此 A=H-1R=HTR=QR. 其中

658
求特征值的 QR 算法
给定矩阵 A, 对 A1=A 进行 QR 分解 , 得
A1=Q1R1,
令 A2=R1Q1, 再对 A2 进行 QR 分解得 A2=Q2R2,
···
对 Ak 进行 QR 分解得 Ak=QkRk, 令 Ak+1=RkQk.
在一定条件下 ( 定理 22),k→∞ 时 ,Ak 的下三角
部分趋于 0, 对角线元素趋于 A 的特征值 .

659
算例
用 QR 算法求矩阵
的全部特征值 .

解 : 采用 matlab 软件进行计算 , 终止准则


程序见下页 .( 注 :Matlab 中 QR 分解不保


证 R 的对角元为正 )

660
a=[2,1,0;1,3,1;0,1,4];
n=3; l=1; eps=1e-5; kmax=100; k=0;tic;
while l==1&k<kmax
k=k+1; [q,r]=qr(a); a=r*q;
if abs(a(n,n-1))<eps*min(abs(a(n,n)),abs(a(n-1,n-1)))
l=0;
end
end
toc;

661
运行结果
程序运行 15 步终止 . 得

得 A 的三个特征值的近似值为
4.7320359,3.0000149,1.2679492
精确值为
4.7320508,3.0000000,1.2679492

662

You might also like