NUMAL Section 3.1.1.1.1.2.4

BEGIN SECTION : 3.1.1.1.1.2.4 (May, 1974)

AUTHOR   : T.J. DEKKER.

CONTRIBUTORS: S.P.N. VAN KAMPEN, J. KOK.

INSTITUTE: MATHEMATICAL CENTRE.

RECEIVED: 731015.

BRIEF DESCRIPTION:

    THIS SECTION CONTAINS FOUR PROCEDURES:
    A) CHLINV2, FOR THE INVERSION OF A SYMMETRIC POSITIVE DEFINITE
    MATRIX, IF THE MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE
    PROCEDURE CHLDEC2, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL2,
    SECTION 3.1.1.1.1.2.3.;
    B) CHLINV1, FOR THE INVERSION OF A SYMMETRIC POSITIVE DEFINITE
    MATRIX, IF THE MATRIX HAS BEEN DECOMPOSED BY A CALL OF THE
    PROCEDURE CHLDEC1, SECTION 3.1.1.1.1.2.1., OR CHLDECSOL1,
    SECTION 3.1.1.1.1.2.3.;
    C) CHLDECINV2, FOR THE INVERSION OF A MATRIX BY CHOLESKY'S SQUARE
    ROOT METHOD;
    THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND
    MUST BE GIVEN IN THE UPPER TRIANGLE OF A TWO-DIMENSIONAL ARRAY;
    D) CHLDECINV1, FOR THE INVERSION OF A MATRIX BY CHOLESKY'S SQUARE
    ROOT METHOD;
    THE COEFFICIENT MATRIX HAS TO BE SYMMETRIC POSITIVE DEFINITE AND
    MUST BE GIVEN COLUMNWISE IN A ONE-DIMENSIONAL ARRAY.

KEYWORDS:

    MATRIX INVERSION,
    POSITIVE DEFINITE SYMMETRIC MATRIX,
    CHOLESKY DECOMPOSITION.


SUBSECTION: CHLINV2.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE IS:
    "PROCEDURE" CHLINV2(A, N); "VALUE" N; "INTEGER" N; "ARRAY" A;
    "CODE" 34400;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[1:N,1:N];
            ENTRY: THE  UPPER-TRIANGULAR PART OF THE  CHOLESKY MATRIX
                   AS PRODUCED  BY CHLDEC2, SECTION  3.1.1.1.1.2.1., OR
                   CHLDECSOL2,  SECTION  3.1.1.1.1.2.3., MUST  BE GIVEN
                   IN THE UPPER TRIANGLE OF A;
            EXIT:  THE  UPPER-TRIANGULAR PART  OF THE INVERSE MATRIX IS
                   DELIVERED IN THE UPPER TRIANGLE OF A;
    N:      <ARITHMETIC EXPRESSION>;
            THE ORDER OF THE MATRIX.

PROCEDURES USED:

    MATVEC    = CP34011,
    TAMVEC    = CP34012,
    DUPVECROW = CP31031.

REQUIRED CENTRAL MEMORY:

    EXECUTION FIELD LENGTH: N.

RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED.

LANGUAGE: ALGOL 60.

METHOD AND PERFORMANCE:

    THE PROCEDURE CHLINV2 CALCULATES THE INVERSE OF A MATRIX, PROVIDED
    THAT THE MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC2
    OR CHLDECSOL2;
    THE INVERSE, X, OF U'U, WHERE U IS THE CHOLESKY MATRIX,
    IS OBTAINED FROM THE CONDITIONS THAT X BE SYMMETRIC AND UX BE
    A LOWER-TRIANGULAR MATRIX WHOSE MAIN DIAGONAL ELEMENTS ARE THE
    RECIPROCALS OF THE DIAGONAL ELEMENTS OF U. HEREWITH THE UPPER-
    TRIANGULAR ELEMENTS OF X ARE CALCULATED BY BACK SUBSTITUTION.
    THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER
    TRIANGLE OF THE GIVEN ARRAY. SEE ALSO REF[1].

REFERENCES:

    [1]. T.J. DEKKER.
         ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1.
         MC TRACT 22, 1968, MATH. CENTR., AMSTERDAM.

EXAMPLE OF USE:

    THE SYMMETRIC POSITIVE DEFINITE  COEFFICIENT MATRIX  (THE  PASCAL
    MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS
        X1 +     X2 +      X3 +      X4 =  2
        X1 + 2 * X2 +  3 * X3 +  4 * X4 =  4
        X1 + 3 * X2 +  6 * X3 + 10 * X4 =  8
        X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16
    IS STORED IN THE TWO-DIMENSIONAL ARRAY PASCAL2.
    THE  INVERSE OF  THE COEFFICIENT MATRIX  AND THE  SOLUTION  OF  THE
    LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM:

    "BEGIN" "COMMENT" TEST CHLDEC2, CHLSOL2 AND CHLINV2;
        "INTEGER" I, J;
        "ARRAY" PASCAL2[1:4,1:4], B[1:4], AUX[2:3];
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL2[1,J]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL2[I,J]:= "IF" I = J "THEN" PASCAL2[I-1,J] * 2 "ELSE"
                           PASCAL2[I,J-1] + PASCAL2[I-1,J];
            B[J]:= 2 ** J
        "END";
        AUX[2]:= "-11;
        CHLDEC2(PASCAL2, 4, AUX);
        "IF" AUX[3] = 4 "THEN"
        "BEGIN" CHLSOL2(PASCAL2, 4, B); CHLINV2(PASCAL2, 4) "END"
        "ELSE" OUTPUT(61, "(""("MATRIX NOT POSITIVE DEFINITE")", /")");
        OUTPUT(61, "("4B")");
        OUTPUT(61, "(""("SOLUTION WITH CHLDEC2 AND CHLSOL2:")", /")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        OUTPUT(61, "("4B+D.5D")", B[I]);
        OUTPUT(61, "("//, 4B")");
        OUTPUT(61, "(""("INVERSE MATRIX WITH CHLINV2:")", /, 4B")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
            "IF" J < I "THEN" OUTPUT(61, "("12B")") "ELSE"
            OUTPUT(61, "("+ZD.5D3B")", PASCAL2[I,J]);
            OUTPUT(61, "("/, 4B")")
        "END"
    "END"

    THIS PROGRAM DELIVERS:

    SOLUTION WITH CHLDEC2 AND CHLSOL2:
    +0.00000    +4.00000    -4.00000    +2.00000

    INVERSE MATRIX WITH CHLINV2:
     +4.00000    -6.00000    +4.00000    -1.00000
                +14.00000   -11.00000    +3.00000
                            +10.00000    -3.00000
                                         +1.00000


SUBSECTION: CHLINV1.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE IS:
    "PROCEDURE" CHLINV1(A, N); "VALUE" N; "INTEGER" N; "ARRAY" A;
    "CODE" 34401;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[1:(N + 1) * N // 2];
            ENTRY: THE  UPPER-TRIANGULAR PART OF THE CHOLESKY  MATRIX
                   AS PRODUCED  BY CHLDEC1, SECTION  3.1.1.1.1.2.1., OR
                   CHLDECSOL1,  SECTION  3.1.1.1.1.2.3., MUST  BE GIVEN
                   COLUMNWISE IN ARRAY A;
            EXIT:  THE  UPPER-TRIANGULAR  PART OF THE INVERSE MATRIX IS
                   DELIVERED COLUMNWISE IN ARRAY A;
    N:      <ARITHMETIC EXPRESSION>;
            THE ORDER OF THE MATRIX.

PROCEDURES USED:

    SEQVEC    = CP34016,
    SYMMATVEC = CP34018.

REQUIRED CENTRAL MEMORY:

    EXECUTION FIELD LENGTH: N.

RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED.

LANGUAGE: ALGOL 60.

METHOD AND PERFORMANCE:

    THE PROCEDURE CHLINV1 CALCULATES THE INVERSE OF A MATRIX, PROVIDED
    THAT THE MATRIX HAS BEEN DECOMPOSED BY A SUCCESSFUL CALL OF CHLDEC1
    OR CHLDECSOL1;
    THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE
    IN THE ONE-DIMENSIONAL ARRAY.
    SEE ALSO METHOD AND PERFORMANCE OF CHLINV2 (THIS SECTION).

EXAMPLE OF USE:

    THE SYMMETRIC POSITIVE DEFINITE  COEFFICIENT MATRIX  (THE  PASCAL
    MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS
        X1 +     X2 +      X3 +      X4 =  2
        X1 + 2 * X2 +  3 * X3 +  4 * X4 =  4
        X1 + 3 * X2 +  6 * X3 + 10 * X4 =  8
        X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16
    IS STORED IN THE ONE-DIMENSIONAL ARRAY PASCAL1.
    THE  INVERSE OF  THE  COEFFICIENT MATRIX  AND THE  SOLUTION OF  THE
    LINEAR SYSTEM ARE CALCULATED BY THE FOLLOWING PROGRAM:

    "BEGIN" "COMMENT" TEST CHLDEC1, CHLSOL1 AND CHLINV1;
        "INTEGER" I, J, JJ;
        "ARRAY" PASCAL1[1:(4 + 1) * 4 // 2], B[1:4], AUX[2:3];

        JJ:= 1;
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL1[JJ]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL1[JJ + I - 1]:= "IF" I = J "THEN"
            PASCAL1[JJ + I - 2] * 2 "ELSE"
            PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J];
            B[J]:= 2 ** J;
            JJ:= JJ + J
        "END";

        AUX[2]:= "-11;
        CHLDEC1(PASCAL1, 4, AUX);
        "IF" AUX[3] = 4 "THEN"
        "BEGIN" CHLSOL1(PASCAL1, 4, B); CHLINV1(PASCAL1, 4) "END"
        "ELSE" OUTPUT(61, "(""("MATRIX NOT POSITIVE DEFINITE")", /")");

        OUTPUT(61,"("4B")");
        OUTPUT(61, "(""("SOLUTION WITH CHLDEC1 AND CHLSOL1:")", /")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        OUTPUT(61, "("4B+D.5D")", B[I]);
        OUTPUT(61, "("2/, 4B")");
        OUTPUT(61, "(""("INVERSE MATRIX WITH CHLINV1:")", /, 4B")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
            "IF" J < I "THEN" OUTPUT(61, "("12B")") "ELSE"
            OUTPUT(61, "("+ZD.5D3B")", PASCAL1[(J - 1) * J // 2 + I]);
            OUTPUT(61, "("/, 4B")")
        "END"
    "END"

    THIS PROGRAM DELIVERS:

    SOLUTION WITH CHLDEC1 AND CHLSOL1:
    +0.00000    +4.00000    -4.00000    +2.00000

    INVERSE MATRIX WITH CHLINV1:
     +4.00000    -6.00000    +4.00000    -1.00000
                +14.00000   -11.00000    +3.00000
                            +10.00000    -3.00000
                                         +1.00000


SUBSECTION: CHLDECINV2.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE IS:
    "PROCEDURE" CHLDECINV2(A, N, AUX); "VALUE" N; "INTEGER" N;
    "ARRAY" A, AUX;
    "CODE" 34402;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[1:N,1:N];
            ENTRY: THE UPPER  TRIANGLE OF THE  POSITIVE DEFINITE MATRIX
                   MUST  BE  GIVEN  IN  THE  UPPER TRIANGLE  OF  A (THE
                   ELEMENTS A[I,J], I <= J);
            EXIT:  THE  UPPER-TRIANGULAR  PART OF THE INVERSE MATRIX IS
                   DELIVERED IN THE UPPER TRIANGLE OF A.
    N:      <ARITHMETIC EXPRESSION>;
            THE ORDER OF THE MATRIX;
    AUX:    <ARRAY IDENTIFIER>;
            "ARRAY" AUX[2:3];
            ENTRY: AUX[2]: A  RELATIVE TOLERANCE  USED TO  CONTROL  THE
                   CALCULATION OF THE DIAGONAL ELEMENTS;
            NORMAL EXIT:   AUX[3]:= N;
            ABNORMAL EXIT: IF THE  DECOMPOSITION CANNOT BE  CARRIED OUT
                   BECAUSE  THE  MATRIX  IS (NUMERICALLY) NOT  POSITIVE
                   DEFINITE,  AUX[3]:= K - 1, WHERE K IS THE LAST STAGE
                   NUMBER.

PROCEDURES USED:

    CHLDEC2 = CP34310,
    CHLINV2 = CP34400.

RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED.

LANGUAGE: ALGOL 60.

METHOD AND PERFORMANCE:

    THE PROCEDURE CHLDECINV2 CALCULATES THE INVERSE OF A SYMMETRIC
    POSITIVE DEFINITE MATRIX BY CALLING CHLDEC2 AND, IF THIS CALL WAS
    SUCCESSFUL, CHLINV2.
    THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED IN THE UPPER
    TRIANGLE OF THE GIVEN ARRAY.
    SEE ALSO METHOD AND PERFORMANCE OF CHLINV2 (THIS SECTION) AND
    CHLDEC2, SECTION 3.1.1.1.1.2.1.

EXAMPLE OF USE:

    THE SYMMETRIC POSITIVE DEFINITE  COEFFICIENT MATRIX  (THE  PASCAL
    MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS

        X1 +     X2 +      X3 +      X4 =  2
        X1 + 2 * X2 +  3 * X3 +  4 * X4 =  4
        X1 + 3 * X2 +  6 * X3 + 10 * X4 =  8
        X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16

    IS STORED IN THE TWO-DIMENSIONAL ARRAY PASCAL2.
    THE DETERMINANT AND  THE INVERSE OF THE COEFFICIENT MATRIX  AND THE
    SOLUTION  OF THE  LINEAR SYSTEM ARE  CALCULATED  BY  THE  FOLLOWING
    PROGRAM:

    "BEGIN" "COMMENT" TEST CHLDECSOL2, CHLDETERM2 AND CHLDECINV2;
        "INTEGER" I, J;
        "ARRAY" PASCAL2[1:4,1:4], B[1:4], AUX[2:3];
        "REAL" DETERMINANT;
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL2[1,J]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL2[I,J]:= "IF" I = J "THEN" PASCAL2[I-1,J] * 2 "ELSE"
                           PASCAL2[I,J-1] + PASCAL2[I-1,J];
            B[J]:= 2 ** J
        "END";
        AUX[2]:= "-11;
        CHLDECSOL2(PASCAL2, 4, AUX, B);
        "IF" AUX[3] = 4 "THEN" DETERMINANT:= CHLDETERM2(PASCAL2, 4)
        "ELSE" OUTPUT(61, "(""("MATRIX NOT POSITIVE DEFINITE")", /")");
        OUTPUT(61, "("4B")");
        OUTPUT(61, "(""("SOLUTION WITH CHLDECSOL2:")", /")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        OUTPUT(61, "("4B+D.5D")", B[I]);
        OUTPUT(61, "("//, 4B, "("DETERMINANT WITH CHLDETERM2: ")",
                   +D.5D, 2/, 4B")", DETERMINANT);
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL2[1,J]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL2[I,J]:= "IF" I = J "THEN" PASCAL2[I-1,J] * 2 "ELSE"
                           PASCAL2[I,J-1] + PASCAL2[I-1,J]
        "END";
        CHLDECINV2(PASCAL2, 4, AUX);
        OUTPUT(61, "(""("INVERSE MATRIX WITH CHLDECINV2:")", /, 4B")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
            "IF" J < I "THEN" OUTPUT(61, "("12B")") "ELSE"
            OUTPUT(61, "("+ZD.5D3B")", PASCAL2[I,J]);
            OUTPUT(61, "("/, 4B")")
        "END"
    "END"

    THIS PROGRAM DELIVERS:

    SOLUTION WITH CHLDECSOL2:
    +0.00000    +4.00000    -4.00000    +2.00000

    DETERMINANT WITH CHLDETERM2: +1.00000

    INVERSE MATRIX WITH CHLDECINV2:
     +4.00000    -6.00000    +4.00000    -1.00000
                +14.00000   -11.00000    +3.00000
                            +10.00000    -3.00000
                                         +1.00000


SUBSECTION: CHLDECINV1.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE IS:
    "PROCEDURE" CHLDECINV1(A, N, AUX); "VALUE" N; "INTEGER" N;
    "ARRAY" A, AUX;
    "CODE" 34403;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[1:(N + 1) * N // 2];
             ENTRY: THE UPPER-TRIANGULAR PART OF THE SYMMETRIC POSITIVE
                   DEFINITE MATRIX  MUST BE GIVEN COLUMNWISE IN ARRAY A
                   (THE (I,J)-TH ELEMENT OF THE MATRIX MUST BE GIVEN IN
                   A[(J - 1) * J // 2 + I] FOR 1 <= I <= J <= N);
            EXIT:  THE  UPPER-TRIANGULAR  PART OF THE INVERSE MATRIX IS
                   DELIVERED COLUMNWISE IN ARRAY A;
    N:      <ARITHMETIC EXPRESSION>;
            THE ORDER OF THE MATRIX;
    AUX:    <ARRAY IDENTIFIER>;
            "ARRAY" AUX[2:3];
            ENTRY: AUX[2]: A  RELATIVE TOLERANCE  USED TO  CONTROL  THE
                   CALCULATION OF THE DIAGONAL ELEMENTS; (SEE METHOD
                   AND PERFORMANCE OF CHLDEC2, SECTION 3.1.1.1.1.2.1);
            NORMAL EXIT:   AUX[3]:= N;
            ABNORMAL EXIT: IF THE  DECOMPOSITION CANNOT BE  CARRIED OUT
                   BECAUSE  THE  MATRIX  IS (NUMERICALLY) NOT  POSITIVE
                   DEFINITE,  AUX[3]:= K - 1, WHERE K IS THE LAST STAGE
                   NUMBER.

PROCEDURES USED:

    CHLDEC1 = CP34311,
    CHLINV1 = CP34401.

RUNNING TIME: ROUGHLY PROPORTIONAL TO N CUBED.

LANGUAGE: ALGOL 60.

METHOD AND PERFORMANCE:

    THE PROCEDURE CHLDECINV1 CALCULATES THE INVERSE OF A SYMMETRIC
    POSITIVE DEFINITE MATRIX BY CALLING CHLDEC1 AND, IF THIS CALL WAS
    SUCCESSFUL, CHLINV1.
    THE UPPER TRIANGLE OF THE INVERSE MATRIX IS DELIVERED COLUMNWISE IN
    THE GIVEN ONE-DIMENSIONAL ARRAY.
    SEE ALSO METHOD AND PERFORMANCE OF CHLINV2, (THIS SECTION) AND
    CHLDEC1, SECTION 3.1.1.1.1.2.1.

EXAMPLE OF USE:

    THE SYMMETRIC POSITIVE DEFINITE  COEFFICIENT MATRIX  (THE  PASCAL
    MATRIX OF ORDER 4) OF THE SYSTEM OF EQUATIONS

        X1 +     X2 +      X3 +      X4 =  2
        X1 + 2 * X2 +  3 * X3 +  4 * X4 =  4
        X1 + 3 * X2 +  6 * X3 + 10 * X4 =  8
        X1 + 4 * X2 + 10 * X3 + 20 * X4 = 16

    IS STORED IN THE ONE-DIMENSIONAL ARRAY PASCAL1.
    THE DETERMINANT AND  THE INVERSE OF THE COEFFICIENT MATRIX  AND THE
    SOLUTION  OF THE  LINEAR SYSTEM ARE  CALCULATED  BY  THE  FOLLOWING
    PROGRAM:

    "BEGIN" "COMMENT" TEST CHLDECSOL1, CHLDETERM1 AND CHLDECINV1;
        "INTEGER" I, J, JJ;
        "ARRAY" PASCAL1[1:(4 + 1) * 4 // 2], B[1:4], AUX[2:3];
        "REAL" DETERMINANT;

        JJ:= 1;
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL1[JJ]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL1[JJ + I - 1]:= "IF" I = J "THEN"
            PASCAL1[JJ + I - 2] * 2 "ELSE"
            PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J];
            B[J]:= 2 ** J;
            JJ:= JJ + J
        "END";

        AUX[2]:= "-11;
        CHLDECSOL1(PASCAL1, 4, AUX, B);
        "IF" AUX[3] = 4 "THEN" DETERMINANT:= CHLDETERM1(PASCAL1, 4)
        "ELSE" OUTPUT(61, "(""("MATRIX NOT POSITIVE DEFINITE")", /")");

        OUTPUT(61, "("4B")");
        OUTPUT(61, "(""("SOLUTION WITH CHLDECSOL1:")", /")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        OUTPUT(61, "("4B+D.5D")", B[I]);
        OUTPUT(61, "("//, 4B, "("DETERMINANT WITH CHLDETERM1: ")",
                   +D.5D, 2/, 4B")", DETERMINANT);

        JJ:= 1;
        "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" PASCAL1[JJ]:= 1;
            "FOR" I:= 2 "STEP" 1 "UNTIL" J "DO"
            PASCAL1[JJ + I - 1]:= "IF" I = J "THEN"
            PASCAL1[JJ + I - 2] * 2 "ELSE"
            PASCAL1[JJ + I - 2] + PASCAL1[JJ + I - J];
            JJ:= JJ + J
        "END";

        CHLDECINV1(PASCAL1, 4, AUX);

        OUTPUT(61, "(""("INVERSE MATRIX WITH CHLDECINV1:")", /, 4B")");
        "FOR" I:= 1 "STEP" 1 "UNTIL" 4 "DO"
        "BEGIN" "FOR" J:= 1 "STEP" 1 "UNTIL" 4 "DO"
            "IF" J < I "THEN" OUTPUT(61, "("12B")") "ELSE"
            OUTPUT(61, "("+ZD.5D3B")", PASCAL1[(J - 1) * J // 2 + I]);
            OUTPUT(61, "("/, 4B")")
        "END"
    "END"

    THIS PROGRAM DELIVERS:

    SOLUTION WITH CHLDECSOL1:
    +0.00000    +4.00000    -4.00000    +2.00000

    DETERMINANT WITH CHLDETERM1: +1.00000

    INVERSE MATRIX WITH CHLDECINV1:
     +4.00000    -6.00000    +4.00000    -1.00000
                +14.00000   -11.00000    +3.00000
                            +10.00000    -3.00000
                                         +1.00000

SOURCE TEXT(S) :

"CODE" 34400;

"CODE" 34401;
"CODE" 34402;

"CODE" 34403;