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

数值计算方法实验5.doc

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

实验报告 学院(系)名称: 计算机与通信工程 姓名 学号专业 计算机科学与技术 班级 2012级1班 实验项目 实验五 线性方程组的解法 课程名称 数值计算方法 课程代码 0665026 实验时间 2015年6月23日第3-4节 2015年6月30日第3-4节 实验地点 7-219 批改意见: 成绩 教师签字: 实验目的: 编写列选主元高斯消去法、雅可比和高斯-塞德尔迭代法的算法程序,上机调试通过。 实验环境: 硬件环境:IBM-PC或兼容机 软件环境:Windows操作系统 编程语言:C语言 实验内容: 用列主元高斯消去法求解下列线性方程组 用高斯-塞德尔迭代方法求解线性方程组 要求误差为 实验步骤: 列主元高斯消去法 高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回代过程求解 列选主元法 1. 列选主元是当消元到第k步时,从k列的akk以下(包括akk)的各元素中选出绝对值最大的,然后通过行交换将其交换到akk的位置上。交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此列选主元不影响求解的结果 2. 列选主元比全选主元的运算量小,但一般可以满足精度要求,所以列选主元更常被采用 3. 在列主元消去法中,未知数仍然是顺序地消去的,但是把各方程中要消去的那个未知数的系数按绝对值最大值作为主元素,然后用顺序消去法的公式求解 列主元高斯消去法的流程图: 主程序部分 列选主元部分 高斯-塞德尔迭代法 高斯-塞德尔迭代法的思想 迭代收敛时,新值xi (k+1) 比老值xi (k) 更准确 算出新值xi (k+1)后,用新值xi (k+1)代替用于后面计算的老值xi (k) ,使每次迭代计算,都是利用“最新求解信息” 这样,必然会使迭代求解的速度加快 高斯-塞德尔(Seidel)迭代公式 高斯-塞德尔迭代的流程图 实验结果: 列主元消去法 输入各个数据,最终使用列选主元法,得到结果为:x1=x2=x3=1 高斯-赛德尔迭代法 输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,x2=2.142855,x3=-3.285712 附录(源程序及运行结果) 列主元高斯消去法 #includestdio.h #includemath.h void print(double a[3][3],int n,double b[3]){ printf(输出矩阵:\n); for(int i=0;in;i++){ for(int j=0;jn;j++) printf(%lf ,a[i][j]); printf(%lf,b[i]); printf(\n); } } void liezhuyuan(double a[3][3],double b[3],int k,int n){ double d,t; int l=k,i=k+1; d=a[k][k]; while(i!=n){ if(fabs(a[i][k])fabs(d)){ d=a[i][k]; l=i; } i++; } printf(选出主元:%lf\n,d); if(d==0) printf(矩阵奇异!\n); else if(l!=k){ for(int j=k;jn;j++){ t=a[l][j]; a[l][j]=a[k][j]; a[k][j]=t; } t=b[l]; b[l]=b[k]; b[k]=t; } } void main(){ double a[3][3]={2,1,1,1,3,2,1,2,2}, b[3]={4,6,5}; int k=0,i,j,n=3; print(a,n,b); while(k!=n-1){ liezhuyuan(a,b,k,n); for(i=k+1;in;i++) a[i][k]=a[i][k]/a[k][k]; for(i=k+1;in;i++){ for(j=k+1;jn;j++) a[i][j]=a[i][j]-a[i][k]*a[k][j]; b[i]=b[i]-a[i][k]*b[k]; } k++; } b[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i=0;i--){ for(j=i+1;jn;j++) b[

文档评论(0)

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

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

1亿VIP精品文档

相关文档