病态线性方程组的求解.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《科学与工程计算》实验报告 学 号: 姓 名: 一、实验内容: 考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵, 这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。 实验要求: (1)选择问题的维数为6,分别用Jacobi迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何? (2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么? (3)讨论病态问题求解的算法。 二、程序设计的基本思想、原理和算法描述: 算法 Jacobi迭代法 若A为稀疏矩阵,只需遍历非零元素 GS迭代法 若A为稀疏矩阵,只需遍历非零元素 每步迭代计算量相当于一次矩阵与向量的乘法;不需要保留上一步的迭代解,与Jacobi迭代法计算量一样。 SOR迭代法(稠密矩阵) 函数组成 double max(double array[100]) 求数组中的最大值函数 输入/输出设计 对于方程组Hx=b的求解,系数矩阵H为Hilbert矩阵,矩阵中的数由下列函数生成。 X*取一个特解[1,1,1,……,1] b数组由矩阵的每行元素相加得来。 4、符号名说明 double c[100] 用来存储第k+1次和第k次迭代结果的差值的绝对值 double x[100] 第k+1次迭代结果,储存解数组 double x0[100] 初始向量 double r 第k+1次和第k次迭代结果的差值的绝对值的最大值 double sum 矩阵方程变换后右侧值的和 int k 迭代次数 double a[100][100] 存储Hilbert矩阵 double b[100] 存储b向量 三、源程序及注释: Jacobi迭代法 #includeiostream #includemath.h #include iomanip #include stdio.h using namespace std; int n; double max(double array[100])//求最大值函数 { double a=array[0]; int i; for(i=1; in; i++) { if(aarray[i]) a=array[i]; return a; } } double c[100]= {0.0}; double x[100]= {0.0}; //第k+1次迭代结果,储存解数组 double x0[100]= {0.0}; //初始向量 double r,sum=0; int main() { double s=0; int i,k,j;//k为迭代次数 double a[100][100]; double b[100]= {0.0}; cout请输入维数:endl; cinn; cout输出a数组:endl; double max(double array[100]); for(i=0; in; i++) { for(j=0; jn; j++) { a[i][j]=1.0/(i+j+1); printf(%10.6lf ,a[i][j]);//矩阵中的数精确到六位 } coutendl; } cout输出b数组:endl; for(i=0; in; i++) { for(j=0; jn; j++) { b[i]+=a[i][j];//矩阵每行的和 } coutb[i] ; } coutendl; cout输入精度:endl; cins; for(k=1;; k++) { for(i=0; in; i++) { for(j=0; jn; j++) { sum=a[i][j]*x0[j]+sum; }

文档评论(0)

180****2140 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档