NUMAL Section 3.1.1.1.1.1.2
BEGIN SECTION : 3.1.1.1.1.1.2 (May, 1974)
AUTHOR: J. C. P. BUS.
CONTRIBUTOR: J.C.P. BUS AND P. A. BEENTJES.
INSTITUTE: MATHEMATICAL CENTRE.
RECEIVED: 730831.
BRIEF DESCRIPTION:
THIS SECTION CONTAINS A PROCEDURE FOR CALCULATING THE
DETERMINANT OF A TRIANGULARLY DECOMPOSED MATRIX;
KEYWORDS:
DETERMINANT.
CALLING SEQUENCE:
THE HEADING OF THIS PROCEDURE IS:
"REAL" "PROCEDURE" DETERM(A, N, SIGN); "VALUE" N, SIGN;
"INTEGER" N, SIGN; "ARRAY" A;
"CODE" 34303;
DETERM: DELIVERS THE CALCULATED VALUE OF THE DETERMINANT OF THE
MATRIX;
THE MEANING OF THE FORMAL PARAMETERS IS:
A: <ARRAY IDENTIFIER>;
"ARRAY" A[1:N, 1:N];
ENTRY: THE DIAGONAL ELEMENTS OF THE
LOWER-TRIANGULAR MATRIX L, OBTAINED BY TRIANGULAR
DECOMPOSITION OF THE MATRIX, HAVE TO BE GIVEN IN
A[I,I], I= 1, ..., N;
N: <ARITHMETIC EXPRESSION>;
THE ORDER OF THE MATRIX, WHOSE DETERMINANT HAS TO BE
CALCULATED;
SIGN: <ARITHMETIC EXPRESSION>;
ENTRY: IF THE DETERMINANT OF THE MATRIX IS POSITIVE THEN
THE VALUE OF SIGN SHOULD BE +1, ELSE -1; THIS VALUE
IS DELIVERED BY GSSELM OR DEC IN AUX[1], (SECTION
3.1.1.1.1.1.1).
PROCEDURES USED: NONE.
RUNNING TIME: PROPORTIONAL TO N.
LANGUAGE: ALGOL 60.
METHOD AND PERFORMANCE:
A LOWER-TRIANGULAR MATRIX L HAS TO BE
GIVEN, SUCH THAT FOR SOME UNIT UPPER-TRIANGULAR MATRIX U THE
PRODUCT LU EQUALS THE MATRIX (WITH PERMUTED ROWS AND COLUMNS);
THE SIGN OF THE DETERMINANT ALSO HAS TO BE GIVEN; THESE DATA ARE
DELIVERED IN THE MATRIX AND AUX[1] BY THE PROCEDURES GSSELM OR DEC
(SECTION 3.1.1.1.1.1.1) AND THE PROCEDURES GSSERB, GSSNRI (SECTION
3.1.1.1.1.1.1), DECSOL, GSSSOL, GSSSOLERB (SECTION 3.1.1.1.1.1.3),
GSSITISOL AND GSSITISOLERB (SECTION 3.1.1.1.1.1.5), WHICH MAKE USE
OF GSSELM OR DEC.
THE CALCULATION OF THE DETERMINANT IS DONE STRAIGHT ON BY
CALCULATING THE PRODUCT OF THE DIAGONAL ELEMENTS OF THE
LOWER-TRIANGULAR MATRIX GIVEN IN ARRAY A; THE USER IS WARNED, THAT
OVERFLOW MAY OCCUR IF THE ORDER OF THE MATRIX IS LARGE.
EXAMPLE OF USE:
THE DETERMINANT OF THE FOURTH ORDER SEGMENT OF THE HILBERT MATRIX
MAY BE OBTAINED BY THE FOLLOWING PROGRAM:
"BEGIN" "INTEGER" I, J; "REAL" D; "INTEGER" "ARRAY" RI, CI[1:4];
"ARRAY" A[1:4, 1:4], AUX[1:7];
"FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
"FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO" A[I, J]:= 1 / (I + J - 1);
AUX[2]:= "-14; AUX[4]:= 8;
GSSELM(A, 4, AUX, RI, CI);
D:= "IF" AUX[3] = 4 "THEN" DETERM(A, 4, AUX[1]) "ELSE" 0;
OUTPUT(71, "(""("DETERMINANT =")"B+.15D"+3D")", D)
"END"
RESULT:
DETERMINANT = +.165343915345370"-006
SOURCE TEXT(S):
"CODE" 34303;