北航研可捣治鯝作业二.doc

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

题目要求: 试用带双步位移的QR分解法求矩阵的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知 说明: 1、求矩阵特征值时,要求迭代的精度水平为。 2、打印内容: 算法的设计方案。 全部源程序(要求注明主程序和每个子程序的功能)。 矩阵A经过拟上三角化后所得的矩阵。 对矩阵进行QR分解方法结束后所得的矩阵Q,R和RQ。 矩阵A的全部特征值,其中,如果是实数,则令。 A的相应于实特征值的特征向量。 3、采用e型输出数据,并且至少显示12位有效数字。 一、算法设计方案 1、输入需要求解的矩阵: 通过子程序getMatrix()生成需要的矩阵。 2、矩阵的拟上三角化: 为减少求解特征值和特征向量的计算量,在对矩阵进行QR分解前先进行拟上三角化。调用子程序void triangulation()。对a拟上三角化具体算法如下: 设,记,并记的第r列至第n列的元素为 ,对于执行: 当此算法执行完后,就得到与原矩阵相似的拟上三角矩阵。 3、输出R、Q、RQ,通过子程序void print()实现,其中使用了矩阵的QR分解,由子程序void qrDecomposition()完成。QR分解具体算法如下: 记,并记,令 对于执行: 4、带双步位移的QR方法求特征值,由子程序void qrAlgorithm()完成。具体算法如下: (1)化为拟上三角矩阵;给定精度水平和迭代最大型次数。 (2)记,令。 (3)如果,则得到的一个特征值,置(降阶),转(4);否则转(5)。 (4)如果,则得到的一个特征值,转(11);如果,则直接转(11);如果,则转(3)。 (5)求二阶子阵 的两个特征值和,即计算二次方程 的两个根和。 (6)如果,则得到的两个特征值和,转(11);否则转(7)。 (7)如果,则得到的两个特征值和,置(降阶),转(4);否则转(8)。 (8)如果,则计算终止,未得到的全部特征值;否则转(9)。 (9)记,计算 (10)置,转(3)。 (11)的全部特征值已计算完毕,停止计算。 5、使用列主元的高斯消去法求相应于实特征值的特征向量,由子程序void gaussianElimination()完成。具体算法如下: 根据特征值和特征向量的定义,设,是相应于特征值的特征向量,则有 , 即得 用列主元的高斯消去法解方程组则得特征向量。 设,有 用列主元的高斯消去法算法如下: 记, a.消元过程: 对执行 (1)选行号,使。 (2)交换与。 (3)对于,计算 b.回代过程: 此算法执行完后,就得到相应的特征向量. 二、全部源程序 // shuzhifenxi2.cpp : Defines the entry point for the console application. // #includestdio.h #includestdafx.h #includemath.h #define n 10 double precision=1.0e-12; double a[n][n]; struct Eigenvalue //特征值结构定义,r为实部,i为虚部 { double r; double i; }; Eigenvalue eigenvalue[n]; //生成矩阵A void getMatrix() { int i,j; for(i=0;in;i++) for(j=0;jn;j++) { if(i!=j) a[i][j]=sin(0.5*(i+1)+0.2*(j+1)); else a[i][j]=1.5*cos((i+1)+1.2*(j+1)); } } //设单位矩阵 void setUnitMatrix(double u[n][n]) { for(int i=0;in;i++) for(int j=0;jn;j++) { if(i==j) u[i][j]=1; else u[i][j]=0; } } //对a拟上三角化 void triangulation() { int i=0,j=0,r=0,z=0; double sum=0,c=0,h=0,t=0; double u[n],p[n],q[n],w[n],b[n][n],x[n][n],y[n][n]; for(r=0;rn-2;r++) { z=0; for(i=r+2;in;i++) if(a[i][r]==0) z++; if(z==0) //判断,若a[i][r]全为0,则进行下一个循环 { //构造cr sum=0; for(i=r+

文档评论(0)

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

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

1亿VIP精品文档

相关文档