home *** CD-ROM | disk | FTP | other *** search
-
- FUNCTION DECOMPOSE ( VAR MATRIX : REAL_MATRIX;
- VAR PVT_VECTOR : INT_VECTOR;
- N : INTEGER ) : BOOLEAN;
-
- { BASED ON SUBROUTINE DECOMP BY CLEVE B. MOLER,DEPT. OF MATHEMATICS,
- THE UNIVERSITY OF MICHIGAN,ANN ARBOR,MI 48104.
-
- REFERENCES : 1 : ALGORITHM 423 OF COLLECTED ALG. OF CACM.
- 2 : MOLER,C.B. Matrix Computations with Fortran and paging.
- Comm.ACM 15 (Apr.1972),268-270.
- 3 : FORSYTHE,G.E.;MALCOLM,M.A.;and MOLER,C.B. Computer
- Methods for Mathematical Computations.
- Prentice-Hall,Inc. Englewood Cliffs,N.J.
- 1977
-
- TRANSLATED TO PASCAL/Z BY G.M.ACLAND,UNIV. OF PENNSYLVANIA. }
-
- VAR INDEX1,INDEX2,INDEX3,PIVOT,FIRST : INTEGER;
- BIGGEST,TEMP : REAL;
-
- BEGIN
- DECOMPOSE := SUCCESSFUL;
- FOR INDEX1 := 1 TO (N-1) DO BEGIN
- BIGGEST := 0.0;
- FOR INDEX2 := INDEX1 TO N DO BEGIN
- IF (ABS(MATRIX[INDEX2,INDEX1]) > BIGGEST) THEN BEGIN
- PIVOT := INDEX2;
- BIGGEST := ABS(MATRIX[INDEX2,INDEX1]);
- END; { OF : IF (ABS(MATRIX[.... }
- END; { OF : INDEX2 LOOP }
- IF BIGGEST = 0.0 THEN DECOMPOSE := NOT SUCCESSFUL
- ELSE BEGIN
- PVT_VECTOR[INDEX1] := PIVOT;
- TEMP := MATRIX[PIVOT,INDEX1];
- IF PIVOT <> INDEX1 THEN BEGIN
- MATRIX[PIVOT,INDEX1] := MATRIX[INDEX1,INDEX1];
- MATRIX[INDEX1,INDEX1] := TEMP;
- TEMP := 1.0/TEMP;
- END; { OF : IF PIVOT <> ... }
- FIRST := INDEX1 + 1;
- FOR INDEX2 := FIRST TO N DO BEGIN
- MATRIX[INDEX2,INDEX1] := -1.0 * MATRIX[INDEX2,INDEX1] * TEMP;
- END; { OF INDEX2 LOOP }
- FOR INDEX2 := FIRST TO N DO BEGIN
- TEMP := MATRIX[PIVOT,INDEX2];
- IF (PIVOT <> INDEX1) THEN BEGIN
- MATRIX[PIVOT,INDEX2] := MATRIX[INDEX1,INDEX2];
- MATRIX[INDEX1,INDEX2] := TEMP;
- END; { OF : IF PIVOT... }
- IF (TEMP <> 0) THEN BEGIN
- FOR INDEX3 := FIRST TO N DO BEGIN
- MATRIX[INDEX3,INDEX2] := MATRIX[INDEX3,INDEX2] +
- (MATRIX[INDEX3,INDEX1] * TEMP);
- END; { OF : FOR INDEX3 LOOP }
- END; { OF : IF TEMP <> 0 ... }
- END; { OF : INDEX2 LOOP }
- END; { OF : IF BIGGEST..ELSE.. }
- IF MATRIX[N,N] = 0 THEN DECOMPOSE := NOT SUCCESSFUL;
- END; { OF : INDEX1 LOOP }
- END; { OF : FUNCTION DECOMPOSE }
-
-