PROGRAM POWERMETHOD2
C=======================================================================
C THIS PROGRAM FINDS ALL EIGENVALUES AND VECTORS FOR A GIVEN [A]
C USING POWER METHOD.
C=======================================================================
IMPLICIT REAL*8 ( A-H , O-Z )
PARAMETER ( MXN=10, MXITERA=100 )
DIMENSION A(MXN,MXN), X(MXN),Y(MXN),EIGENVEC(MXN,MXN),EIGEN(MXN),
* B(MXN,MXN), AA(MXN,MXN)
C=======================================================================
EPS = 1.D-13
C=======================================================================
OPEN (1,FILE='POWER.OUT', STATUS='UNKNOWN')
C=======================================================================
C------ INITIALIZATION
N = 3
A(1,1) = 3.D0
A(1,2) = 2.D0
A(1,3) = 1.D0
A(2,1) = 2.D0
A(2,2) = 2.D0
A(2,3) = 1.D0
A(3,1) = 1.D0
A(3,2) = 1.D0
A(3,3) = 1.D0
WRITE (1,*) 'GIVEN MATRIX [A]'
DO I = 1 , N
WRITE (1,*) ( A(I,J),J = 1 , N )
END DO
C-------- SAVE [A]
DO I = 1 , N
DO J = 1 , N
AA(I,J) = A(I,J)
END DO
END DO
C
WRITE (1,'(16H MODE EIGENVALUE, 99(I2,1H)))') ( I,I=1,N)
C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DO MODE = 1 , N
C&&&&&&&&&&&&&&&&&&&&&&&&&&&&
IF ( MODE .GT. 1 ) THEN
DO I = 1 , N
DO J = 1 , N
A(I,J) = A(I,J) -
* EIGEN(MODE-1)*EIGENVEC(I,MODE-1)*EIGENVEC(J,MODE-1)
END DO
END DO
END IF
C
EIGEN(MODE) = 1.D0
DO I = 1 , N
X(I) = 0.D0
END DO
X(1) = 1.D0
WRITE (*,*) MODE,EIGEN(MODE), (X(I),I=1,N)
WRITE (1,*) MODE,EIGEN(MODE), (X(I),I=1,N)
DIFF = 1.D0
NITERA = 0
C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DO WHILE ( DIFF .GT. EPS .AND. NITERA .LE. MXITERA )
NITERA = NITERA + 1
C$$$$$$$$$$$$$$$$$$$$$$$$$$$$
C-------- COMPUTATION OF [A]{X}={Y}
DO I = 1 , N
SUM = 0.D0
DO J = 1 , N
SUM = SUM + A(I,J)*X(J)
END DO
Y(I) = SUM
END DO
C-------- COMPUTATION OF EIGENVALUE
SUM = 0.D0
DO I = 1 , N
SUM = SUM + Y(I)*Y(I)
END DO
EIGEN(MODE) = DSQRT(SUM)
C-------- COMPUTATION OF ERROR
DIFF = 0.D0
DO I = 1 , N
XNEW = Y(I) / EIGEN(MODE)
DIFF = DIFF + DABS( X(I) - XNEW )
X(I) = XNEW
END DO
DIFF = DIFF / N
C
WRITE (*,*) MODE, EIGEN(MODE), (X(I),I=1,N)
WRITE (1,*) MODE, EIGEN(MODE), (X(I),I=1,N)
C$$$$$$$$$$$$$$$$$$$$$$$$$$$$
END DO
C$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DO I = 1 , N
EIGENVEC(I,MODE) = X(I)
END DO
C&&&&&&&&&&&&&&&&&&&&&&&&&&&&
END DO
C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
C=======================================================================
WRITE (1,*) 'EIGEN VECTOR DOT PRODUCT'
WRITE (1,*) 'MODE-I MODE-J DOTPRODUCT'
DO I = 1 , N-1
DO J = I+1,N
DOTPRDCT = 0.D0
DO K = 1 , N
DOTPRDCT = DOTPRDCT + EIGENVEC(K,I)*EIGENVEC(K,J)
END DO
WRITE (1,*) I, J, DOTPRDCT
END DO
END DO
C=======================================================================
C------ REEVALUATION OF [A] USING EIGENVALUES AND EIGENVECTORS
WRITE(1,*) 'REFORMING [A] USING EIGENVALUES AND VECTORS'
DO I = 1 , N
DO J = 1 , N
B(I,J) = 0.D0
END DO
END DO
DO MODE = 1 , N
DO I = 1 , N
DO J = 1 , N
B(I,J) = B(I,J) + EIGEN(MODE)*EIGENVEC(I,MODE)*EIGENVEC(J,MODE)
END DO
END DO
END DO
DO I = 1 , N
WRITE (1,*) ( B(I,J),J = 1 , N )
END DO
C=======================================================================
C------- PRODUCT OF [A][U]
DO I = 1 , N
DO J = 1 , N
SUM = 0.D0
DO K = 1 , N
SUM = SUM + AA(I,K)*EIGENVEC(K,J)
END DO
B(I,J) = SUM
END DO
END DO
C------- PRODUCT OF [U]TRANSPOSE[A][U]
DO I = 1 , N
DO J = 1 , N
A(I,J) = 0.D0
END DO
END DO
DO I = 1 , N
DO J = 1 , N
DO K = 1 , N
A(I,J) = A(I,J) + EIGENVEC(K,I)*B(K,J)
END DO
END DO
END DO
WRITE (1,*) 'PRODUCT OF [U]TRANSPOSE[A][U]'
DO I = 1 , N
WRITE (1,*) ( A(I,J),J = 1 , N )
END DO
C=======================================================================
STOP 'NORMAL TERMINATION'
END