北航数值分析实习第二题.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析计算实习报告 第二题 所在班级 A1 班 学生姓名 学生学号 2015年11月 北航数值分析计算实习报告 第 PAGE \* MERGEFORMAT 16 页 算法设计方案 矩阵的输入 A矩阵是一个10乘10的矩阵,同时并没有对称性,所以不能压缩,直接存储即可。 对矩阵进行上三角化 A矩阵的上三角化采用常规方法即可,得到。 QR分解法 对上三角化后的矩阵进行QR分解可以减少计算量。 RQ这个矩阵是与原矩阵A相似的矩阵,与A具有相同的特征值和特征向量。 求解特征值 采用带双步位移的QR分解法对求解特征值即可。 求解实特征值的特征向量 求解特征向量,本质上就是求解方程 的解,其中I是单位向量。直接采用列主元素Gauss消去法求解即可。但是,值得注意的是,对应于一个特征值的特征向量是无穷多的,也就是经过Gauss消去法后,最后一行全是0。因此,求解时候,需要给特征向量某个元素赋值,本题,将最后一个元素统一赋值为1,即可求出对应于某个特征值的特征向量的基础解系,而全部特征向量为,k取不等于0的任意实数。 C++程序 #includestdio.h #includemath.h #includestdlib.h #includetime.h #define n 11 #define err 1e-12 #define L 2500 void caculateA();//计算矩阵A的系数 void hessenberg();//将A拟上三角化 void QR();//对矩阵进行QR分解 void QRshuangbu();//对矩阵进行带双步位移的QR分解 void gauss();//列主元的高斯消元法求解特征向量 int i,j,s,p,k,ik,nR,nC; double A[n][n],q[n][n],r[n][n],rq[n][n],I[n][n]; double P[n],W[n],u[n],Q[n]; double dr,cr,hr,ar,tr; double s1,t,x,tzR[n],tzC[2][n],sum,M[n][n],v[n]; void main() {for(i=1;in;i++) {for(j=1;jn;j++) {if (i==j) {I[i][j]=1;q[i][j]=1;} else {I[i][j]=0;q[i][j]=0;}}} caculateA(); hessenberg(); QR(); QRshuangbu(); gauss(); printf(运行时间为%d\n, clock()); } void caculateA()//计算矩阵A的系数 { for(i=1;in;i++) {for(j=1;jn;j++) {if(j!=i) A[i][j]=sin(0.5*i+0.2*j); else A[i][j]=1.52*cos(i+1.2*j);} } } void hessenberg()//将A拟上三角化 { for(s=1;sn-2;s++) {for(ar=0.0,i=s+2;in;i++) ar+=A[i][s]*A[i][s]; if(ar=err) continue; else { ar+=A[s+1][s]*A[s+1][s]; dr=sqrt(ar); if(A[s+1][s]0) cr=-dr; else cr=dr; hr=cr*cr-cr*A[s+1][s]; for(i=1;i=s;i++) u[i]=0.0; u[s+1]=A[s+1][s]-cr; for(i=s+2;in;i++) u[i]=A[i][s]; for(j=1;jn;j++) {for(P[j]=0.0,i=1;in;i++) P[j]+=A[i][j]*u[i]/hr;} for(tr=0.0,i=1;in;i++) {tr+=P[i]*u[i]/hr;} for(i=1;in;i++) {for(Q[i]=0.0,j=1;jn;j++) Q[i]+=A[i][j]*u[j]/hr;} for(i=1;in;i++) {W[i]=Q[i]-tr*u[i];} for(i=1;in;i++)

文档评论(0)

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

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

1亿VIP精品文档

相关文档