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;