网站大量收购独家精品文档,联系QQ:2885784924

09-2方程组的简单迭代法.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
09-2方程组的简单迭代法

2013-2014(1)专业课程实践论文 题目:方程组的简单迭代法 算法理论 1.解线性方程组的两种方法: 直接法: 经过有限次运算后可求得方程组精确解的方法(不计舍入误差!) 迭代法:从解的某个近似值出发,通过构造一个无穷序列去逼近精确解的方法。 2.迭代法主要研究的问题: 1)迭代格式的构造; 2)迭代的收敛性分析; 3)收敛速度分析; 4)复杂性分析;(计算工作量) 5)初始值选择。 3.迭代法的原理: 将原线性方程组中系数矩阵的主对角线移到一边并将其系数化为一,然后在给定迭代初值的情况下通过迭代的方法求解线性方程组的值。 迭代法的基本思想: 将线性方程组 (1) (其中为阶非奇异矩阵,为维向量) 改写成等价形式 (2) 构造简单迭代格式: , (3) 亦即 , (4) 可算出线性方程组(1)的近似解序列: 我们把用公式(3)进行迭代求解的方法称为简单法,并称式(3) 为简单迭代式,矩阵称为迭代矩阵,称为初始近似解,称为次近似解,称为迭代次数。 二、算法框图 算法程序 #includeiostream #includemath.h #includeiomanip using namespace std; #define kk 50 //定义最大方程元数 int n,i,c,j,hh,gg,mm; double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ; int main() { cout输入的方程元数endl; //数据的输入 cinn; cout请输入方程系数矩阵:endl; for(i=0;in;i++) for(j=0;jn;j++) cinA[i][j]; cout请输入右边向量:endl; for(i=0;in;i++) cinb[i]; cout输入你想要的迭代精度(建议1e-5以上)!endl; cinfff; cout输入最大迭代次数(建议300次以上)!endl; cinmm; //计算出迭代矩阵 for(i=0;in;i++) { b[i]=b[i]/A[i][i]; for(j=0;jn;j++) { if(i==j) { x[i][i]=0; } else { x[i][j]=-A[i][j]/A[i][i]; } } } //输出迭代矩阵 cout计算出迭代矩阵为:endl; for(i=0;in;i++) { for(j=0;jn;j++) coutx[i][j] ; coutb[i] ; coutendl; } //赋迭代初值 cout输入迭代初值endl; for(i=0;in;i++) ciny[i]; int f=1; //简单迭代法 cout ; for(i=1;in+1;i++) cout\tX[i] \t; cout精度; coutendl; cout迭代初值为: ; coutsetiosflags(ios::fixed); for(i=0;in;i++) couty[i] ; coutendl; while(efff) { for(i=0;in;i++) { z[i]=y[i]; nn=0; for(j=0;jn;j++) { nn=nn+x[i][j]*y[j]; y[i]=nn+b[i]; } e=fabs(z[0]-y[0]); if(fabs(z[i]-y[i])e) e=fabs(z[i]-y[i]); if(i==0) { coutsetiosflags(ios::fixed); cout第setw(3)setprecision(3)f++次迭代 ; } coutsetiosflags(ios::fixed); coutsetw(8)setprecision(8)y[i] ; } coute; coutendl; if(fmm) { cout迭代次数大于mm次endl; cout认为方程发散,迭代不收敛endl; exit(1); } } coutendl; coutendl; cout方程迭代了f-1次,达到你所要求的精度fffendl; cout最后结果为:endl; coutendl; for(i=0;in;i++)

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档