PROGRAM D2R9 C Driver for routine SVDCMP PARAMETER(NP=20) DIMENSION A(NP,NP),U(NP,NP),W(NP),V(NP,NP) CHARACTER DUMMY*3 OPEN(5,FILE='MATRX3.DAT',STATUS='OLD') 10 READ(5,'(A)') DUMMY IF (DUMMY.EQ.'END') GOTO 99 READ(5,*) READ(5,*) M,N READ(5,*) C Copy original matrix into U DO 12 K=1,M READ(5,*) (A(K,L), L=1,N) DO 11 L=1,N U(K,L)=A(K,L) 11 CONTINUE 12 CONTINUE IF (N.GT.M) THEN DO 14 K=M+1,N DO 13 L=1,N A(K,L)=0.0 U(K,L)=0.0 13 CONTINUE 14 CONTINUE M=N ENDIF C Perform decomposition CALL SVDCMP(U,M,N,NP,NP,W,V) C Print results WRITE(*,*) 'Decomposition Matrices:' WRITE(*,*) 'Matrix U' DO 15 K=1,M WRITE(*,'(1X,6F12.6))') (U(K,L),L=1,N) 15 CONTINUE WRITE(*,*) 'Diagonal of Matrix W' WRITE(*,'(1X,6F12.6))') (W(K),K=1,N) WRITE(*,*) 'Matrix V-Transpose' DO 16 K=1,N WRITE(*,'(1X,6F12.6))') (V(L,K),L=1,N) 16 CONTINUE WRITE(*,*) 'Check product against original matrix:' WRITE(*,*) 'Original Matrix:' DO 17 K=1,M WRITE(*,'(1X,6F12.6))') (A(K,L),L=1,N) 17 CONTINUE WRITE(*,*) 'Product U*W*(V-Transpose):' DO 21 K=1,M DO 19 L=1,N A(K,L)=0.0 DO 18 J=1,N A(K,L)=A(K,L)+U(K,J)*W(J)*V(L,J) 18 CONTINUE 19 CONTINUE WRITE(*,'(1X,6F12.6))') (A(K,L),L=1,N) 21 CONTINUE WRITE(*,*) '***********************************' WRITE(*,*) 'Press RETURN for next problem' READ(*,*) GOTO 10 99 CLOSE(5) END