《病态线性方程组的求解.docx》由会员分享,可在线阅读,更多相关《病态线性方程组的求解.docx(16页珍藏版)》请在第一文库网上搜索。
1、科学与工程计算实验报告学号:姓名:一、实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为HiIbert矩阵,H=(%3n,hiJ=.1,i,j=12,r+-1这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为D再计算出右端b的办法给出确定的问题。实验要求:(1)选择问题的维数为6,分别用JaCObi迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法。二、程序设计的基本思想、原理和算法描述:1、算法Jacobi迭代法拓入
2、,tArb;ti1tX.WHiIe不泄足判伤准则doyzi上一毋后代X)Fori1.2.n九.auyaii;Enaea若A为稀疏矩阵,只需遍历非零元素GS迭代法:7xtA,biItitX.Whi1e不满足判停准则doFori=1,2,.,ni=(仇一a/j-=iijXfyaa;:EndEnd若A为稀疏矩阵,只需遍历非零元素每步迭代计算量相当于一次矩阵与向量的乘法:不需要保留上一步的迭代解,与JaCObi迭代法计算量一样。SOR迭代法(稠密矩阵)X:x,4rh,;:X.WhHe不满足判停准则d。Fori=1,2n邛=(I-)xi+(-俎Oi内-7-tf);iEndEnd2、函数组成doubIem
3、ax(doubIearray100)求数组中的最大值函数3、输入/输出设计对手方程组Hx=b的求解,系数矩阵H为Hi1bert矩阵,矩阵中的数由下列函数生成。,712/X*取一个特解1,1,1,1b数组由矩阵的每行元素相加得来。4、符号名说明doub1edoub1edoub1ec100x100x0100doub1edoub1esumintk用来存储第k1次和第k次迭代结果的差值的绝对值第k+1次迭代结果,储存解数组初始向量第k+1次和第k次迭代结果的差值的绝对值的最大值矩阵方程变换后右侧值的和迭代次数doub1ea100100存储Hi1bert矩阵doub1eb100存储b向量三、源程序及注释
4、:Jacobi迭代法#inc1udeinc11e#inc1ude/inc1udeusingnamespacestd;intn;doub1emax(doub1carrayIOO)/求最大值函数(doub1ea=arrayO;inti;fbr(i=1;in;i+)(iRaarrayi)a=arrayi;returna;)doub1ec100=0.0;doub1ex(100=0.0;/第k+1次迭代结果,储存解数组doub1eXOuOo=0Q;初始向量dob1eum=0;intmain()doub1es=0;inti,kJWk为迭代次数doub1ea11;doub1eb1IOOJ=0.0:CoUI请
5、输入维数:vn;COU1V输出a数组:endkdoub1emax(doub1earray!IOO);fbr(i=O;in;i+)fbrtj=OJn;j+)ai1(jJ=1O(i+j+1);PrimfC%1O.611,aiJUD力矩阵中的数精确到六位coutcndk)COU1V输出b数组:vend1;fbr(i=O;in;i+)(fbr(i=OJnJ+)(bi+=aijW/矩阵每行的和coutb(i,;)coutcnd1;COUIVV输入精度:s;fbr(k=1;k+)ibrti=0;in;i+)ibrtj=OJnJ+)(sum=a1ij)*xyj+sum;)Xm=XOi+(bi-sum)a刚i
6、J)H雅克比迭代方法计算方式ci=fabs(xi卜XOm)附求差值的绝对值xijxi;r=max(c);iRKs)输出迭代次数fbKi=O;in;i+)coutx,i=xisetprecision(10)cnd1;COUI迭代次数:vvkvcnd1;return0;return0;)GS迭代法#inc1udeinc11e科inc1ude#inc1udeusingnamespacestd;intn;doub1emax(doub1earrayIOOJ)/求最大值函数(doub1ea=array(OJ;inti;fbr(i=1;in;i+)(iRaarrayi)a=arrayi1;)returna;
7、)main()doub1es=0;doub1emax(doub1caay(IOO);doub1ec(I=0.0;doub1exIOO=0.0;悌k+1次迭代结果,储存解数组doub1eXOuOo=0.0H初始向量inti*J;doub1ertsum=0;doub1ea1IOO;doub1eb(100=0.0:COUIVV请输入维数:n;CoU1VV输出a数组:cnd1;fbr(i=0;in;i+)(fbrtj=O;jn;j+)IaijJ=1.W(i+j+1);Prin1fr%10.611,aiUDH矩阵中的数精确到六位)coutcnd1;)CoU1VV输出b数组:,,vcnd1;1br(i=O
8、;in;i+)ibrtj=OJnJ+)bi+=aiJ(j1H矩阵每行的和)coutbib;)Couivvend1;CoU1输入精度:cns;fbr(k=1;k+)(for(i=Ounu+)(for(j=0jn)(sum=a(iJ(j*xjJ+sum;)x(i=xij+(bi-sumyaii)gs迭代方法计算方式ci=fabs(xi卜xOiD,求差值的绝对值x(ij=xij;sum=0;)r=max(c);if(s)输出迭代次数(fbr(i=O;in;i+)COUtVxvvivv=wx(ise(precision(IO)cnd1;COUIVV迭代次数:kcnd1;)SOR迭代法#inc1ude#
9、inc1iK1e#inc1ude/inc1udeusingnamespacestd;intn;doub1emax(dub1eaay(IOO)(doub1ea=array(O;inti;fbr(i=1;in;i+)(iRaarrayi)a=arrayi;)returna;)intmain()doub1es=0.w=0;inti,kjyk为迭代次数doub1emax(dub1carrayIOOJ);doub1ec1=0.0;/dob1cxUOO=0.0;第k+1次迭代结果,储存解数组doub1exIOO=0.0;初始向量inti.kj;doub1ertsum=0;doub1ea11;doub1eb
10、(100J=0.0:CoUI请输入维数:n;COU1v输出a数组:endkfbr(i=O;in;i+)Ibrtj=O;jn;j+)(ai(j=1.0/(i+j+1);printR%10.61f,a1i1j);/coutaijj;coutcnd1;COUI输出b数组:vend1;fbr(i=O;in;i+)(fbr(i=O;jn;j+)(bi+=aij;)coutbi)coutcnd1;COUIVV输入精度:s;COUtVV输入松弛因子:w;for(k=1jc+)(for(i=O;in;i+)(fr(j=0jn)(sum=aijjj*xj+sum;)x(i=xij+(w*(bij-SUmya口同
11、)力$oT迭代方法的计算公式ci=fabs(xi-xOiD;求差值的绝对值XO1ij=Xi;sum=0;)r=max(c);i1(rs)输出迭代次数fbr(i=Oiinj+)coutxi=xisetprecision(IO)cnd1;CoUIVV迭代次数:kend1;return0;)四、运行输出结果:Jacobi*JnSOREAitXfwewr*出,且,1.HW5,HA.Sf1MNNIR.333333.2S0.2me8im?输出喊的且,K.45149286瀚入精度,.RAAR1B.SfNNNNIB.333333A.25AAAA.200A0166667.142878.333333f1.2SiNNMA.2ARAAA8.1666。e.142tS70.12Wf1.2S0R00H.2RfNWNI。1666678.142857.125e.IiiiiiB.20MN9B.16S6670.142857.12Se.1666670.142857A.i2smw0.111111.10.09(*7m1.21784.99S3O.84563SB.736S44-.W2S1-1.t1137W722-.9537i813-1.037427094-1.0295544395-f1.9662059119去代次故,ot五、结果比较分析:说明:Hx=b,H矩阵可以由函数hi,j=1(i+j-1)直接由程序生成,为了设定参考