home *** CD-ROM | disk | FTP | other *** search
- C PROG3 PR300100
- C C.L.LAWSON AND R.J.HANSON, JET PROPULSION LABORATORY, 1973 JUN 12 PR300200
- C TO APPEAR IN 'SOLVING LEAST SQUARES PROBLEMS', PRENTICE-HALL, 1974PR300300
- C DEMONSTRATE THE USE OF SUBROUTINE SVDRS TO COMPUTE THE PR300400
- C SINGULAR VALUE DECOMPOSITION OF A MATRIX, A, AND SOLVE A LEAST PR300500
- C SQUARES PROBLEM, A*X=B. PR300600
- C PR300700
- C THE S.V.D. A= U*(S,0)**T*V**T IS PR300800
- C COMPUTED SO THAT.. PR300900
- C (1) U**T*B REPLACES THE M+1 ST. COL. OF B. PR301000
- C PR301100
- C (2) U**T REPLACES THE M BY M IDENTITY IN PR301200
- C THE FIRST M COLS. OF B. PR301300
- C PR301400
- C (3) V REPLACES THE FIRST N ROWS AND COLS. PR301500
- C OF A. PR301600
- C PR301700
- C (4) THE DIAGONAL ENTRIES OF THE S MATRIX PR301800
- C REPLACE THE FIRST N ENTRIES OF THE ARRAY S. PR301900
- C PR302000
- C THE ARRAY S( ) MUST BE DIMENSIONED AT LEAST 3*N . PR302100
- C PR302200
- DIMENSION A(8,8),B(8,9),S(24),X(8),AA(8,8) PR302300
- REAL GEN,ANOISE PR302400
- DOUBLE PRECISION SM PR302500
- DATA MDA,MDB/8,8/ PR302600
- C PR302700
- DO 150 NOISE=1,2 PR302800
- ANOISE = 0. PR302900
- RHO = 1.E-3 PR303000
- IF(NOISE .EQ. 1) GO TO 5 PR303100
- ANOISE = 1.E-4 PR303200
- RHO = 10. * ANOISE PR303300
- 5 CONTINUE PR303400
- WRITE(6,230) PR303500
- WRITE(6,240) ANOISE,RHO PR303600
- C INITIALIZE DATA GENERATION FUNCTION PR303700
- C .. PR303800
- DUMMY= GEN(-1.) PR303900
- C PR304000
- DO 150 MN1=1,6,5 PR304100
- MN2=MN1+2 PR304200
- DO 150 M=MN1,MN2 PR304300
- DO 150 N=MN1,MN2 PR304400
- WRITE (6,160) M,N PR304500
- DO 20 I=1,M PR304600
- DO 10 J=1,M PR304700
- 10 B(I,J)=0. PR304800
- B(I,I)=1. PR304900
- DO 20 J=1,N PR305000
- A(I,J)= GEN(ANOISE) PR305100
- 20 AA(I,J)=A(I,J) PR305200
- DO 30 I=1,M PR305300
- 30 B(I,M+1)= GEN(ANOISE) PR305400
- C PR305500
- C THE ARRAYS ARE NOW FILLED IN.. PR305600
- C COMPUTE THE S.V.D. PR305700
- C ****************************************************** PR305800
- CALL SVDRS (A,MDA,M,N,B,MDB,M+1,S) PR305900
- C ****************************************************** PR306000
- C PR306100
- WRITE (6,170) PR306200
- WRITE (6,220) (I,S(I),I=1,N) PR306300
- WRITE (6,180) PR306400
- WRITE (6,220) (I,B(I,M+1),I=1,M) PR306500
- C PR306600
- C TEST FOR DISPARITY OF RATIO OF SINGULAR VALUES. PR306700
- C .. PR306800
- KRANK=N PR306900
- TAU=RHO*S(1) PR307000
- DO 40 I=1,N PR307100
- IF (S(I).LE.TAU) GO TO 50 PR307200
- 40 CONTINUE PR307300
- GO TO 55 PR307400
- 50 KRANK=I-1 PR307500
- 55 WRITE(6,250) TAU, KRANK PR307600
- C COMPUTE SOLUTION VECTOR ASSUMING PSEUDORANK IS KRANK PR307700
- C .. PR307800
- 60 DO 70 I=1,KRANK PR307900
- 70 B(I,M+1)=B(I,M+1)/S(I) PR308000
- DO 90 I=1,N PR308100
- SM=0.D0 PR308200
- DO 80 J=1,KRANK PR308300
- 80 SM=SM+A(I,J)*DBLE(B(J,M+1)) PR308400
- 90 X(I)=SM PR308500
- C COMPUTE PREDICTED NORM OF RESIDUAL VECTOR. PR308600
- C .. PR308700
- SRSMSQ=0. PR308800
- IF (KRANK.EQ.M) GO TO 110 PR308900
- KP1=KRANK+1 PR309000
- DO 100 I=KP1,M PR309100
- 100 SRSMSQ=SRSMSQ+B(I,M+1)**2 PR309200
- SRSMSQ=SQRT(SRSMSQ) PR309300
- C PR309400
- 110 CONTINUE PR309500
- WRITE (6,190) PR309600
- WRITE (6,220) (I,X(I),I=1,N) PR309700
- WRITE (6,200) SRSMSQ PR309800
- C COMPUTE THE FROBENIUS NORM OF A**T- V*(S,0)*U**T. PR309900
- C PR310000
- C COMPUTE V*S FIRST. PR310100
- C PR310200
- MINMN=MIN0(M,N) PR310250
- DO 120 J=1,MINMN PR310300
- DO 120 I=1,N PR310400
- 120 A(I,J)=A(I,J)*S(J) PR310500
- DN=0. PR310600
- DO 140 J=1,M PR310700
- DO 140 I=1,N PR310800
- SM=0.D0 PR310900
- DO 130 L=1,MINMN PR311000
- 130 SM=SM+A(I,L)*DBLE(B(L,J)) PR311100
- C COMPUTED DIFFERENCE OF (I,J) TH ENTRY PR311200
- C OF A**T-V*(S,0)*U**T. PR311300
- C .. PR311400
- T=AA(J,I)-SM PR311500
- 140 DN=DN+T**2 PR311600
- DN=SQRT(DN)/(SQRT(FLOAT(N))*S(1)) PR311700
- WRITE (6,210) DN PR311800
- 150 CONTINUE PR311900
- STOP PR312000
- 160 FORMAT (1H0////9H0 M N/1X,2I4) PR312100
- 170 FORMAT (1H0,8X,25HSINGULAR VALUES OF MATRIX) PR312200
- 180 FORMAT (1H0,8X,30HTRANSFORMED RIGHT SIDE, U**T*B) PR312300
- 190 FORMAT (1H0,8X,33HESTIMATED PARAMETERS, X=A**(+)*B,21H COMPUTED BPR312400
- 1Y 'SVDRS' ) PR312500
- 200 FORMAT (1H0,8X,24HRESIDUAL VECTOR LENGTH =,E12.4) PR312600
- 210 FORMAT (1H0,8X,43HFROBENIUS NORM (A-U*(S,0)**T*V**T)/(SQRT(N), PR312700
- *22H*SPECTRAL NORM OF A) =,E12.4) PR312800
- 220 FORMAT (9X,I5,E16.8,I5,E16.8,I5,E16.8,I5,E16.8,I5,E16.8) PR312900
- 230 FORMAT(51H1PROG3. THIS PROGRAM DEMONSTRATES THE ALGORITHM, PR313000
- * 9H, SVDRS. ) PR313100
- 240 FORMAT(55H0THE RELATIVE NOISE LEVEL OF THE GENERATED DATA WILL BE,PR313200
- *E16.4/44H0THE RELATIVE TOLERANCE, RHO, FOR PSEUDORANK, PR313300
- *17H DETERMINATION IS,E16.4) PR313400
- 250 FORMAT(1H0,8X,36HABSOLUTE PSEUDORANK TOLERANCE, TAU =, PR313500
- *E12.4,10X,12HPSEUDORANK =,I5) PR313600
- END PR313700