欢迎来到天天文库
浏览记录
ID:47467596
大小:169.00 KB
页数:6页
时间:2020-01-11
《高斯-赛德尔迭代法解线性方程组》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数值分析实验五班级:10信计二班学号:59姓名:王志桃分数:一.实验名称高斯-赛德尔迭代法解线性方程组二.实验目的1.学会利用高斯赛德尔方法解线性方程组2.明白迭代法的原理3.对于大型稀疏矩阵方程组适用于迭代法比较简单三.实验内容利用Gauss-Seidel迭代法求解下列方程组,其中取。四、算法描述由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第个分量时,用最新分量,代替旧分量,,就得到所谓解方程组的Gauss-Seidel迭代法。其迭代格式为(初始向量),或者写为五、编码#include#include2、lib.h>#include#include#defineMAX_n100#definePRECISION0.0000001#defineMAX_Number1000voidVectorInput(floatx[],intn)//输入初始向量{inti;for(i=1;i<=n;++i){printf("x[%d]=",i);scanf("%f",&x[i]);}}voidMatrixInput(floatA[][MAX_n],intm,intn)//输入增广矩阵{inti,j;printf("===BegininputMatrixelements=3、==");for(i=1;i<=m;++i){printf("Input_Line%d:",i);for(j=1;j<=n;++j)scanf("%f",&A[i][j]);}}voidVectorOutput(floatx[],intn)//输出向量{inti;for(i=1;i<=n;++i)printf("x[%d]=%f",i,x[i]);}intIsSatisfyPricision(floatx1[],floatx2[],intn)//判断是否在规定精度内{inti;for(i=1;i<=n;++i)if(fabs(x1[i]-x2[i])>PRECISION)retu4、rn1;return0;}intJacobi_(floatA[][MAX_n],floatx[],intn)//具体计算{floatx_former[MAX_n];inti,j,k;printf("Inputvectorx0:");VectorInput(x,n);k=0;do{for(i=1;i<=n;++i){printf("x[%d]=%f",i,x[i]);x_former[i]=x[i];}printf("");for(i=1;i<=n;++i){x[i]=A[i][n+1];for(j=1;j<=n;++j)if(j!=i)x[i]-=A[i][j]*x[j]5、;if(fabs(A[i][i])>PRECISION)x[i]/=A[i][i];elsereturn1;}++k;}while(IsSatisfyPricision(x,x_former,n)&&k=MAX_Number)return1;else{printf("G-S%dtimes!",k);return0;}}intmain()//主函数{intn;floatA[MAX_n][MAX_n],x[MAX_n];printf("Inputn=");scanf("%d",&n);if(n>=MAX_n-1){printf(" 07nmu6、st<%d!",MAX_n);exit(0);}MatrixInput(A,n,n+1);if(Jacobi_(A,x,n))printf("G-SFailed!");else{printf("OutputSolution:");VectorOutput(x,n);}printf(" 07Pressanykeytoquit!");getch();}通过实验使我更加熟练的掌握和使用高斯赛贝尔迭代法来解线性方程组,而且这个方法可以用来解大型的稀疏矩阵,是的解线性方程组更加的便捷。但是,这个实验很繁琐,必须要仔细的对待。
2、lib.h>#include#include#defineMAX_n100#definePRECISION0.0000001#defineMAX_Number1000voidVectorInput(floatx[],intn)//输入初始向量{inti;for(i=1;i<=n;++i){printf("x[%d]=",i);scanf("%f",&x[i]);}}voidMatrixInput(floatA[][MAX_n],intm,intn)//输入增广矩阵{inti,j;printf("===BegininputMatrixelements=
3、==");for(i=1;i<=m;++i){printf("Input_Line%d:",i);for(j=1;j<=n;++j)scanf("%f",&A[i][j]);}}voidVectorOutput(floatx[],intn)//输出向量{inti;for(i=1;i<=n;++i)printf("x[%d]=%f",i,x[i]);}intIsSatisfyPricision(floatx1[],floatx2[],intn)//判断是否在规定精度内{inti;for(i=1;i<=n;++i)if(fabs(x1[i]-x2[i])>PRECISION)retu
4、rn1;return0;}intJacobi_(floatA[][MAX_n],floatx[],intn)//具体计算{floatx_former[MAX_n];inti,j,k;printf("Inputvectorx0:");VectorInput(x,n);k=0;do{for(i=1;i<=n;++i){printf("x[%d]=%f",i,x[i]);x_former[i]=x[i];}printf("");for(i=1;i<=n;++i){x[i]=A[i][n+1];for(j=1;j<=n;++j)if(j!=i)x[i]-=A[i][j]*x[j]
5、;if(fabs(A[i][i])>PRECISION)x[i]/=A[i][i];elsereturn1;}++k;}while(IsSatisfyPricision(x,x_former,n)&&k=MAX_Number)return1;else{printf("G-S%dtimes!",k);return0;}}intmain()//主函数{intn;floatA[MAX_n][MAX_n],x[MAX_n];printf("Inputn=");scanf("%d",&n);if(n>=MAX_n-1){printf(" 07nmu
6、st<%d!",MAX_n);exit(0);}MatrixInput(A,n,n+1);if(Jacobi_(A,x,n))printf("G-SFailed!");else{printf("OutputSolution:");VectorOutput(x,n);}printf(" 07Pressanykeytoquit!");getch();}通过实验使我更加熟练的掌握和使用高斯赛贝尔迭代法来解线性方程组,而且这个方法可以用来解大型的稀疏矩阵,是的解线性方程组更加的便捷。但是,这个实验很繁琐,必须要仔细的对待。
此文档下载收益归作者所有