您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Gauss-Seidel迭代法求解线性方程组
.范文.一.问题描述用Gauss-Seidel迭代法求解线性方程组由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i个分量)1(kix时,用最新分量)1(1kx,)1(2kx)1(1-kix代替旧分量)(1kx,)(2kx)(1-kix,可以起到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel迭代法。二.算法设计将A分解成UDLA,则bxA等价于bxU)D(L则Gauss-Seidel迭代过程)()1()1(kkkUxLxbDx故)()1()(kkUxbxLD若设1)(LD存在,则bLDUxLDxkk1)(1)1()()(令bLDfULDG11)()(,则Gauss-Seidel迭代公式的矩阵形式为fGxxkk)()1(其迭代格式为Tnxxxx)()0()0(2)0(1)0(,,,(初始向量),)(11111)()1()1(ijiijkjijkjijiiiiixaxabax)210i210(nk,,,;,,,或者)(1)210i210(1111)()1()1()()1(ijiijkjijkjijiiiiiikikixaxabaxnkkxxx,,,;,,,.范文.三.程序框图四.结果显示TestBench利用Gauss-Seidel迭代法求解下列方程组开始读入数据n,初始向量,增广矩阵k1iiiijiijkjijkjijiyaxaxab/)(1111)()1(?maxiiyxk=N?nixykkii,,,3211输出迭代失败标志结束输出nyyy21,.范文.3103220241225321321321xxxxxxxxx,其中取1)0(x。运行程序依次输入:1.方阵维数2.增广矩阵系数3.初始向量得到:迭代12次后算出x[1]=-4.0x[2]=3.0x[3]=2.0.范文.五.程序#includestdio.h#includestdlib.h#includeconio.h#includemath.h#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(\n输入系数矩阵:\n);for(i=1;i=m;++i){printf(增广矩阵行数%d:,i);for(j=1;j=n;++j)scanf(%f,&A[i][j]);}}voidVectorOutput(floatx[],intn)//输出向量{inti;for(i=1;i=n;++i)printf(\nx[%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)//具体计算{floatx_former[MAX_n];inti,j,k;printf(\n初始向量x0:\n);VectorInput(x,n);k=0;do{for(i=1;i=n;++i){printf(\nx[%d]=%f,i,x[i]);x_former[i]=x[i];.范文.}printf(\n);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]/=A[i][i];elsereturn1;}++k;}while(IsSatisfyPricision(x,x_former,n)&&kMAX_Number);if(k=MAX_Number)return1;else{printf(\nGauss-Seidel迭代次数为%d次,k);return0;}}intmain()//主函数{intn;floatA[MAX_n][MAX_n],x[MAX_n];printf(\n方阵维数n=);scanf(%d,&n);if(n=MAX_n-1){printf(\n\007nmust%d!,MAX_n);exit(0);}MatrixInput(A,n,n+1);if(Jacobi_(A,x,n))printf(\nGauss-Seidel迭代失败!);else{printf(\n结果:);VectorOutput(x,n);}.范文.printf(\n\n\007Pressanykeytoquit!\n);getch();}欢迎您的光临,word文档下载后可以修改编辑。双击可以删除页眉页脚。谢谢!单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善
本文标题:Gauss-Seidel迭代法求解线性方程组
链接地址:https://www.777doc.com/doc-5115703 .html