资源描述:
《Gauss-Seidel迭代法求解线性方程组.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.一.问题描述用Gauss-Seidel迭代法求解线性方程组由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第个分量时,用最新分量,代替旧分量,,可以起到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel迭代法。二.算法设计将分解成,则等价于则Gauss-Seidel迭代过程故若设存在,则令则Gauss-Seidel迭代公式的矩阵形式为其迭代格式为(初始向量),或者三.程序框图范文..开始读入数据,初始向量,增广矩
2、阵k=N?输出迭代失败标志结束输出一.结果显示TestBench利用Gauss-Seidel迭代法求解下列方程组,其中取。运行程序依次输入:1.方阵维数范文..1.增广矩阵系数2.初始向量得到:迭代12次后算出x[1]=-4.0x[2]=3.0x[3]=2.0一.程序#include范文..#include#include#include#defineMAX_n100#definePRECISION0.0000001#defineMAX_Number10
3、00voidVectorInput(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("输入系数矩阵:");for(i=1;i<=m;++i){printf("增广矩阵行数%d:",i);for(j=1;j<=n;++j)scanf("%f",&A[i][j]);}}vo
4、idVectorOutput(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)return1;return0;}intJacobi_(floatA[][MAX_n],floatx[],intn)//具
5、体计算{floatx_former[MAX_n];inti,j,k;printf("初始向量x0:");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];if(fabs(A[i][i])>PRECISION)x[i]
6、/=A[i][i];elsereturn1;}++k;}while(IsSatisfyPricision(x,x_former,n)&&k=MAX_Number)return1;else{printf("Gauss-Seidel迭代次数为%d次",k);return0;}}intmain()//主函数{intn;floatA[MAX_n][MAX_n],x[MAX_n];范文..printf("方阵维数n=");scanf("%d",&n);if(n>=MAX_n-1){print
7、f(" 07nmust<%d!",MAX_n);exit(0);}MatrixInput(A,n,n+1);if(Jacobi_(A,x,n))printf("Gauss-Seidel迭代失败!");else{printf("结果:");VectorOutput(x,n);}printf(" 07Pressanykeytoquit!");getch();}欢迎您的光临,word文档下载后可以修改编辑。双击可以删除页眉页脚。谢谢!单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善教育之通
8、病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。范文.