PROGRAM POWERMET
PARAMETER (N=3)
REAL::A(10,10),X(5)
OPEN(1,'INPUT.DAT')
OPEN(2,'OUTPUT.DAT')
READ(1,*)((A(I,J),J=1,N),I=1,N)
READ(1,*)(X(I),I=1,N)
READ(1,*)TOL
CALL POWER(A,X,N,TOL)
CLOSE(1)
CLOSE(2)
END PROGRAM
SUBROUTINE POWER(A,X,N,TOL)
REAL::A(10,10),X(5),Y(5),Z(5),W(5),L1,L2
K=0
WRITE(2,11)
11 FORMAT(10X,'ITE',16X,'EIGENVECTOR',20X,'EIGENVALUE')
WRITE(2,*)K,(X(I),I=1,N)
10 DO I=1,N
W(I)=X(I)
Y(I)=0
DO J=1,N
Y(I)=Y(I)+A(I,J)*X(J)
END DO
END DO
K=K+1
L1=ABS(Y(1))
DO I=1,N
IF(L1
DO I=1,N
X(I)=Y(I)/L1
Z(I)=X(I)-W(I)
END DO
WRITE(2,*)K,(X(I),I=1,N),L1
WRITE(2,*)K,(X(I),I=1,N),L1
WRITE(2,*)K,(X(I),I=1,N),L1
L2=ABS(Z(1))
DO I=1,N
IF(L2.LT.ABS(Z(I))) L2=ABS(Z(I))
END DO
IF(L2.GT.TOL) GO TO 10
END SUBROUTINE
You need to input a 3X3 matrix, an initial approximation and desired tolerance level. To input a higher order matrix, change the PARAMETER value.
No comments:
Post a Comment