2.3矩阵的条件数与病态方程组
- 格式:pptx
- 大小:591.35 KB
- 文档页数:20
第二章解线性代数方程组的迭代法2. 1 引言在许多实际问题中,常常需要求解这样的线性代数方程组,它的系数矩阵数很高,但非零元素很少,人们称其为大型稀疏线性代数方程组,对于这类方程组,如果它乂不具有带状性,那么,再用直接法求解就不太有效,因为用直接法进行消元或矩阵的三角分解时,没有考虑到系数矩阵的稀疏性,破坏了系数矩阵的形状,导致了计算量的增加和存储单元的浪费,于是,人们常用迭代法求解大型稀疏线性代数方程组。
迭代法只需要存储系数矩阵的非零元素,这样,占用内存在单元较少,能解高阶线性代数方程组。
山于迭代法是通过逐次迭代来逼近方程组的解,因此,收敛性和收敛速度是构造迭代法时要注意的问题。
那么,是否可以构造一种适用于一般情况的迭代法呢?回答是否定的,这是因为不同的系数矩阵具有不同的性态,一般地,每一种迭代法都具有一定的适用范围,在本章的学习中将会看到,有时,某种方法对一类方程组迭代收敛,而对另一类方程组进行迭代时就会发散。
因此,我们应该学会针对具有不同性质的线性代数方程组,构造合适的迭代方法。
本章主要介绍一些基本的迭代法,并在一定的范围内讨论其中儿种方法的收敛法。
2. 2 基本迭代法考虑线性方程组如坷+如勺+…+气兀”二勺a2t x i+a22x2 + - + a2…x n =b2■•••••••••••(2. 1)采用矩阵和向量记号,我们可以把(2.1)式写成Ax = h(2.2)其中,为非奇异矩阵,设下面我们介绍雅可比(Jacobi)迭代,高斯-塞德尔(Gauss-Seidel)迭代与S0R迭代以及SS0R迭代的基本思想和算法。
为了方便地给出矩阵表示式,我们引进下列矩阵分裂:4SD-U,(2.3)其中-a2\-a n\(1)雅可比迭代的基本思想从式(2.1)的第i个方程中解出X t=(/ = 1,2,•••,«)我们把迭代前面的值代入上式右边,山计算得到等式左边的值作为一次迭代的新值,然后再把这个新值代入右边,再从左边得到一个新值,如此反复,就得到了雅可比迭代公式。
谈谈矩阵条件数及其几种计算方法摘要:矩阵条件数在数值分析领域中有重要作用,特别是在线郑治波性方程组和矩阵特征值扰动分析中有广泛的应用,条件数的大小就决定了方程组解的相对误差的大小,用条件数来判断方程组的解对于误差的敏感度是很有用的,它反映了方程组的状态。
关键词:矩阵条件数估计在生产实践和企业管理等实际问题中,经常会碰到许多大型线性方程组的求解问题,其系数阵a总是以抽样统计数据或以实验数据为基础。
统计技术的高低,实验仪器分辨率的高低等等都将给数据带来误差,而这种不可避免的误差,有时甚至是微小的变动也会引起解的极大波动,这时就称系数阵为“病态矩阵”。
对于这种“病态矩阵”一般的算法很难得出理想的结果。
我们知道,算法对误差的传播和积累有很大影响,为了减少这种影响,算法的选取是很重要的,这就是通常所说的算法的稳定性问题。
另一方面,方程组本身对计算中误差的积累也起着极其重要的作用,系数阵a的条件的好坏至关重要,如果问题是病态的,那么即使选择良好的计算方法,也不能指望有好的结果出现,因此判别原始方程组是否病态是十分重要的。
怎样有效地判别矩阵是否为病态矩阵?近几十年国内外许多从事计算数学的学者都在进行摸索研究,得知“条件数”与矩阵病态有密切关系。
“条件数”这一名词在上世纪五十年代初出现,主要用来衡量矩阵的病态程度,条件数越小,则矩阵的非奇异程度越高,称矩阵是良态的;条件数越大,则矩阵的非奇异程度越差,称矩阵为病态的。
另外,在数值分析中,常常要讨论矩阵扰动对一个给定矩阵的特征值的影响,条件数可以衡量矩阵的特征值经过扰动的偏离度,也是衡量矩阵a关于特征值问题是否良态的重要标志。
然而由于矩阵的阶数较大时,的计算量大导致应用定义计算矩阵条件数十分困难,因此,矩阵条件数的估计对研究各种矩阵问题有着重要意义。
1.条件数的提出(1)线性方程组的条件数考虑线性方程组的求解,其中用精确的计算求解得:若对常数列加入的摄动量,即考虑,所得解与之差是 .显然,对方程组的右端向量只不过改变了,而解却相差1806 .又如,设,,,由计算可知方程组和方程组的解分别为和 .由此可见,系数矩阵只产生的误差而解却产生300000 的误差。
§8 向量,矩阵范数,矩阵的条件数一 、 向量、矩阵范数为了讨论线性方程组近似解的误差估计与研究解方程组迭代法的收敛性,需要在)(nn nRR ⨯或中引进向量序列(或矩阵序列)极限概念。
为此,这就需要对量空间n R (或n n R ⨯矩阵空间)元素的“大小”引进某种度量即向量范数(或矩阵范数)即距离的概念。
(一)向量范数:向量范数是3R 中向量长度概念的推广。
},{1为复数i n nx x x x x C ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡== 称为n 维复向量空间。
},)({为复数ij n n ij n n a a A A C ⨯⨯==称为n n ⨯复矩阵空间。
(2)设nn nCA C x ⨯∈∈,,称T n Hx x x x=≡),,(1 为x 的共轭转置,T H A A =称为A 共轭转置矩阵。
在许多应用中,对向量的范数(对向量的“大小”的度量)都要求满足正定条件,齐次条件和三角不等式,下面给出向量范数的抽象定义。
nR x ∈(或nC x ∈)的某个实值非负函数x x N ≡)(,如果满足下述条件(1)正定性 00,0=⇒⇐=≥x x x (2)齐次性 x ax α=其中R ∈α(或C ∈α)(3)三角不等式 )(,,nn C R y x y x y x ∈∈∀+≤+或,称x x N ≡)(是n R 上(或n C )一个向量范数(或为模)。
由三角不等式可推出不等式 (4)y x y x -≤- 下面给出矩阵计算中一些常用向量范数。
设)(),,(1nn T n C x R x x x ∈∈=或(1)向量的“∞”范数 i n i x x x N ≤≤∞∞=≡1max )((2)向量的“1”范数 ∑==≡ni i x xx N 111)((3)向量的“2”范数 2/1122/122)(),()(∑===≡ni i x x x xx N(4)向量的能量范数 设n n R A ⨯∈为对称正定阵2/1),()(x Ax xx N R x AA n =≡→∈∀称为向量的能量范数。
范德蒙矩阵形式下的病态线性方程组求解Wang Hui-rong;Jia Wu-yan【摘要】文章以范德蒙德矩阵为例,运用Matlab软件分析其阶数与2-条件数的关系,得出随着其阶数的增加,2-条件数越来越大,病态程度也越来越严重.然后选用单参数迭代法和新主元加权迭代法分别对以系数矩阵是范德蒙德矩阵的病态线性方程组进行求解,从数值结果可以看出,选取适当的加权因子对求解此病态线性方程组同样有较好的精度和收敛速度.【期刊名称】《长治学院学报》【年(卷),期】2019(036)002【总页数】3页(P3-5)【关键词】病态线性方程组;范德蒙矩阵;单参数迭代法;新主元加权迭代法【作者】Wang Hui-rong;Jia Wu-yan【作者单位】;【正文语种】中文【中图分类】O241在许多科学和工程领域中,常常会遇到求解线性方程组的问题,而方程组解的准确性则由其性态所决定。
病态线性方程组是在计算过程中经常要遇到的问题,因其系数矩阵的条件数很大,故会使得解严重失真。
近年来,求解病态线性方程组的新算法不断推出,文献[1]采用了正则化方法求解病态方程组,文献[2]提出了病态问题的增广方程组法,文献[3]给出了精细积分解法等,并给出了一些数值例子来说明有较好的效果。
但这些算法中选取的数值例子比较单一,大多数都以Hilbert矩阵为例来研究病态线性方程组,而针对系数矩阵为范德蒙德矩阵的研究相对较少。
文章选取以系数矩阵为范德蒙德矩阵的病态线性方程组,借鉴文献[4]提供的单参数迭代法和文献[5]中的新主元加权迭代法,对病态线性方程组进行分析求解。
结果表明选取的迭代方法切实可行,对分析此病态线性方程组有很大帮助。
1 范德蒙德矩阵的病态性分析选取n阶的范德蒙德矩阵如下:估计其阶数与2-条件数的关系,分析其病态性。
表1 阶数n与条件数阶数n c o n d 2(A)5 2.6 1 7 0 e+0 0 4 6 7.3 1 2 0 e+0 0 5 7 2.4 4 5 9 e+0 0 7 8 9.5 2 1 1 e+0 0 8 9 4.2 2 6 1 e+0 1 0 1 0 2.1 0 6 3e+0 1 2 1 1 1.1 6 4 5 e+0 1 4 1 2 7.0 7 1 9 e+0 1 5 1 3 4.6 7 9 7 e+0 1 7 1 4 3.3 5 1 4 e+0 1 9 1 5 2.5 8 2 4 e+0 2 1 1 6 2.1 3 0 4 e+0 2 3由表1的数据可知,随着范德蒙德矩阵阶数的增加,其2-条件数也越来越大,病态性也越来越严重参见文献[6-7]。
(Hilbert 矩阵)病态线性方程组的求解理论分析表明,数值求解病态线性方程组很困难。
考虑求解如下的线性方程组的求解Hx = b ,期中H 是Hilbert 矩阵,()ij n n Hh ,11ij h i j ,i ,j = 1,2,…,n 1.估计矩阵的2条件数和阶数的关系2.对不同的n ,取(1,1,,1)nx K ?,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭代,SOR 迭代和共轭梯度法求解,比较结果。
3.结合计算结果,试讨论病态线性方程组的求解。
第1小题:condition.m %第1小题程序t1=20;%阶数n=20x1=1:t1;y1=1:t1;for i=1:t1H=hilb(i);y1(i)=log(cond(H));endplot(x1,y1);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');t2=200;%阶数n=200x2=1:t2;y2=1:t2;for i=1:t2H=hilb(i);y2(i)=log(cond(H));endplot(x2,y2);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');画出Hilbert 矩阵2-条件数的对数和阶数的关系n=200时n=20时从图中可以看出,1)在n小于等于13之前,图像近似直线log(cond(H))~1.519n-1.8332)在n大于13之后,图像趋于平缓,并在一定范围内上下波动,同时随着n的增加稍有上升的趋势第2小题:solve.m%m第2小题主程序N=4000;xGauss=zeros(N,1);xJacobi=zeros(N,1);xnJ=zeros(N,1);xGS=zeros(N,1);xnGS=zeros(N,1);xSOR=zeros(N,1);xnSOR=zeros(N,1);xCG=zeros(N,1);xnCG=zeros(N,1);for n=1:N;x=ones(n,1);t=1.1;%初始值偏差x0=t*x;%迭代初始值e=1.0e-8;%给定的误差A=hilb(n);b=A*x;max=100000000000;%可能最大的迭代次数w=0.5;%SOR迭代的松弛因子G=Gauss(A,b);[J,nJ]=Jacobi(A,b,x0,e,max);[GS,nGS]=G_S(A,b,x0,e,max);[S_R,nS_R]=SOR(A,b,x0,e,max,w);[C_G,nC_G]=CG(A,b,x0,e,max);normG=norm(G'-x);xGauss(n)=normG;normJ=norm(J-x);nJ;xJacobi(n)=normJ;xnJ(n)=nJ;normGS=norm(GS-x);nGS;xGS(n)=normGS;xnGS(n)=nGS;normS_R=norm(S_R-x);nS_R;xSOR(n)=normS_R;xnSOR(n)=nS_R;normC_G=norm(C_G-x);nC_G;xCG(n)=normC_G;xnCG(n)=nC_G;endGauss.m%Gauss消去法function x=Gauss(A,b)n=length(b);l=zeros(n,n);x=zeros(1,n);%消去过程for i=1:n-1for j=i+1:nl(j,i)=A(j,i)/A(i,i);for k=i:nA(j,k)=A(j,k)-l(j,i)*A(i,k);endb(j)=b(j)-l(j,i)*b(i);endend%回代过程x(n)=b(n)/A(n,n);for i=n-1:-1:1c=A(i,:).*x;x(i)=(b(i)-sum(c(i+1:n)))/A(i,i);endJacobi.m%Jacobi迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m 可能最大的迭代次数function [x,n]=Jacobi(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=D\(L+U);f=D\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Jacobi迭代次数过多,迭代可能不收敛');break;endendG_S.m%Gauss-Seidel迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=G_S(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-L)\U;f=(D-L)\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Gauss-Seidel迭代次数过多,迭代可能不收敛');break;endendSOR.m%SOR超松弛迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数,w松弛因子function [x,n]=SOR(A,b,x0,e,m,w)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-w*L)\((1-w)*D+w*U);f=(D-w*L)\b*w;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('SOR超松弛迭代次数过多,迭代可能不收敛');break;endendCG.m%CG共轭梯度法,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=CG(A,b,x0,e,m)r=b-A*x0;p=r;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=1;while norm(r1)>ebelta=(r1'*r1)/(r'*r);p=r1+belta*p;r=r1;x0=x;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=n+1;if n>mdisp('CG共轭梯度法迭代次数过多,迭代可能不收敛');break;endend。