Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0026/nroot.ssp
There are 2 other files named nroot.ssp in the archive. Click here to see a list.
C                                                                       NROO  10
C     ..................................................................NROO  20
C                                                                       NROO  30
C        SUBROUTINE NROOT                                               NROO  40
C                                                                       NROO  50
C        PURPOSE                                                        NROO  60
C           COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL NONSYMMETRIC NROO  70
C           MATRIX OF THE FORM B-INVERSE TIMES A.  THIS SUBROUTINE IS   NROO  80
C           NORMALLY CALLED BY SUBROUTINE CANOR IN PERFORMING A         NROO  90
C           CANONICAL CORRELATION ANALYSIS.                             NROO 100
C                                                                       NROO 110
C        USAGE                                                          NROO 120
C           CALL NROOT (M,A,B,XL,X)                                     NROO 130
C                                                                       NROO 140
C        DESCRIPTION OF PARAMETERS                                      NROO 150
C           M  - ORDER OF SQUARE MATRICES A, B, AND X.                  NROO 160
C           A  - INPUT MATRIX (M X M).                                  NROO 170
C           B  - INPUT MATRIX (M X M).                                  NROO 180
C           XL - OUTPUT VECTOR OF LENGTH M CONTAINING EIGENVALUES OF    NROO 190
C                B-INVERSE TIMES A.                                     NROO 200
C           X  - OUTPUT MATRIX (M X M) CONTAINING EIGENVECTORS COLUMN-  NROO 210
C                WISE.                                                  NROO 220
C                                                                       NROO 230
C        REMARKS                                                        NROO 240
C           NONE                                                        NROO 250
C                                                                       NROO 260
C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED                  NROO 270
C           EIGEN                                                       NROO 280
C                                                                       NROO 290
C        METHOD                                                         NROO 300
C           REFER TO W. W. COOLEY AND P. R. LOHNES, 'MULTIVARIATE PRO-  NROO 310
C           CEDURES FOR THE BEHAVIORAL SCIENCES', JOHN WILEY AND SONS,  NROO 320
C           1962, CHAPTER 3.                                            NROO 330
C                                                                       NROO 340
C     ..................................................................NROO 350
C                                                                       NROO 360
      SUBROUTINE NROOT (M,A,B,XL,X)                                     NROO 370
      DIMENSION A(1),B(1),XL(1),X(1)                                    NROO 380
C                                                                       NROO 390
C        ...............................................................NROO 400
C                                                                       NROO 410
C        IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE  NROO 420
C        C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION      NROO 430
C        STATEMENT WHICH FOLLOWS.                                       NROO 440
C                                                                       NROO 450
C     DOUBLE PRECISION A,B,XL,X,SUMV                                    NROO 460
C                                                                       NROO 470
C        THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS    NROO 480
C        APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS      NROO 490
C        ROUTINE.                                                       NROO 500
C                                                                       NROO 510
C        THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO      NROO 520
C        CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT IN STATEMENTSNROO 530
C        110 AND 175 MUST BE CHANGED TO DSQRT.  ABS IN STATEMENT 110    NROO 540
C        MUST BE CHANGED TO DABS.                                       NROO 550
C                                                                       NROO 560
C        ...............................................................NROO 570
C                                                                       NROO 580
C     COMPUTE EIGENVALUES AND EIGENVECTORS OF B                         NROO 590
C                                                                       NROO 600
      K=1                                                               NROO 610
      DO 100 J=2,M                                                      NROO 620
      L=M*(J-1)                                                         NROO 630
      DO 100 I=1,J                                                      NROO 640
      L=L+1                                                             NROO 650
      K=K+1                                                             NROO 660
  100 B(K)=B(L)                                                         NROO 670
C                                                                       NROO 680
C        THE MATRIX B IS A REAL SYMMETRIC MATRIX.                       NROO 690
C                                                                       NROO 700
      MV=0                                                              NROO 710
      CALL EIGEN (B,X,M,MV)                                             NROO 720
C                                                                       NROO 730
C     FORM RECIPROCALS OF SQUARE ROOT OF EIGENVALUES.  THE RESULTS      NROO 740
C     ARE PREMULTIPLIED BY THE ASSOCIATED EIGENVECTORS.                 NROO 750
C                                                                       NROO 760
      L=0                                                               NROO 770
      DO 110 J=1,M                                                      NROO 780
      L=L+J                                                             NROO 790
  110 XL(J)=1.0/ SQRT( ABS(B(L)))                                       NROO 800
      K=0                                                               NROO 810
      DO 115 J=1,M                                                      NROO 820
      DO 115 I=1,M                                                      NROO 830
      K=K+1                                                             NROO 840
  115 B(K)=X(K)*XL(J)                                                   NROO 850
C                                                                       NROO 860
C     FORM (B**(-1/2))PRIME * A * (B**(-1/2))                           NROO 870
C                                                                       NROO 880
      DO 120 I=1,M                                                      NROO 890
      N2=0                                                              NROO 900
      DO 120 J=1,M                                                      NROO 910
      N1=M*(I-1)                                                        NROO 920
      L=M*(J-1)+I                                                       NROO 930
      X(L)=0.0                                                          NROO 940
      DO 120 K=1,M                                                      NROO 950
      N1=N1+1                                                           NROO 960
      N2=N2+1                                                           NROO 970
  120 X(L)=X(L)+B(N1)*A(N2)                                             NROO 980
      L=0                                                               NROO 990
      DO 130 J=1,M                                                      NROO1000
      DO 130 I=1,J                                                      NROO1010
      N1=I-M                                                            NROO1020
      N2=M*(J-1)                                                        NROO1030
      L=L+1                                                             NROO1040
      A(L)=0.0                                                          NROO1050
      DO 130 K=1,M                                                      NROO1060
      N1=N1+M                                                           NROO1070
      N2=N2+1                                                           NROO1080
  130 A(L)=A(L)+X(N1)*B(N2)                                             NROO1090
C                                                                       NROO1100
C     COMPUTE EIGENVALUES AND EIGENVECTORS OF A                         NROO1110
C                                                                       NROO1120
      CALL EIGEN (A,X,M,MV)                                             NROO1130
      L=0                                                               NROO1140
      DO 140 I=1,M                                                      NROO1150
      L=L+I                                                             NROO1160
  140 XL(I)=A(L)                                                        NROO1170
C                                                                       NROO1180
C     COMPUTE THE NORMALIZED EIGENVECTORS                               NROO1190
C                                                                       NROO1200
      DO 150 I=1,M                                                      NROO1210
      N2=0                                                              NROO1220
      DO 150 J=1,M                                                      NROO1230
      N1=I-M                                                            NROO1240
      L=M*(J-1)+I                                                       NROO1250
      A(L)=0.0                                                          NROO1260
      DO 150 K=1,M                                                      NROO1270
      N1=N1+M                                                           NROO1280
      N2=N2+1                                                           NROO1290
  150 A(L)=A(L)+B(N1)*X(N2)                                             NROO1300
      L=0                                                               NROO1310
      K=0                                                               NROO1320
      DO 180 J=1,M                                                      NROO1330
      SUMV=0.0                                                          NROO1340
      DO 170 I=1,M                                                      NROO1350
      L=L+1                                                             NROO1360
  170 SUMV=SUMV+A(L)*A(L)                                               NROO1370
  175 SUMV= SQRT(SUMV)                                                  NROO1380
      DO 180 I=1,M                                                      NROO1390
      K=K+1                                                             NROO1400
  180 X(K)=A(K)/SUMV                                                    NROO1410
      RETURN                                                            NROO1420
      END                                                               NROO1430