数值分析第二次大作业.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文档。上传文档
查看更多
数值分析第二次 SY1107214 王宽 第PAGE 17页 题目分析 使用带双步位移的QR分解法求矩阵的全部特使用带双步位移的QR分解法求矩阵的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知: (i,j=1,2,……,10) 算法设计 按照题目给出的矩阵定义对矩阵A赋初值:对应的函数为initA(); 为了减少求特征值和特征向量过程中的计算量,在对矩阵进行QR分解前先进行拟上三角化:对应的函数为nssj(); 对拟上三角化后的矩阵A使用带双步位移的QR分解法逐次迭代(最大迭代次数L=500),逐个求出其特征值,对应的函数为tezhengzhi();这个过程中包含着两个子程序:QR()和qmk(),分别用来对矩阵Mk进行QR分解并得到Ak+1和计算mk的值; 使用带原点平移的反幂法求出其对应的特征向量,对应的函数为:fmifa(),这个过程中求解线性方程时用到列主元的高斯消元法,对应的函数为:gauss(double ); 根据数值分析课本的相关知识,步骤3中带双步位移的QR分解法的流程图如下: 本次作业所使用的编译环境为:Visual c++6.0 程序源代码 #includestdio.h #includemath.h double A[10][10],rr[10][10],qq[10][10],rq[10][10],uk[10][10]; double xy[10],x[10]={0}; //反幂法中 double tzr[10]={0},tzi[10]={0}; //定义矩阵的特征值数组,r实部、i虚部 //对矩阵A进行初始化,赋值 void initA() { int i,j; for(i = 1; i = 10; i++) { for(j= 1; j= 10;j++) A[i-1][j-1]=sin(0.5*i+0.2*j); } for(i= 1; i= 10;i++) A[i- 1][i- 1]=cos(i+1.2*i)*1.5; } //定义函数对矩阵A进行拟上三角化 void nssj() { int r,i,j; int sgn(double a); double d,c,h,t,tr,u[10],p[10],q[10],w[10]; double sum=0,tmp=0; //开始循环 for (r=0;r8;r++) { t= 0; for(i= r+2;i10;i++) t= t+(A[i][r]==0); if (t==8- r) continue; else { sum=0; for (i=r+1;i10;i++) sum=sum+ A[i][r]*A[i][r]; d= sqrt(sum); c= -1*sgn(A[r+1][r])*d; h= c*c- c*A[r+1][r]; //step (3) for (i=0;i10;i++) u[i]= 0; for (i=r+2;i10;i++) u[i]= A[i][r]; u[r+1]= A[r+1][r]- c; //step (4) for(i= 0;i 10; i++) { tmp= 0; sum= 0; for(j= 0;j 10; j++) { tmp= tmp+A[j][i]* u[j]; sum= sum+A[i][j]* u[j]; } p[i]= tmp/h; q[i]= sum/h; } sum=0; for(i= 0;i 10; i++) sum= sum+ p[i]*u[i]; tr= sum/h; for(i= 0;i 10; i++) w[i]= q[i]- tr*u[i]; for(i= 0;i 10;i++) { for(j= 0;j 10;j++) { A

文档评论(0)

汪汪队 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档