Previous: rt Up: ../eispad.html Next: tinvit
SUBROUTINE SVD(NM,M,N,A,W,MATU,U,MATV,V,IERR,RV1) C INTEGER I,J,K,L,M,N,II,I1,KK,K1,LL,L1,MN,NM,ITS,IERR DOUBLE PRECISION A(NM,N),W(N),U(NM,N),V(NM,N),RV1(N) DOUBLE PRECISION C,F,G,H,S,X,Y,Z,TST1,TST2,SCALE,PYTHAG LOGICAL MATU,MATV C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE SVD, C NUM. MATH. 14, 403-420(1970) BY GOLUB AND REINSCH. C HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 134-151(1971). C C THIS SUBROUTINE DETERMINES THE SINGULAR VALUE DECOMPOSITION C T C A=USV OF A REAL M BY N RECTANGULAR MATRIX. HOUSEHOLDER C BIDIAGONALIZATION AND A VARIANT OF THE QR ALGORITHM ARE USED. C C ON INPUT C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT. NOTE THAT NM MUST BE AT LEAST C AS LARGE AS THE MAXIMUM OF M AND N. C C M IS THE NUMBER OF ROWS OF A (AND U). C C N IS THE NUMBER OF COLUMNS OF A (AND U) AND THE ORDER OF V. C C A CONTAINS THE RECTANGULAR INPUT MATRIX TO BE DECOMPOSED. C C MATU SHOULD BE SET TO .TRUE. IF THE U MATRIX IN THE C DECOMPOSITION IS DESIRED, AND TO .FALSE. OTHERWISE. C C MATV SHOULD BE SET TO .TRUE. IF THE V MATRIX IN THE C DECOMPOSITION IS DESIRED, AND TO .FALSE. OTHERWISE. C C ON OUTPUT C C A IS UNALTERED (UNLESS OVERWRITTEN BY U OR V). C C W CONTAINS THE N (NON-NEGATIVE) SINGULAR VALUES OF A (THE C DIAGONAL ELEMENTS OF S). THEY ARE UNORDERED. IF AN C ERROR EXIT IS MADE, THE SINGULAR VALUES SHOULD BE CORRECT C FOR INDICES IERR+1,IERR+2,...,N. C C U CONTAINS THE MATRIX U (ORTHOGONAL COLUMN VECTORS) OF THE C DECOMPOSITION IF MATU HAS BEEN SET TO .TRUE. OTHERWISE C U IS USED AS A TEMPORARY ARRAY. U MAY COINCIDE WITH A. C IF AN ERROR EXIT IS MADE, THE COLUMNS OF U CORRESPONDING C TO INDICES OF CORRECT SINGULAR VALUES SHOULD BE CORRECT. C C V CONTAINS THE MATRIX V (ORTHOGONAL) OF THE DECOMPOSITION IF C MATV HAS BEEN SET TO .TRUE. OTHERWISE V IS NOT REFERENCED. C V MAY ALSO COINCIDE WITH A IF U IS NOT NEEDED. IF AN ERROR C EXIT IS MADE, THE COLUMNS OF V CORRESPONDING TO INDICES OF C CORRECT SINGULAR VALUES SHOULD BE CORRECT. C C IERR IS SET TO C ZERO FOR NORMAL RETURN, C K IF THE K-TH SINGULAR VALUE HAS NOT BEEN C DETERMINED AFTER 30 ITERATIONS. C C RV1 IS A TEMPORARY STORAGE ARRAY. C C CALLS PYTHAG FOR DSQRT(A*A + B*B) . C C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, C MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY C C THIS VERSION DATED AUGUST 1983. C C ------------------------------------------------------------------ C