GaussSeidel迭代法求解线性方程组.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精品文档 精品文档 PAGE PAGE6 精品文档 PAGE 一. 问题描绘 用Gauss-Seidel迭代法求解线性方程组 由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪 费了存储空间。若每一次迭代充足利用目前最新的迭代值,即在计算第 i个分量xi(k1) 时, 用最新分量x1 ,x2 (k1) (k) (k1) (k1) xi-1代替旧分量x1(k),x2 (k) xi-1,能够起到节俭存储 空间的作用。这样就得到所谓解方程组的 Gauss-Seidel迭代法。 二. 算法设计 将A分解成A L D U,则Ax b等价于(LD U)x b 则Gauss-Seidel迭代过程 Dx(k 1) b Lx(k1)Ux(k) 故 (D L)x(k1) b Ux(k) 若设(D L)1存在,则 x(k1) (D L)1Ux(k) (D L)1b 令 G (D L)1U,f (D L)1b 则Gauss-Seidel迭代公式的矩阵形式为 x(k1) Gx(k)f 其迭代格式为 x(0) (x1(0),x2(0),,xn(0))T (初始向量), (i1) 1 xi (bi 或许 xi(k1) xi(k) xi(i1)  i1 i1 aijx(jk1) aijx(jk))(k0,1,2,;i 0,1,2,n) j1 ji1 xi (kk0,1,2,;i 0,1,2,n) 1(bi i1 i1 aijx(jk1) aijx(jk)) aii j1 ji1 三. 程序框图 开始 读入数据n,初始向量,增广矩阵 1 k i1 i1 (bi aijx(jk1) aijx(jk))/aiiyi j1 ji1 maxxi yi ? k 1 k yi xi k=N i 1,2,3 ,n 输出迭代失 败标志 结束 四. 结果显示 TestBench 利用Gauss-Seidel迭代法求解下列方程组 5x1 2x2 x3 12 x1 4x2 2x3 20, 其中取x(0) 1。 2x1 3x2 10x3 3  输出 y1,y2 yn 运行程序 依次输入: 1.方阵维数 2.增广矩阵系数 3.初始向量 得到: 迭代12次后算出 x[1]= x[2]= x[3]= 五. 程序 #include #include #include #include #define MAX_n 100 #definePRECISION #defineMAX_Number1000 voidVectorInput(floatx[],intn) //输入初始向量 { inti; for(i=1;i=n;++i) { printf(x[%d]=,i); scanf(%f,x[i]); } } voidMatrixInput(floatA[][MAX_n],intm,intn) //输入增广矩阵 { int i,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]; else return1; } ++k; }while(IsSatisfyPricision(x,x_former,n)kMAX_Number); if(k=MAX_Number) return1; else { pr

文档评论(0)

130****3819 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档