Saturday, February 06, 2010

Fortran Program For Power Method

The FORTRAN code is following.     
       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.LT.ABS(Y(I))) L1=ABS(Y(I))
     END DO
      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