File: NROOT.FT of Tape: Various/ETH/eth11-1
(Source file text)
C .................................................................. C C SUBROUTINE NROOT C C PURPOSE C COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL NONSYMMETRIC C MATRIX OF THE FORM B-INVERSE TIMES A. THIS SUBROUTINE IS C NORMALLY CALLED BY SUBROUTINE CANOR IN PERFORMING A C CANONICAL CORRELATION ANALYSIS. C C USAGE C CALL NROOT (M,A,B,XL,X) C C DESCRIPTION OF PARAMETERS C M - ORDER OF SQUARE MATRICES A, B, AND X. C A - INPUT MATRIX (M X M). C B - INPUT MATRIX (M X M). C XL - OUTPUT VECTOR OF LENGTH M CONTAINING EIGENVALUES OF C B-INVERSE TIMES A. C X - OUTPUT MATRIX (M X M) CONTAINING EIGENVECTORS COLUMN- C WISE. C C REMARKS C NONE C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C EIGEN C C METHOD C REFER TO W. W. COOLEY AND P. R. LOHNES, 'MULTIVARIATE PRO- C CEDURES FOR THE BEHAVIORAL SCIENCES', JOHN WILEY AND SONS, C 1962, CHAPTER 3. C C .................................................................. C SUBROUTINE NROOT (M,A,B,XL,X) DIMENSION A(1),B(1),XL(1),X(1) C C ............................................................... C C IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE C C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION C STATEMENT WHICH FOLLOWS. C C DOUBLE PRECISION A,B,XL,X,SUMV C C THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS C APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS C ROUTINE. C C THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO C CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS. SQRT IN STATEMENTS C 110 AND 175 MUST BE CHANGED TO DSQRT. ABS IN STATEMENT 110 C MUST BE CHANGED TO DABS. C C ............................................................... C C COMPUTE EIGENVALUES AND EIGENVECTORS OF B C K=1 DO 100 J=2,M L=M*(J-1) DO 100 I=1,J L=L+1 K=K+1 100 B(K)=B(L) C C THE MATRIX B IS A REAL SYMMETRIC MATRIX. C MV=0 CALL EIGEN (B,X,M,MV) C C FORM RECIPROCALS OF SQUARE ROOT OF EIGENVALUES. THE RESULTS C ARE PREMULTIPLIED BY THE ASSOCIATED EIGENVECTORS. C L=0 DO 110 J=1,M L=L+J 110 XL(J)=1.0/ SQRT( ABS(B(L))) K=0 DO 115 J=1,M DO 115 I=1,M K=K+1 115 B(K)=X(K)*XL(J) C C FORM (B**(-1/2))PRIME * A * (B**(-1/2)) C DO 120 I=1,M N2=0 DO 120 J=1,M N1=M*(I-1) L=M*(J-1)+I X(L)=0.0 DO 120 K=1,M N1=N1+1 N2=N2+1 120 X(L)=X(L)+B(N1)*A(N2) L=0 DO 130 J=1,M DO 130 I=1,J N1=I-M N2=M*(J-1) L=L+1 A(L)=0.0 DO 130 K=1,M N1=N1+M N2=N2+1 130 A(L)=A(L)+X(N1)*B(N2) C C COMPUTE EIGENVALUES AND EIGENVECTORS OF A C CALL EIGEN (A,X,M,MV) L=0 DO 140 I=1,M L=L+I 140 XL(I)=A(L) C C COMPUTE THE NORMALIZED EIGENVECTORS C DO 150 I=1,M N2=0 DO 150 J=1,M N1=I-M L=M*(J-1)+I A(L)=0.0 DO 150 K=1,M N1=N1+M N2=N2+1 150 A(L)=A(L)+B(N1)*X(N2) L=0 K=0 DO 180 J=1,M SUMV=0.0 DO 170 I=1,M L=L+1 170 SUMV=SUMV+A(L)*A(L) 175 SUMV= SQRT(SUMV) DO 180 I=1,M K=K+1 180 X(K)=A(K)/SUMV RETURN END C