四、 程序运行结果分析
误差分析:
列主元高斯法解决了一部分大数吃掉小数的现象,但在计算机运算时,仍会对中间数据进行舍入,影响结果的精度,这种误差同样也存在其他两种算法中;
对于三对角阵,选用追赶法可以得到更准确的解。
课题三 线性方程组的迭代法
一、问题提出
1、设线性方程组
??42?3?1210000???86?5?3650100??x1??x?2??42?2?132?1031?????0?215?13?1194??x3????x?4??426?167?3323????86?8571726?35??x5????x??02?13?425301??6??1610?11?917342?122??x7?????462?713920124??x?8??x?9??00?18?3?24?863?1??????x10??x
*= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T
J迭代算法:
程序设计流程图:
??5??12???3???2??=??3??46? ???13??38????19?????21??源程序代码:
#include
float a[50][51],x1[50],x2[50],temp=0,fnum=0; int i,j,m=200,n=10,e,bk=0; for(i=1;i printf(\请输入系数矩阵:\\n\ for(i=1;i j=1; while(j scanf(\ j++; } } printf(\输入方程组的常数项:\\n\ for(i=1;i scanf(\ } printf(\请输入精度要求:\\n\ scanf(\ while(m!=0) { for(i=1;i for(j=1;j if (j!=i) temp=a[i][j]*x1[j]+temp; } x2[i]=(a[i][n+1]-temp)/a[i][i]; temp=0; } for(i=1;i fnum=float(fabs(x1[i]-x2[i])); if(fnum>temp) temp=fnum; } if(temp<=pow(10,-4)) bk=1; for(i=1;i printf(\原方程组的解为:\\t\ for(i=1;i if((x1[i]-x2[i])<=e||(x2[i]-x1[i])<=e) { printf(\ } } printf(\} 运行结果: 2、设对称正定阵系数阵线方程组 2?402?4?22?1?21???4?1141?8?6?1?0?21400??x1??x?320???2??356??x3?????4?33??x4?= ?0???6????20???23?? ??21?8?1224?10?3????43?3?44111?4?x5????025?3?10??x??6?1142x7???0063?3?4219???????x8??x* = ( 1, -1, 0, 2, 1, -1, 0, 2 )T GS迭代算法: #include void main() { int choice=1; while(choice==1) { double a[m][m],b[m],e,x[m],y[m],w,se,max; int n,i,j,N,k; cout<<\迭代法\ cout<<\请输入方程的个数:\ cin>>n; for(i=1;i<=n;i++) { cout<<\请输入第\个方程的各项系数:\ for(j=1;j<=n;j++) cin>>a[i][j]; } cout<<\请输入各个方程等号右边的常数项:\\n\ for(i=1;i<=n;i++) { cin>>b[i]; } cout<<\请输入最大迭代次数:\ cin>>N; ??9???22?????15????45??