数值分析大作业二.doc

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

数值分析大作业二 算法设计 矩阵的拟 记A(1)=A,并记A(r)的第r列到第n列的元素。 对于r=1,2,…,n-2执行 (1) 若全为零,则令A(r+1)= A(r),转(5);否则转(2)。 (2) 计算 (3) 令 (4) 计算 (5) 继续 算法执行完后,就得到与原矩阵A相似的拟上三角矩阵A(n-1)。 2、矩阵QR分解的算法如下: 记A1=A,并记,令Q1=I(n阶单位矩阵) 对于r=1,2,…,n-1执行 若全为零,则令Qr+1= Qr,Ar+1= Ar转(5);否则转(2)。 计算 (若,则取) 令 计算 继续 当此算法执行完后就得到正交矩阵Q=Qn和上三角矩阵R=An且有A=QR。 3、带双步位移的QR方法求实矩阵全部特征值的具体算法如下: (1) 使用矩阵的拟上三角化的算法把矩阵化为拟上三角矩阵;给定精度水平和迭化最大次数L。 (2) 记,令。 (3) 如果,则得到A的一个特征值,置m:= m-1(降阶),转(4);否则转(5)。 (4) 如果m=1,则得到A的一个特征值,转(11);如果,则直接转(11);如果m>1转(3)。 (5) 求二阶子阵 的两个特征值s1和s2,即计算二次方程 的两个根s1和s2 (6) 如果m=2则得到A的两个特征值s1和s2,转(11);否则转(7)。 (7) 如果,则得到A的两个特征值s1和s2,置m:= m-2 (降阶),转(4);否则转(8)。 (8) 如果k=L,则计算终止,未得到A的全部特征值;否则转(9)。 (9) 记,计算 (10) 置k:= k+1,转(3)。 (11) A的全部特征值已计算完毕,停止计算。 4、程序的算法设计如下: 输入需要求解的矩阵A: 首先输入需要求解的矩阵。根据公式生成原始矩阵,即为用下述程序中的void matrixA()子程序来实现。 对生成的矩阵A进行拟上三角化: 为了减少求特征值和特征向量过程中的计算量,对生成的矩阵A进行进行拟上三角化,得到拟上三角化矩阵A(n-1)。在下述程序中用void hess()子程序来实现。 对拟上三角化后的矩阵A(n-1)进行QR分解: 为了直观的了解普通的QR分解过程及结果,下述程序中用void AQR()子程序来对拟上三角化过后的A(n-1)阵进行QR分解,并输出Q阵,R阵和RQ阵。 对拟上三角化后的矩阵进行带双步位移的QR分解: 利用子程序int doubleQR ()和void MKQR ()实现对拟上三角化后的A阵进行带双步位移的QR分解,利用子程序void equation()求解二次方程,得出全部特征值并输出,并用子程序void Gauss()和void Vector()对其中的实数特征值进行求解,得出对应的特征向量并输出。 输出相关结果。 二、源程序 #include stdio.h #include math.h #define n 10 #define L 50 #define eps 1e-12 void matrixA(double a[][n]); void hess(double a[][n],double a_n1[][n]); void MKQR(int m, double Mk[][n], double Ak[][n]); void AQR(double a_n1[][n], double q[n][n],double r[n][n],double rq[n][n]); void Gauss(double a1[][n],double x[][n],double Lamda[][2],int p); void equation(double s,double t,double s1[2],double s2[2]); int doubleQR(double A_n1[][n], double lamda[n][2], FILE *pFile); void Vector(double A[n][n], double x[][n], double lamda[n][2], FILE *pFile); void main() { int i,j,flag = 0; double a[n][n],a_n1[n][n],lamda[n][2],q[n][n],r[n][n],rq[n][n]; double x[n][n]; FILE *pFile; pFile=fopen(result.txt,wt); fprintf(pFile,用带双步位移的QR分解法求解矩阵特征值及特征向量\n); fprintf(pFile,*******************************************

文档评论(0)

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

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

1亿VIP精品文档

相关文档