北航数值分析大作业第二题(fortran)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北航数值分析大作业第二题(f o r t r a n)

-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

“数值分析“计算实习大作业第二题

——SY1415215

孔维鹏一、计算说明

本程序采用带双步位移的QR方法求解矩阵A的所有特征值,然后采用反幂法求解矩阵A的实特征值对应的特征向量。

在采用带双步位移的QR方法求解特征值时,对教材上所提供的具体算法作稍微的改动,以简化程序,具体算法如下所示:

1、计算出A拟上三角化后的矩阵,给定精度水平和最大迭代次数L;

2、记,令k=1,m=n;

3、如果,则可直接计算出最后1或2个特征值,转8,否则转4;

4、如果,则可得一个特征值,置m=m-1;转3,否则转5;

5、如果,则可得两个特征值,置m=m-2;转3,否则转6;

6、记,计算

7、k=k+1,转3

8、A的全部特征值已经求出,停止计算。

二、计算源程序(FORTRAN)

PROGRAM SY1415215_2

PARAMETER (N=10)

DIMENSION A(N,N),A1(N,N),A2(N,N),C(2,N),Q(N,N),R(N,N),CR(N),CM(N)!C为存储特征值的数组,1为实部,为虚部

REAL(8) A,A1,A2,C,Q,R,CM

E=1E-12 !精度水平

L=1000 !迭代最大次数

OPEN(1,FILE='数值分析大作业第二题计算结果.TXT')

DO I=1,N

DO J=1,N

IF(I==J) THEN

A(I,J)=*COS(I+*J)

ELSE

A(I,J)=SIN*I+*J)

ENDIF

ENDDO

ENDDO

A1=A

WRITE(*,"('矩阵A为:')")

WRITE(1,"('矩阵A为:')")

DO I=1,N

DO J=1,N

WRITE(*,"(2X,,2X,\)") A(I,J)

WRITE(1,"(2X,,2X,\)") A(I,J)

ENDDO

WRITE(*,"(' ')")

WRITE(1,"(' ')")

ENDDO

!使用矩阵的拟上三角化的算法将矩阵A化为拟上三角矩阵A(n-1)CALL HESSENBERG(A,N)

WRITE(*,"('拟上三角化后矩阵A(n-1)为:')")

WRITE(1,"('拟上三角化后矩阵A(n-1)为:')")

DO I=1,N

DO J=1,N

WRITE(*,"(2X,,2X,\)") A(I,J)

WRITE(1,"(2X,,2X,\)") A(I,J)

ENDDO

WRITE(*,"('')")

WRITE(1,"('')")

ENDDO

!计算对矩阵A(n-1)实行QR方法迭代结束后所得矩阵

A2=A

CALL QRD(A2,N,Q,R)

WRITE(*,"('对矩阵A(n-1)实行QR方法迭代结束后所得Q为:')") WRITE(1,"('对矩阵A(n-1)实行QR方法迭代结束后所得Q为:')") DO I=1,N

DO J=1,N

WRITE(*,"(2X,,2X,\)") Q(I,J)

WRITE(1,"(2X,,2X,\)") Q(I,J)

ENDDO

WRITE(*,"('')")

WRITE(1,"('')")

ENDDO

WRITE(*,"('对矩阵A(n-1)实行QR方法迭代结束后所得R为:')") WRITE(1,"('对矩阵A(n-1)实行QR方法迭代结束后所得R为:')") DO I=1,N

DO J=1,N

WRITE(*,"(2X,,2X,\)") R(I,J)

WRITE(1,"(2X,,2X,\)") R(I,J)

ENDDO

WRITE(*,"('')")

WRITE(1,"('')")

ENDDO

!使用带双步位移的QR方法求解矩阵A(n-1)的特征值

K=1

M=N

DO WHILE(K<=L)

IF(M<=2) THEN

IF(M==1) THEN

C(1,M)=A(M,M)

ELSE IF(M==2) THEN

CALL CALCUS(A,N,M,C)

ENDIF

EXIT

ELSE IF(ABS(A(M,M-1))

C(1,M)=A(M,M)

M=M-1

ELSE IF(ABS(A(M-1,M-2))

CALL CALCUS(A,N,M,C)

M=M-2

ELSE

CALL CALM(A,M,N)

ENDIF

K=K+1

ENDDO

WRITE(*,"('矩阵A的全部特征值为:')")

WRITE(1,"('矩阵A的全部特征值为:')")

DO J=1,N

WRITE(*,",'+',,'i')") C(1,J),C(2,J)

WRITE(1,",'+',,'i')") C(1,J),C(2,J)

ENDDO

!使用反幂法求解A的相应于实特征值的特征向量J=1

DO I=1,N

IF(C(2,I)==0)THEN

CR(J)=C(1,I)

J=J+1

ENDIF

ENDDO

JC=J-1

WRITE(*,"('矩阵A的实特征值为:')")

相关文档
最新文档