ch3 线性方程组求解的数值方法

41
Ch3 线线线线线线线线线线线线 Numerical Solutions of Systems of Linear Equations

Upload: tait

Post on 14-Jan-2016

104 views

Category:

Documents


0 download

DESCRIPTION

Ch3 线性方程组求解的数值方法. Numerical Solutions of Systems of Linear Equations. § 3.0 Introduction. 工程问题 (电子网络,船体放样等). 自然科学 (实验数据的最小二乘法曲线拟合). 线性方程组. 解非线性方程组. 解常 / 偏微分方程组 (差分法,有限元法). 3.0 Introduction. 线性方程组的 系数矩阵 :. ( 1 )低价稠密矩阵(阶数

TRANSCRIPT

Page 1: Ch3  线性方程组求解的数值方法

Ch3 线性方程组求解的数值方法

Numerical Solutions of Systems of Linear Equations

Page 2: Ch3  线性方程组求解的数值方法

§3.0 Introduction

线性方程组

工程问题(电子网络,船体放样等) 自然科学(实验数据的最小二乘法曲线拟合)

解非线性方程组 解常 / 偏微分方程组(差分法,有限元法)

Page 3: Ch3  线性方程组求解的数值方法

3.0 Introduction

线性方程组的系数矩阵:

( 1 )低价稠密矩阵(阶数 <150 );

( 2 )大型稀疏矩阵(阶数高且零元素较多)。

求解线性方程组的方法: ( 1 )直接法 : 经过有限步算术运算,求得精确解(假设计算过程没有舍入误差)。 如 Gauss 消去法,三角分解法。 ( 2 )间接法 ( 迭代法 ) : 通过迭代序列,逐步逼近方程组的解。如 Jacobi 迭代法, Gauss-Seidel 迭代法。

Page 4: Ch3  线性方程组求解的数值方法

3.0 Introduction

【最简单的情形】三角形线性方程组:

简记为

.

,

,

22222

11212111

nnnn

nn

nn

bxa

bxaxa

bxaxaxa

bAx , A 为上三角矩阵。

若所有 aii0 ,可用“回代”过程得到方程组的解。

.1,2,,2,1, , 1

nnka

xrbx

a

bx

kk

n

kiiki

knn

nn

Page 5: Ch3  线性方程组求解的数值方法

function X=backsub(U,b)

% 解上三角方程组 -- 回代过程 %Backsubstitution in Gauss elimination

% Input--U is a n x n upper-trianglular matrix

% --b is a n x 1 constant vctor

% Output--X is the solution vector of UX=b

% Usage: X=backsub(U,b)

%Find the dimension of b and initialize X

n=length(b);

X=zeros(n,1);

X(n)=b(n)/U(n,n);

for p=n-1:-1:1

X(p)=(b(p)-U(p,p+1:n)*X(p+1:n))/U(p,p);

end

Backsub.m

3.0 Introduction

Page 6: Ch3  线性方程组求解的数值方法

3.0 Introduction

【作业】( 1 )编写 Matlab 程序解下列上三角形方程组:

.63

456

7472

20324

4

43

432

4321

x

xx

xxx

xxxx

( 2 )编写 Matlab 程序解下列下三角形方程组:

. 563

2 643

43

105

4321

321

21

1

xxxx

xxx

xx

x

Page 7: Ch3  线性方程组求解的数值方法

§3.1 Gauss 消去法与 LU 分解法

直接法的基本思想:

将线性方程组化成与之等价的上三角形或下三角形,再用回代法求解。它的核心是矩阵分解。

核心:矩阵分解。

Page 8: Ch3  线性方程组求解的数值方法

Gauss 消去法( Gaussian elimination ):(对方程组的三种变换)

( 1 )交换两个方程的次序;

( 2 )用一个非零常数乘一个方程;

( 3 )将一个方程的非零倍数加到另一个方程上去。

这等价与对增广矩阵进行三种行初等变换,将它化为行阶梯形。

Page 9: Ch3  线性方程组求解的数值方法

【例 3.1 】解下列线性方程组:

解:用行初等变换将方程组的增广矩阵化为行阶梯形:

.655

4623

7710

321

321

21

xxx

xxx

xx

1212 )10/5( ,)10/3(

6515

4623

70710

],[ rrrrbA

2.62.600

5.255.20

70710

1.661.00

5.255.20

70710

5.255.20

1.661.00

707102332 )5.2/1.0( rrrr

解得 x=(0, -1, 1)’.

§3.1 Gaussian Elimination and LU Decomposition

Page 10: Ch3  线性方程组求解的数值方法

【注】上述过程可用矩阵表示为:

LU=PA

,

104.03.0

015.0

001

L

其中

,

2.600

55.20

0710

U

.

010

100

001

P

§3.1 Gaussian Elimination and LU Decomposition

Page 11: Ch3  线性方程组求解的数值方法

【高斯消元法思路】

(1) 用消元法将 A 化为上三角阵 upper-triangular matrix ;

(2) 回代求解 backward substitution 。

§3.1 Gaussian Elimination and LU Decomposition

Page 12: Ch3  线性方程组求解的数值方法

§3.1 Gaussian Elimination and LU Decomposition

消元 记 ,)( )1()1(nnijaAA

)1(

)1(1

)1(...

nb

b

bb

Step 1 :设 ,计算因子0)1(11 a )...,,2(/ )1(

11)1(

11 niaam ii 将增广矩阵 /* augmented matrix */ 第 i 行 mi1 第1行,得到 )1(

1)1(

1)1(

12)1(

11 ... baaa n

)2(A )2(b

)...,,2,(

)1(11

)1()2(

)1(11

)1()2(

nji

bmbb

amaa

iii

jiijij

其中

Step k :设 ,计算因子

且计算

0)( kkka )...,,1(/ )()( nkiaam k

kkk

ikik

)...,,1,(

)()()1(

)()()1(

nkji

bmbb

amaak

kikk

ik

i

kkjik

kij

kij

共进行 ? 步n 1

)(

)2(2

)1(1

2

1

)(

)2(2

)2(22

)1(1

)1(12

)1(11

..

....

..

....

...

...

nnn

nnn

n

n

b

b

b

x

x

x

a

aa

aaa

Page 13: Ch3  线性方程组求解的数值方法

回代 )()( / nnn

nnn abx

0)( nnnaWhat if ?No unique

solution exists.

)1...,,1()(

1

)()(

nia

xab

xi

ii

n

ijj

iij

ii

i

0)( iiiaWhat if ?

Then we must find the smallest integer k i with , and interchange the k-th row with the i-th row.

0)( ikia

What if we can’t find such k ?No unique

solution exists.

定理 若 A 的所有顺序主子式 /* determinant of

leading principal submatrices */ 均不为 0 ,则高斯消元无需换行即可进行到底,得到唯一解。

iii

i

i

aa

aa

A

...

.........

...

)det(

1

111

注注::事实上,只要 A 非奇异,即 A1 存在,则可通过逐次消元及行交换,将方程组化为三角形方程组,求出唯一解。

注注::事实上,只要 A 非奇异,即 A1 存在,则可通过逐次消元及行交换,将方程组化为三角形方程组,求出唯一解。

§3.1 Gaussian Elimination and LU Decomposition

Page 14: Ch3  线性方程组求解的数值方法

高斯消元法的矩阵表达 ---- 矩阵分解

课本 P40-42

§3.1 Gaussian Elimination and LU Decomposition

Page 15: Ch3  线性方程组求解的数值方法

3.1.2 矩阵的 LU 分解( LU Decomposition )

若在 Gauss 消去法过程中,没有进行交换行的变换,即 P=I, 则分解结果为

LUA

§3.1 Gaussian Elimination and LU Decomposition

这样的分解式称为矩阵的 LU 分解。

【 Matlab 】 >> [L,U,P]=lu(A)

其中

njia

al

lll

ll

l

Ljjj

jij

ij

nnn

,,1,,

1

1

1

1

321

3231

21

【作业】 P.67 题 1, 2

Page 16: Ch3  线性方程组求解的数值方法

3.1.3 选主元消去法 /* Pivoting Strategies */

例:单精度解方程组

2

110

21

219

xx

xx

/* 精确解为 和 */

...1000...00.1101

191

x

8 个

...8999...99.02 12

xx

8 个

用 Gaussian Elimination 计算:9

112121 10/ aam

9992122 10101010...0.011 ma

8 个

9212 1012 mb

99

9

10100

1110

0,1 12 xx

小主元 /* Small pivot element */ 可能导致计

算失败。

§3.1 Gaussian Elimination and LU Decomposition

Page 17: Ch3  线性方程组求解的数值方法

全主元消去法 /* Complete Pivoting */

每一步选绝对值最大的元素为主元素,保证 。

1|| ikm

Step k: ① 选取

;0||max||,

ij

njikji aakk

② If ik k then 交换第 k 行与第 ik 行 ; If jk k then 交换第 k 列与第 jk 列 ;③ 消元

注注::列交换改变了 xi 的顺序,须记录交换次序,解完后再换回来。

注注::列交换改变了 xi 的顺序,须记录交换次序,解完后再换回来。

列主元消去法 /* Partial Pivoting, or maximal column pivoting */

省去换列的步骤,每次仅选一列中最大的元。0||max|| ,

iknik

ki aak

§3.1 Gaussian Elimination and LU Decomposition

Page 18: Ch3  线性方程组求解的数值方法

例:

211

1110 9

1,1 12 xx

110

211

1110

2119

注注::列主元法没有全主元法稳定。注注::列主元法没有全主元法稳定。

0,1 12 xx例:

211

10101 99

99

99

10100

10101

注意:这两个方程组在数学上严格等价。

标度化列主元消去法 /* Scaled Partial Pivoting */

对每一行计算      。为省时间, si 只在初始

时计算一次。以后每一步考虑子列 中  最大的

aik 为主元。

||max1

ijnj

i as

nk

kk

a

a

..

.i

ik

s

a

注注::稳定性介于列主元法和全主元法之间。注注::稳定性介于列主元法和全主元法之间。

§3.1 Gaussian Elimination and LU Decomposition

Page 19: Ch3  线性方程组求解的数值方法

实际应用中直接调用 Gauss Elimination 解 3阶线性方程组的结果:

结合全主元消去后的结果:

§3.1 Gaussian Elimination and LU Decomposition

Page 20: Ch3  线性方程组求解的数值方法

§3.2 Cholesky 分解

【 Matlab 】

设 A 是对称正定矩阵,则 A 有以下形式的 LU 分解:

A=PTP ( 3.2.1 )

其中 P 是一个上三角矩阵 , 上式称为 A 的 Cholesky 分解(Choleskian decomposition).

>> P=chol(A)

定理

【作业】 P.68 题 4

Page 21: Ch3  线性方程组求解的数值方法

§3.3 向量范数与矩阵范数 — 误差的度量

3.3.1 向量范数 (vector norms)

常用向量范数:

,||1

1

n

i

xx ,||2/1

1

2

2

n

i

xx .||max1

ini

xx

这些范数满足:

;0 ifonly and if 1 and ,0 )1( xxx

;constantany is , )2( xx

. )3( yxyx

||||||||lim xx p

p

一般范数:

Page 22: Ch3  线性方程组求解的数值方法

如,设向量 x=(2, -4, -1)T, 则

,21||2/1

1

2

2

n

i

xx,7||1

1

n

i

xx

.4||max1

ini

xx

§3.3 向量范数与矩阵范数

【 Matlab 】x=(1:4)/5N1=norm(x,1)N2=norm(x)N7=norm(x,7)Ninf=norm(x,inf)

x =

0.2000 0.4000 0.6000 0.8000

N1 =

2

N2 =

1.0954

N7 =

0.8153

Ninf =

0.8000

Page 23: Ch3  线性方程组求解的数值方法

定义 矩阵 A的范数定义为

§3.3 向量范数与矩阵范数

3.3.2 矩阵范数 (matrix norms)

.max0 x

AxA

x

命题:矩阵的常用范数:

;||max )1(1

11

n

iij

njaA

;||max )2(1

1

n

jij

niaA

,)(max )3(12

AAA Ti

ni

其中,λ1,…, λ n 是 AAT

的特征值, ini

T AA

1max:)( 称为 的谱半径。AAT

Page 24: Ch3  线性方程组求解的数值方法

例 设矩阵

§3.3 向量范数与矩阵范数

,43

21

A

;6||max )1(1

11

n

iij

njaA

;7||max )2(1

1

n

jij

niaA

.46.522115)(max )3(12

AAA Ti

ni

可以证明,矩阵范数满足:

;0 ifonly and if 0 ;0 (1) AAA

;|c| (2) AcA

; (3) BABA

(4) .AB A B

Page 25: Ch3  线性方程组求解的数值方法

§3.4 经典迭代法- Jacobi 迭代法与 Gauss-Seidel 迭代法

3.4.1 . Jacobi 迭代法设有 n 阶方程组

nnnnnn

nn

nn

bxaxaxa

bxaxaxa

bxaxaxa

2211

22222121

11212111

(3.4.1)

Page 26: Ch3  线性方程组求解的数值方法

若系数矩阵非奇异,且 (i = 1, 2,…, n) ,将方程组0iia

11,22111

2323121222

2

1313212111

1

1

1

1

nnnnnnnn

n

nn

nn

xaxaxaba

x

xaxaxaba

x

xaxaxaba

x

( 4.1 )改写成

§3.4 经典迭代法

Page 27: Ch3  线性方程组求解的数值方法

然后写成迭代格式

)(11,

)(22

)(11

)1(

)(2

)(323

)(1211

22

)1(2

)(1

)(313

)(2121

11

)1(1

1

1

1

knnn

kn

knn

nn

kn

knn

kkk

knn

kkk

xaxaxaba

x

xaxaxaba

x

xaxaxaba

x

( 3.4.2 )

( 3.4.2 )式也可以简单地写为

),,2,1(1 )(

1

)1( nixaba

x kj

n

ijj

ijiii

ki

( 3.4.3 )

§3.4 经典迭代法

Page 28: Ch3  线性方程组求解的数值方法

写成矩阵形式:

A =

L

UD

B f

Jacobi 迭代阵

bDxULDx kk 1)(1)1( )( (3.4.6)

bxULxDbxULDbxA

)(

)(

bDxULDx 11 )(

§3.4 经典迭代法

Page 29: Ch3  线性方程组求解的数值方法

)(11

)(1

)(414

)(313

)(212

11

)1(1 bxaxaxaxa

ax k

nnkkkk

)(12

)(2

)(424

)(323

)1(121

22

)1(2 bxaxaxaxa

ax k

nnkkkk

)(13

)(3

)(434

)1(232

)1(131

33

)1(3 bxaxaxaxa

ax k

nnkkkk

)(1 )1(11

)1(33

)1(22

)1(11

)1(n

knnn

kn

kn

kn

nn

kn bxaxaxaxa

ax

… … … …

只存一组向量即可。

写成矩阵形式: bDxUxLDx kkk 1)()1(1)1( )(

bxUxLD kk )()1()(

bLDxULDx kk 1)(1)1( )()(

B fGauss-Seidel

迭代阵

3.4.2 Gauss-Seidel 迭代法

(3.4.7)

§3.4 经典迭代法

Page 30: Ch3  线性方程组求解的数值方法

定理 3.1 对任意初始向量 X(0) 及常向量 F ,迭代格式 (3.5.1)

FBXX kk )1( (3.5.1)

推论:若迭代矩阵B的某种范数 ,则( 3.5.1 )1B

收敛的充分必要条件是迭代矩阵 B的谱半径 (B) < 1 。

确定的迭代法对任意初值 X(0) 均收敛于方程组 X = BX + F

§3.5 迭代法的分析—— 迭代法的收敛性、收敛速度与数值稳定性

3.5.1 收敛性

的唯一解 x* 。

Page 31: Ch3  线性方程组求解的数值方法

定义 1 :如果矩阵的每一行中,不在主对角线上的所有元素绝对值之和小于主对角线上元素的绝对值,即 niaa ii

n

ijj

ij ,,2,1,1

则称矩阵 A ( 按行 ) 严格对角占优。

定理 3.2 :若 A 是严格对角占优,则 A 是非奇异的。

§3.5 迭代法的分析

定理 3 :若线性方程组 AX = b 的系数矩阵 A 按行严格对角占优,则 Jacobi 迭代法和 Gauss-Seidel 迭代法对任意给定初值均收敛。

Page 32: Ch3  线性方程组求解的数值方法

3.5.2 迭代法的误差估计与收敛速度

定理 3.4 设 X* 是方程组 AX = b 的同解方程 X = BX +

F 的准确解,若迭代公式中迭代矩阵 B 的某种范数,

( ) * ( ) ( 1) .1

k k kBX X X X

B

( ) * (1) (0) ,1

K

k BX X X X

B

(1)

(2)

1B

则有

§3.5 迭代法的分析

Page 33: Ch3  线性方程组求解的数值方法

)(

1

)1(1

1

)1( 1~ kj

n

ijij

kj

i

jiji

ii

ki xaxab

ax

),,2,1(~)1( 1)()1( nixxx ki

ki

ki

)(

1

)1(1

1

)()1( )1( kj

n

ijij

kj

i

jiji

ii

ki

ki xaxab

axx

迭代

加速

( 3.6.2 )

§3.6 超松驰法 (SOR) 及分块迭代法

定理 3. 5 SOR 方法收敛的必要条件是

.20

其中 ω 称为松弛因子.

( 3.6.1 )

Page 34: Ch3  线性方程组求解的数值方法

§3.7 条件数、病态方程组与算法的稳定性3.7.1 病态方程组与数值稳定的算法

定义 对线性方程组 Ax=b, 如果解 x 关于问题(矩阵 A和 b )的“微小”变化(即舍入误差)不敏感,则称此方程组是“好的”,或称为“良态的”,否则,称之为“坏的”,或称为“病态的”。

定义 对求解线性方程组 Ax=b 的一个 ( 迭代 ) 算法 ,如果关于初始值的误差,不随计算逐步放大,则称算法是数值稳定的,否则,称之为是数值不稳定的。

数值不稳定的算法是不可用的!

Page 35: Ch3  线性方程组求解的数值方法

例 (病态方程组)考虑线性方程组§3.7 条件数、病态方程组与算法的稳定性

10 7 8 7 32

7 5 6 5 23, , .

8 6 10 9 33

7 5 9 10 31

Au b A b

已知其精确解是 u =(1,1,1,1)T.(1) 对右边常数向量 b作“微小”扰动,得方程(2) 对系数矩阵 A作“微小”扰动,得方程组

.

9.30

1.33

9.22

1.32

Av它的解是 v = (9.2, -12.6, 4.5, -1.1)T.

.

98.9999.499.6

989.996.58

5604.508.7

2.71.8710

bwwA

它的解是 w = (-81, 137, -34, 22)T.

注意:上述两种情况的解都是精确解!

Page 36: Ch3  线性方程组求解的数值方法

一般地,对线性方程组 Au=b ( 1)

.bbAv

两方程相减得于是

(2)

, ,1 uAAubbAu

由此得到

.)( bbuuA

设其解为 v=u+u, 即设

.1 bAu

.

1

b

bAA

u

u

(1) 考虑对此线性方程组的第一类扰动方程组

( 2)式右端给出了解的相对误差界。

§3.7 条件数、病态方程组与算法的稳定性

Page 37: Ch3  线性方程组求解的数值方法

.bvAA

两方程相减得

于是

(3)

,1 uuAAu

由此得到

.)( bbuuAA

设其解为 v=u+u, 即设

.1 uuAAu

.

1

A

AAA

uu

u

(2) 考虑对线性方程组( 1)的第二类扰动方程组

( 4)式右端给出了解的相对误差界。

进一步得到 .)(1

1 AO

A

AAA

u

u

(4)

§3.7 条件数、病态方程组与算法的稳定性

Page 38: Ch3  线性方程组求解的数值方法

3.7.2 条件数与方程组病态性

定义 设 A 是一个非奇异矩阵, ||.|| 是与某种向量范数相容的矩阵范数,正数

cond(A):=||A-1|| ||A||称为矩阵 A 的 条件数( conditional number )。 Remark: 由上面分析可知,系数矩阵的条件数很大 (>>1)(此时矩阵也称为“病态矩阵”)的线性方程组 Ax=b 是病态的;反之,系数矩阵的条件数很小的线性方程组 Ax=b 是良态的。

>> A=hilb(n);>> c=cond(A)

Example: 著名的 Hilbert 矩阵是病态的。【 Matlab 】

§3.7 条件数、病态方程组与算法的稳定性

Page 39: Ch3  线性方程组求解的数值方法

定理 3.6 ( 条件数的性质 ) 设 A 是一个非奇异矩阵 .(1) cond(A)≥1, cond(A)=cond(A-1), con(aA)=cond(A), a ≠ 0.(2) 如果 Q 是正交矩阵,则 cond2(Q)=1, cond2(A)= cond2(QA)= cond2(AQ),其中 cond2(A)=||A-1||2 ||A||2.

§3.7 条件数、病态方程组与算法的稳定性

Page 40: Ch3  线性方程组求解的数值方法

§3.8 稀疏矩阵的计算

.

41

1

41

14

1

2

1

1

2

1

nn b

b

b

M

M

M

例 (比较稀疏矩阵算法与普通矩阵算法:机器时间与占用空间)考虑线性方程组

Page 41: Ch3  线性方程组求解的数值方法

% sparse and full matrix

n=100;

row=2:n; col=1:n-1;

val=ones(1,n-1);

offd=sparse(row, col,val,n,n);

a=sparse(1:n,1:n.4*ones(1,n),n,n);

b=full(a);

rh=[1:n];

tic; x=a/rh; t1=toc

tic; y=b/rh; t2=toc

【实验要求】逐步增大 n 的值,观察发生的现象。

§3.8 稀疏矩阵的计算