解线性方程组的迭代法.docx
- 文档编号:28027396
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:14
- 大小:170.81KB
解线性方程组的迭代法.docx
《解线性方程组的迭代法.docx》由会员分享,可在线阅读,更多相关《解线性方程组的迭代法.docx(14页珍藏版)》请在冰豆网上搜索。
解线性方程组的迭代法
数值分析实验报告书
课题3解线性方程组的迭代法
A.问题提出
对所列的线性方程组
X[1]
X[2]
X[3]
X[4]
X[5]
X[6]
X[7]
X[8]
X[9]
X[10]
5
12
3
2
3
46
13
38
19
-21
=
*
4,-1,0,0,0,0,0,0,0,0
-1,4,-1,0,0,0,0,0,0,0
0,-1,4,-1,0,0,0,0,0,0
0,0,-1,4,-1,0,0,0,0,0
0,0,0,-1,4,-1,0,0,0,0
0,0,0,0,-1,4,-1,0,0,0
0,0,0,0,0,-1,4,-1,0,0
0,0,0,0,0,0,-1,4,-1,0
0,0,0,0,0,0,0,-1,4,-1
0,0,0,0,0,0,0,0,-1,4
=
0
-6
6
23
11
-22-15
45
X[1]
X[2]
X[3]
X[4]
X[5]
X[6]
X[7]
X[8]
*
4,2,-4,0,2,4,0,0
2,2,-1,-2,1,3,2,0
-4,-1,14,1,-8,,-3,5,6
0,-2,1,6,-1,-4,-3,3
2,1,-8,-1,22,4,-10,-3
4,3,-3,-4,4,11,1,4
0,2,5,-3,-10,1,14,2
0,0,6,3,-3,-4,2,19
分别采用Jacobi迭代法,Gauss-Seidel迭代法和SOR迭代法求解。
B.要求
.分别对不同的精度要求,如e=10^-3,10^-4,10^-5,利用所需的迭代次数体会该迭代法的收敛快慢。
.使用SOR方法时,选取松弛因子w=0.8,0.91,1.2等,试找出你所选用松弛因子的最佳值。
.编制出各种迭代法的程序并给出计算结果。
C.实现方法(C++源代码)
#include
#include
#include
usingnamespacestd;
doublemax(doublearray[10]);
doublegs(doublex[10],doublee);
doublesor(doublex[10],doublee,doublew);
doublejacobi(doublee);
doublea[10][10]={4,-1,0,0,0,0,0,0,0,0,
-1,4,-1,0,0,0,0,0,0,0,
0,-1,4,-1,0,0,0,0,0,0,
0,0,-1,4,-1,0,0,0,0,0,
0,0,0,-1,4,-1,0,0,0,0,
0,0,0,0,-1,4,-1,0,0,0,
0,0,0,0,0,-1,4,-1,0,0,
0,0,0,0,0,0,-1,4,-1,0,
0,0,0,0,0,0,0,-1,4,-1,
0,0,0,0,0,0,0,0,-1,4};
intb[10]={7,5,-13,2,6,-12,14,-4,5,-5};
voidmain()
{
doublem,n;
inti;
doublex2[10];
cout<<"输入迭代精度"< cout<<"e=";cin>>m; cout<<"输入sor松弛因子"< cout<<"w=";cin>>n; cout<<"输入初解"< for(i=0;i<10;i++) cin>>x2[i]; jacobi(m); sor(x2,m,n); gs(x2,m); } doublemax(doublearray[10]) { doublea=array[0]; inti; for(i=1;i<10;i++) { if(a a=array[i]; } returna; } doublejacobi(doublee) { inti,j,k; doubler,sum=0; doublec[10]={0,0,0,0,0,0,0,0,0,0}; doublex[10]={0,0,0,0,0,0,0,0,0,0}; doublex0[10]={0,0,0,0,0,0,0,0,0,0}; for(k=1;;k++) { for(i=0;i<10;i++) { for(j=0;j<10;j++) { sum=a[i][j]*x0[j]+sum; } x[i]=x0[i]+((b[i]-sum)/a[i][i]); c[i]=x[i]-x0[i]; if(c[i]<0) c[i]=-c[i]; sum=0; } r=max(c); if(r {for(i=0;i<10;i++) cout<<"x["< cout<<"雅克比迭代次数为"< return0; } else for(i=0;i<10;i++) x0[i]=x[i]; } } doublegs(doublex[10],doublee) { inti,k,j; doubler,sum=0; doublex0[10]={0}; doublec[10]={0}; for(k=1;;k++) { for(i=0;i<10;i++) { for(j=0;j<10;j++) { sum=a[i][j]*x0[j]+sum; } x[i]=x0[i]+((b[i]-sum)/a[i][i]); c[i]=fabs(x[i]-x0[i]); x0[i]=x[i]; sum=0; } r=max(c); if(r { for(i=0;i<10;i++) cout<<"x["< cout<<"高斯—塞德尔迭代法迭代次数="< return0; } } } doublesor(doublex[10],doublee,doublew) { inti,k,j; doubler,sum=0; doublex0[10]={0}; doublec[10]={0}; doublem; for(k=1;;k++) { for(i=0;i<10;i++) { for(j=0;j<10;j++) { sum=a[i][j]*x0[j]+sum; } m=w*((b[i]-sum)/a[i][i]); x[i]=m+x0[i]; c[i]=fabs(m); x0[i]=x[i]; sum=0; } r=max(c); if(r {for(i=0;i<10;i++) cout<<"x["< cout<<"逐次超松弛迭代法迭代步数="< return0; } } } D.运行结果(截图) . . . . . E.迭代法程序运行结果分析 就以上结果分析,在相同的迭代精度下,GS迭代法和SOR迭代法的迭代次数明显少于Jacobi迭代法的迭代次数。 这说明,GS和SOR迭代法比Jacobi迭代法具有更加快速的收敛性。 而对比这几次迭代结果,SOR松弛因子对SOR迭代法的收敛速度和收敛结果与精确解的近似程度有比较大的影响,根据这几次的地待发运行结果分析,当SOR的松弛因子W=1.1时,SOR迭代法的收敛速度是最快的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性方程组 迭代法
![提示](https://static.bdocx.com/images/bang_tan.gif)