logo资料库

数值分析第二次大作业.docx

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
数值分析 第二次大作业
2015-11-20 的全部特征值,并对其中的每一个实特征值求相应 第二题:试求矩阵 A [ a a ij ]ij 10*10  的特征向量。已知: sin(0.5 0.2 )( { 1.5cos( 1.2 )( i  i  j j i i   j j ) ) (i,j=1,2,……,10) 第一问:算法设计 (1) 矩阵 A 的拟三角化 为了减少计算量,一般先利用 Householder 矩阵对矩阵 A 作相似变换,把 A 化做拟上三角矩阵(Hessenberg 矩阵) ( A  n )1  ~[ a ji  ] 10  10 ,其中 ji  时 jia ~ 0 。 实际计算时不必具体形成矩阵 iH ,并可避免矩阵与矩阵相乘。对实矩阵 A 的拟 上三角化具体算法如下: 记 A )1( A , 并 记 )(rA 的 第 r 列 至 第 10 列 的 元 素 为 iar ()( ij 2,1 ,..., ;10 rrj ,   ,1 r  ,..., 2 )10 。 对于 2,1r 8 ,..., 执行: Step1: 若 ()( riar ir   ,2 r  ,..., 3 )10 全为零,则令 ( r A )1  r )( A ;则转 Step5; 否则转 Step2; Step2:计算 d r  n   ri r 2)( ) a ( ir 1 c r  sgn( a r )( ,1 rr ) d r (若 rra )( r  ,1  0 ,则取 c  ) r d r acch )( r  rrr ,1 2 r   r Step3:令 u r  Step4:计算 p r 0( ,..., ,0 a r )(  rr ,1 ,..., Tr )( a ) nr  n R Tr )( huA r / r q r r )( huA r / r t r   r T hup r / r r utq  rr r r ( A )1  )( r A  T puu rr rr  T Step5:继续。 当此算法执行完成后,就得到与原矩阵 A 相似的拟上三角矩阵 )1 ( nA 。
(2) 矩阵 A 的特征值求解 使用带双步位移的 QR 方法求实矩阵 A 全部特征值的具体算法如下: Step1:使用矩阵的拟上三角化的算法把矩阵 A 化为拟上三角矩阵 )1 ( nA ;给定 精度水平和迭代最大次数 M。 Step2:记 ( AA 1   n )1  [ )1( a ] nnij  ,令 k  ,1 nm 。  Step3:如果  转 Step4;否则转 Step5。 mma )( k , 1 ,则得到 A 的一个特征值 k mma ,置  mm :  1 (降阶), Step4:如果 m=1,则得到 A 的一个特征值 )( ka ,转 Step11;如果 m=0,则直接 11 转 Step11;如果 m>1,则转 Step3。 Step5:求二阶子阵 D k   k )( a   mm ,1  )( k a    , mm 1 1 k )( a  mm ,1 )( k a mm     的两个特征值 1s 和 2s ,即计算二次方 程 2   k )( ( a   mm ,1 1  )( k a mm  )  det D k  0 的两个根 1s 和 2s 。 Step6:如果 m=2,则得到 A 的两个特征值 1s 和 2s ,转 Step11;否则转 Step7。 Step7:如果 mma )( k  ,1  2 ,则得到 A 的两个特征值 1s 和 2s ,置  mm :  2 (降 阶),转 Step4;否则转 Step8。 mm  Step8:如果 k=L;则计算终止,未得到 A 的全部特征值;否则转 Step9。 Step9:记 ) mji ,计算 k a ij A k 1(    ,   )( k as   mm  ,1  k )( a mm 1 )( k at   mm  ,1 k )( a 1 mm  )( k aa  mm )( k  mm , ,1 1 M k  2 A k  sA k  tI M  k RQ kk k T k QAQ kk A 1 Step10:置 k:=k+1,转 Step3。 Step11:A 的全部特征值已计算完毕,停止计算。 在上述算法中,从 kM 的 QR 分解 M  RQ kk 到计算 k H  n 1  MHH k 1 2  R k , A  k 1  H  n 1  HHAHH 2 k 1 1 2 A 1 k QAQ kk T k ,实质上是  H  n 1 。 其 中 iH 是 Householder 矩阵,且 Q k  HH 2 1  H  n 1 ,参照 QR 分解法,可把 kM 的 QR 分解
与 1kA 的计算用下列算法实现: 记 B 1  M k    mmij )1( b  , B r   r )( b ij  mm  , C 1 kA 。 对于 r  2,1 ,..., m  1 执行 Step1:若 ribr ()( ir   ,1 r  ,..., 2 ) m 全为 0,则令 B 1 r B r , C 1 r C r , 转 Step5;否则转 Step2。 Step2:计算 d r  c r  m  r 2)( ) b ( ir ri  sgn( db r )( r ) rr (若 )( r rrb 0 ,则取 c  ) r d r )( r bcch rrr 2 r r    0( ,..., ,0 r )( b rr  c r ,..., r )( b mr )  m R 。 u r Step3:令 Step4:计算  r huB / r T r r B r 1 uB  T rr r p r  q r  t r   r huC r / T r r huC r rr / hup r / r T r utq  rr r C r  1 C r   T T puu rr rr  Step5:继续。 此算法执行完后,就得到 A 1 k C m ,所需的乘法运算次数只是 2m 级的 第二问:源代码(C) 1、 #include 2、 #include 3、 #include 4、 #define N 10 5、 #define E 1.0e-12 6、 #define MAX 10000
double q[N][N],r[N][N],qr[N][N]; void QR(double A[N][N],double Q[N][N],double R[N][N]); void EigenVaule(double A[N][N],double chaR[N],double chaI[N]); void EigenVector(double V[N][N],double T[N]); if (fabs(a[i][j])
51、 52、 53、 54、 55、 56、 57、 58、 59、 60、 61、 62、 63、 64、 65、 66、 67、 68、 69、 70、 71、 72、 73、 74、 75、 76、 77、 78、 79、 80、 81、 82、 83、 84、 85、 86、 87、 88、 89、 90、 91、 92、 93、 94、 printf("\n\n\n"); printf("拟上三角矩阵 A 的 QR 分解:\n"); printf("上三角矩阵 R:\n"); for(i=0;i
95、 96、 97、 98、 99、 100、 101、 102、 103、 104、 105、 106、 107、 108、 109、 110、 111、 112、 113、 114、 115、 116、 117、 118、 119、 120、 121、 122、 123、 124、 125、 126、 127、 128、 129、 130、 131、 132、 133、 134、 135、 136、 137、 138、 printf("\n"); } printf("\n"); for(i=0;i
printf("λ%2d =%.12e \n",j+1,chaR[j]); else if(chaI[j]>E) else printf("λ%2d =%.12e %19.11ei\n",j+1,chaR[j],chaI[j]); +%18.11ei\n",j+1,chaR[j],chaI[j]); } } if (i==5) { if(fabs(chaI[j])<=E) printf("λ%2d =%.12e } printf("\n\n\n"); for(i=0;i
分享到:
收藏