及其基于MATLAB的程序实现与分析 三、 解线性方程组(线性矩阵方程)
解线性方程组是科学计算中最常见的问题。所说的“最常见”有两方面的含义:
1) 问题的本身是求解线性方程组;
2) 许多问题的求解需要或归结为线性方程组的求解。 关于线性方程组
AxBxA1B
其求解方法有两类:
(1)
1) 直接法:高斯消去法(Gaussian Elimination); 2) 间接法:各种迭代法(Iteration)。
1、高斯消去法
1) 引例
考虑如下(梯形)线性方程组:
x12x2x32121x12x12x2x323.5034x1x114x1 3x4x12332232x312x30.500x31高斯消去法的求解思路:把一般的线性方程组(1)化成(上或下)梯形的形式。 2)高斯消去法——示例
考虑如下线性方程组:
x1x2x312x12.001x22.01x35x19x22x33060111x11122.0012.01x5
2921x3306011) 第一个方程的两端乘
2加到第二个方程的两端,第一个方程的两端乘 1-1加到第三个方程的两端,得
11x11100.0010.01x3
21010x3306002) 第二个方程的两端乘10加到第三个方程的两端,得 0.00111x11100.0010.01x3
201010x3606003) 从上述方程组的第三个方程依此求解,得
x1x2x312401x2100030.01x33000 x60033)高斯消去法的不足及其改进——高斯(全、列)主元素消去法
在上例中,由于建模、计算等原因,系数2.001而产生0.0005的误差,实际求解的方程组为
1122.000591x11x12565.22.01x5x23014.9 2x450.702x33060131注:数值稳定的算法
高斯列主元素消去法就是在消元的每一步选取(列)主元素—一列中绝对值最大的元取做主元素,高斯列主元素消去法是数值稳定的方法。
列主元素消去法的基本思想:在每轮消元之前,选列主元素(绝对值最大的元素),使乘数lik1.
列主元素消去法的步骤:设已经完成第1步到第k1步的按列选主元、交换两行、消元计算,得到矩阵
A(k),b(k)(1)a11(1)))a12a1(1a1(1kn(2)(2)(2)a2a2a22kn(k)(k)akkakn(k)(k)ankannb1(1)(2)b2.bk(k)(k)bn
第k步计算如下:对于k1,2,,n1,
(k)aik(1) 选列主元素,即确定i0使ai(kk)max; kin0(2) 如果ai(kk)0,则方程组解不唯一,或者A接近奇异矩
0阵,停止运算;
(3) 如果i0k,则交换[A,b]第i0行与第k行元素; (4) 消元计算:
(k1)(k)(k)(k)(k)aijaijlikakj,likaik/akk, (k1)(k)(k)bilikbk,i,jk1,k2,,n.bi(5) 回代计算:
xnbn/ann,n x(bax)/a,in1,n2,,2,1.iijjiiiji1完全主元素消去法即是每次选主元时,依次按行、列选取绝对值最大的元素作为主元素,然后交换两行、两列,再进行消元计算.
完全主元素消去法的步骤:设已经完成第1步到第k1步的选主元、交换行和列、消元计算,得到矩阵
(1)a11(1)))a12a1(1a1(1b1(1)kn(2)(2)(2)(2)a2a2a22b2kn. (k)(k)akkaknbk(k)(k)(k)(k)ankannbnA(k),b(k)第k步计算选主元素的范围为ki,jn,即确定i0,j0使
(k). ai(0k,)j0maxaijki,jn第k步计算如下:对于k1,2,,n1,
(k)(1) 选主元素,即确定i0,j0使ai(k,)jmaxaij;
00ki,jn(2) 如果ai(k,)j0,则方程组解不唯一,或者A接近奇异矩
00阵,停止运算;
(3) 如果i0k,则交换[A(k),b(k)]第i0行与第k行元素;如果
j0k,则交换[A(k),b(k)]第j0列与第k列元素;
(4) 消元计算:
(k1)(k)(k)(k)(k)aijaijlikakj,likaik/akk, (k1)(k)(k)bilikbk,i,jk1,k2,,n;bi(5) 回代求解.
【注】 完全主元消去法是解低阶稠密矩阵方程组的有效方法,但完全主元消去法解方程组,在选主元素时要化费较多的计算机时间,行主元消去法与列主元消去法运算量大体相同,实际计算时,用列主元消去法即可满足一定的精度要求.
对同一数值问题,用不同的计算方法,所得结果的精度大不一样.对于一个算法来说,如果计算过程中舍入误差能得到控制,对计算结果影响较小,则称此算法是数值稳定的;否则,如果计算过程中舍入误差增长迅速,计算结果受舍入误差影响较大,则称此算法为数值不稳定的.因此,我们解数值问题时,应选择和使用数值稳定的算法,否则如果使用数值不稳定的算法,就可能导致计算失败. 例 用高斯列主元消去法解方程组
x12x23x31,2x14x25x30, 3x5x6x0.2311231356015/320r1r3解 [A,b]2450245002/310
3560123101/311101/201001013/200103. 001/210012所以,方程组的解为x(1,3,2).
T
4)高斯列主元素消去法的MATLAB实现:xA\\b,意为
xA1b.
例 LinearEquiation02.m
open LinearEquiation02 LinearEquiation02
一个典型的例子: Hilbert矩阵:Hij1
1注: 非奇异矩阵的条件数:
5)LU分解 (LU Factorization)(高斯消去法、Doolittle分解)
高斯消去法的消元过程,从代数运算的角度看就是用一个下三角矩阵L左
乘方程组的系数矩阵A,且乘积的结果为上三角矩阵U,即
L1AULybAxLUxb, (2) UxyALU可通过直接用A元素计算矩阵A的三角分解矩阵L和U.这种直接计算A的三角分解的方法有实用上的好处.下面利用矩阵乘法规则来确定三角矩阵L和U.
1u11u12u1nl211u22u2nAl31l321unnll1n1n2. 第一步:利用A的第一行、第一列元素确定U的第一行、L的第一列元素.由矩阵乘法,
a1j(1,0,0,,0)(u1j,u2j,uij,0,,0)Tu1jai1(li1,li2,lii1,1,,0)(u11,0,,0)Tli1u11(j1,2,,n), (i2,3,,n),
得到
u1ja1j(j1,2,,n),li1ai1/u11(i2,3,,n). (3.7)
设已经计算出U的第1至r -1行元素,L的第1至r -1列元素,现在要计算U的第r行元素及L的第r列元素.
第r步:利用A的第r行、第r列剩下的元素确定U的第r行、L的第r列元素(r2,3,,n).由矩阵乘法,有
arj(lr1,lr2,,lrr1,1,0,,0)(u1j,u2j,,ujj,0,,0)T
lrkukjurjk1r1(jr,r1,,n),
得U的第r行元素为
urjarjlrkukjk1r1(jr,r1,,n,r2,3,,n). (3.8)
由air(li1,li2,,lii1,1,0,,0)(u1r,u2r,,urr,0,,0)T
likukrlirurrk1r1(ir1,r2,,n),
得
lir(airlikukr)/urrk1r1(r2,3,,n1,ir1,,n). (3.9)
例5 用LU分解法求解方程组
223x23477x1. 2245x37解 对系数矩阵A进行LU分解,
u112,u122,u133,l212,l311.
由u2ja2jl21u1j,有u223,u231.
l32(a32l31u12)/u222,u33(a33l31u13l32u23)6.
因此
1ALU2112122331. 6解方程组Lyb,得y13,y212y15,y37y12y26. 解方程组Uxy,得x31,x2(5x3)/32,x1(32x23x3)/22. 6) LU 分解的MATLAB实现:[L,U]lu(A)或[L,U,P]lu(A) 例
A=rand(5); [L,U,P]=lu(A)
A=rand(5); [L,U,P]=lu(A) L=P\\L
当A是主对角占优的三对角矩阵时,基于Doolittle分解可得到解这类方程组的追赶法。
2、Cholesky分解 (Cholesky Factorization)
对称正定矩阵A的Cholesky分解和以A为系数矩阵地的线性方程组的改进的平方根法:
设n阶方程组Axb,A是对称正定矩阵(Positive Definite Matrix),则A有三角分解
1lu11u12u1n121u22u2nALUl31l321unnll1n1n2. 再将U分解为
u11u12u1nu22u2nUunnu11u22u1nu121uu1111u12nDU0, u22unn1则ALDU0.
(1) 对称正定矩阵有唯一的分解ALDLT
TDLT,且对称阵ATA,则有 这是由于ALDU0,ATU0TLDU0U0DLT
再利用三角分解的唯一性,得U0TL.因此,对称正定矩阵有唯一的分解ALDLT.
(2) D是正定对角阵(即uii0,i1,2,,n)
由于A对称正定的充要条件是BABT对称正定,其中B是n阶可逆方阵.取BLT,就推知D是正定对角阵.
因此D的对角元素uii0(i1,2,,n),记DDD,其中
u111D2u22, unn1212则ALDDL(LD)(LD).
T12121212T(3) 乔莱斯基(Cholesky)分解
将LD记为L,则ALLT称为Cholesky分解.利用Cholesky直接分解公式,推导出的解方程组方法,称为Cholesky方法或平方根法.
(4) 解方程组的平方根法(Cholesky方法) 由Cholesky分解,有
l11l11l21ln1llll212222n2LLT. (3.10) Allllnnnnn1n212利用矩阵乘法,逐步确定L的第i行元素lij(j1,2,,i).
由aijlikljklijljj(当jk时,ljk0),有分解公式:对于
k1j1i1,2,,n
lij(aijlikljk)/ljj(j1,2,,i1),lii(aiilik)1/2 (3.11)
2k1k1j1i1将对称正定矩阵A作Cholesky分解后,则解方程组Axb就转化为解两个三角方程组Lyb,Lxy.
T例7 用Cholesky方法解方程组
114414.252.75x6. 12.753.57.25解 对系数矩阵作Cholesky分解得到
114220.50.514.252.75LLT0.52. 21.5112.753.50.51.51解Lyb,得y(2,3.5,1)T. 解LTxy,得x(1,1,1)T.
cholesky分解的MATLAB的实现:L=chol(A)。 3、追赶法
在许多实际问题中,如,常微分方程两点边值问题、三次样条插值方法等,往往遇到线性方程组Axf的求解,其中
b1c1abc222,f(f1,,fn)T. (3.13) Aabcn1n1n1anbn称具有公式(3.13)形式的系数矩阵A为三对角阵,称相应的线性方程组为三对角方程组(Tridiagonal Linear Systems).具有这种形式的方程组在实际问题中是经常遇到的,而且往往是对角占优(Diagonally Dominant)的.A满足条件:
b1c10,
biaici0,aici0(i2,3,,n1),
bnan0.
这类方程组Axf的解存在唯一(A非奇异),可以直接利用高斯消去法或直接分解法,而其解答可以用极其简单的递推公式表示出来,即下面介绍的追赶法.追赶法通常是数值稳定的.
对A作LU分解(Doolitle分解),可以发现L、U具有非常简单的形式.
1m2ALU1m31mn1l1u1lu22. un1ln由矩阵乘积,得
l1ml21cn1bnu1m2u1l2u2mnln1un1mnun1ln. b1c1ab22c2Aan1bn1an比较等式两端,得到
i1,2,,n1,uici,lb11 (3.14) ma/l,i2,3,,n,ii1ilibimiui1, i2,3,n.因为上述分解ALU,则方程组Axf的求解转化为解两个简单的三角方程组Lyf和Uxy,从而得到求解方程组的算法公式.
先解Lyf,即
y1f1,yifimiyi1(i2,3,,n). (3.15)
再解Uxy,即
xnyn/ln,xi(yiuixi1)/li(in1,n2,,1). (3.16)
这种把三对角方程组的解用递推公式(3.14)、(3.15)、(3.16)表示出来的方法形象化地叫做追赶法,其中(3.14)、(3.15)是关于下标i由小到大的递推公式称为追的过程,而(16)却是下标i由大到小的递推公式称为赶的过程,一追一赶构成了求解
Axf的追赶法.
例9 用追赶法解三对角方程组
411141x3. 142解 系数矩阵分解得到
1L10.250.266741,U3.75. 113.7333解Lyf,得y(1,3.25,2.8667)T. 解Uxy,得x(0.5179,1.0714,0.7679)T. 调用函数LU_Factorization.m解例9.输入 A=[4 -1 0;-1 4 -1;0 -1
4];b=[1;3;2];[x,L,U,index]=LU_Factorization(A,b) 得到方程组的解及相应的LU分解矩阵:
x = 0.5179 L= 1.0000 0 0 U= 4.0000 -1.0000 0 1.0714 -0.2500 1.0000 0 0 3.7500 -1.0000 0.7679 0 -0.2667 1.0000 0 0 3.7333
为了对线性方程组的直接法作出误差分析,为了讨论方程组迭代法的收敛性,需要对向量和矩阵的大小进行度量,进而引入了
范数━
用于度量“量”的大小的概念
引言
实数的绝对值:a是数轴上的点a到原点0的距离;
复数的模:abia2b2是平面上的点a,b到原点0,0的距离; 还有其他刻画复数大小的方法(准则):如 1)ab; 2)maxa,b
向量的内积、范数及n维空间距离的度量
令P是一数域,Pn是P上的向量空间,如果函数
x,y:PnPnP有如下性质:
1、共轭对称性:x,yPn,y,xx,y;
2、非负性:xPn,x,x0,x,x0x0; 3、线性性:x,y,zPn,a,bP,
axby,zax,zby,z;
则称x,y是Pn上的一个向量内积(inner product),向量空间
Pn上的向量内积通常用符号x,y表示,定义了内积的向量空间Pn称为内积空间(inner product space)。记做Pn,·,·表示。 例1.1 QQTPnn,Q0,x,yPn,容易验证函数
x,yxTQy (1.1)
定义了Pn上的一个内积。
令P是一数域,Pn是P上的向量空间,如果函数x:PnP有如下性质:
1、非负性:xPn,x0,x0x0; 2、齐次性:xPn,aP,axax; 3、三角不等式:x,yPn,xyxy;
则称x是Pn上的一个向量范数(norm),向量空间Pn上的范数通常用符号x表示。定义了范数的向量空间Pn称为赋范空间(normed space)。记做Pn,·表示。
例1.2 QQTPnn,Q0,xPn,容易验证函数
xxTQx (1.2)
定义了Pn上的一个范数,这样定义的范数称为由内积(1.1)诱导的范数。
例1.3 RnCn上常用的向量范数:
xx1,x2,,xnRnCn,
T1、1—范数:x1xk;
k1n2、2—范数:x2xTx; 3、—范数:xmaxx1,x2,,xn;
1kn令P是一数域,Pn是P上的向量空间,如果实值函数
dx,y:PnPnR有如下性质:
1、对称性:x,yPn,dy,xdx,y;
2、非负性:x,yPn,dx,y0,dx,y0xy
3、三角不等式:x,y,zPn,dx,zdx,ydy,z; 则称dx,y是Pn上的一个距离(函数)(distance function)或度量(metric),定义了度量的向量空间Pn称为度量空间(metric space),记做Pn,d表示。
例1.4 RnCn上常用的(由范数诱导的)度量:x,yRnCn, 1、1—范数诱导的度量:dx,yxy1; 2、2—范数诱导的度量:dx,yxy2; 3、—范数诱导的度量:dx,yxy; 矩阵的范数
矩阵APnm是线性映射(当nm时为线性变换):PmPn的一种表现形式。因此,除了可以把矩阵看做向量而定义其范数外,更为基本、更为重要的是表征其线性映射的算子范数(operator norm),以APnn的情况为例:
Asupx0Axx (1.3)
其中(1.3)右端的范数·是赋范空间Pn,·中向量的范数,由矩阵算子范数的定义(1.3)容易证明(对映像大小的估计)不等式:
AxAx, xPn, (1.4)
称满足不等式(1.4)的矩阵范数是与对应的向量范数相容的。 例1.5 常用的矩阵范数: 1、1—范数(列范数):
na,j1,2,,n A1max; ij1jni12、2—范数(谱范数): A2maxATA; 3、—范数(行范数): Anmaxaij,i1,2,,n; 1ini1上述三种范数是如下定义的矩阵p—范数的特例:
4、由向量的p—范数:xpxk,1p,定义:
k1np1pApsupAxp (1.5)
x05、F—范数(Frobenius): AF2aij; i1j1nn12例 设A12,求范数A1,A2,A,AF. 34解 A1max{13,24}6.
Amax{12,34}7. AF14916305.4772.
由于ATAAT1014,所以1420Amax15221,1522115221,因此A2152215.4650.
向量和矩阵范数的MATLAB实现
在MATLAB中,norm( )函数求向量与矩阵的范数,其命令格式为norm(X,p).
当X为向量或矩阵时,norm(X,p)表示向量或矩阵X的p范数,例如,norm(X,1)表示X的1范数,norm(X,2)表示X的2范数,
norm(X,inf)表示X的范数.对于矩阵X,norm(X,'fro')表示X的F范数.
矩阵的条件数与直接法的误差分析
解线性方程组的直接法产生误差的主要原因:1)不同的算法及舍入误差的影响;2)方程组本身固有的问题(病态或良态)本节我们将分析方程组的状态并估计算法的误差,即原始数据扰动对解的影响.
考虑n阶线性方程组Axb,其中A为非奇异矩阵.
由于A(或b)的数值是测量得到的,或者是计算的结果,在第一种情况下A(或b)常带有某些观测误差,在后一种情况A(或
b)又包含有舍入误差.因此我们处理的实际矩阵是AA(或bb),下面我们来研究数据A(或b)的微小误差对解的影响.首
先考虑一个例子.
6x182例 设方程组Axb,即,它的精确解为(1,1)T. 26.00001x28.00001现在考虑系数矩阵和右端项的微小变化对方程组解的影响,即考察方程组
6x18225.99999x8.00002,
2其解变为(10,2)T.这种现象的出现是完全由方程组的性态决定的. 定义:如果矩阵A或常数项b的微小变化,引起方程组Axb解的巨大变化,则称此方程组为病态方程组,矩阵A称为病态矩阵(相对
于方程组而言),否则称方程组为良态方程组,矩阵A称为良态矩阵.需要一种能刻划矩阵和方程组“病态”程度的标准. 线性方程组的误差分析 设线性方程组为
Axb,
其中ARnn,x,bRn,且A非奇异.x*为精确解,x为解的误差,记
xxx.
设A为A的误差,b为b的误差.下面分别讨论x与A,b的关系.
b有误差而A无误差情形
将带有误差的右端项和带误差的解向量代入方程组,则
A(xx)bb.
由于Axb,而得到xA1b,从而xA1b. 另一方面,由(3.24)式取范数,有bAx,即
A1(b0).可得 xb定理 设A是非奇异矩阵,Axb0,且A(xx)bb,则有误差估计式
xxcond(A)bb,
其中cond(A)A1A称为方阵A的条件数.
【注】 (1) 解的相对误差是右端项b的相对误差的cond(A)倍;
(2) 如果条件数越大,则解的相对误差就可能越大;
(3) 条件数成了刻划矩阵的病态程度和方程组解对A或b扰动的敏感程度.
【定义7】 称条件数很大的矩阵为“病态”矩阵;称病态矩阵对应的方程组为病态方程组.反之,则称矩阵为良态矩阵,对应的方程组为良态方程组. A及b都有误差的情形
定理7 设方程组Axb0,A为非奇异矩阵,A及b都有误差,若A的误差A非常小,使A1A1,则有误差估计式
xx*bA. (3.26) AAb1cond(A)Acond(A)例 已知方程组Axb中
121A314131415113124471,b102, 560137660若b(0.001,0.001,0.001)T时,估计解的相对误差.
解 由于b估计
xx13102 108.3333,b120.001,由式(3.25)有误差
20150.0010.0186,
1310212xx比右端项的相对误差
bb9.2308106扩大了2015倍.
例 下列希尔伯特(Hilbert)矩阵是一族著名的病态矩阵.
1/21/n11/21/31/(n1). Hn1/n1/(n1)1/(2n1)用MATLAB函数计算条件数Hn.输入 for n=3:8 cond(hilb(n)) end
得到3至8阶希尔伯特矩阵的条件数分别为:
524.0568 1.5514e+004 4.7661e+005 1.4951e+007 4.7537e+008 1.5258e+010
由此可见,随着n的增加,Hn的病态可能越严重.Hn常出现在数据拟合和函数逼近中.
对于病态方程组,通常的方法无法得到它的准确解,需要采用一些特殊的处理方法. 病态方程组的处理
对于病态方程组,可采用高精度的算术运算,如双精度或扩充精度,以改善或减轻方程组的病态程度.如果用无限精度运算即不存在舍入误差的话,即使条件数很大,也没有病态可言.我们也可对病态方程组作预处理,使改善方程组系数矩阵的条件数.
例 设方程组Axb,即
1300064/10220003/106191000x2000, 3/1062/106试验证其为病态方程组,且对其作预处理PAxPb,使
cond(PA)cond(A).
解 (1)用MATLAB函数计算系数矩阵的条件数,得
cond(A)1.92011010,显然方程组为病态方程组.
(2) 令Pdiag(1,103,106),使PAxPb,其中
1291,Pb2, PA3214323则有cond(PA)87.354cond(A).显然,经过预处理后的方程组
PAxPb是良态的.
奇异值分解法解病态方程组.
奇异值分解(Singular-Value Decomposition)简称SVD,对于n阶矩阵A,必存在正交矩阵U,V和对角阵S,使得A有奇异值分解
AUSVT. (3.27)
奇异值分解非常有用,对于矩阵n阶矩阵A,存在n阶正交矩阵
U,V,n阶对角阵S,满足AUSVT。U和V中分别是A的奇异向
量,而S是A的奇异值。AA的正交单位特征向量组成U,特征值组成STS,ATA的正交单位特征向量组成V,特征值(与AAT相同)组成STS。因此,奇异值分解和特征值问题紧密联系(注:奇异值分解对ARmn也适用)。
在MATLAB中,函数svd( )表示矩阵的奇异值分解,其命令格式为
T[U,S,V]=svd(A)
其中,U,V为正交矩阵,S为对角阵.例如,求4阶Hilbert矩阵的奇异值分解,输入
[U,S,V]=svd(hilb(4)) 得到
U = -0.7926 0.5821 -0.1792 -0.0292 -0.4519 -0.3705 0.7419 0.3287 -0.3224 -0.5096 -0.1002 -0.7914 -0.2522 -0.5140 -0.6383 0.5146
S = 1.5002 0 0 0 0 0.1691 0 0 0 0 0.0067 0 0 0 0 0.0001
V = -0.7926 0.5821 -0.1792 -0.0292 -0.4519 -0.3705 0.7419 0.3287 -0.3224 -0.5096 -0.1002 -0.7914 -0.2522 -0.5140 -0.6383 0.5146 矩阵S对角线上的元素称为奇异值,由大到小排列.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务