NUMAL Section 1.1.4.2

BEGIN SECTION : 1.1.4.2 (December, 1979)

AUTHOR : D.WINTER.

INSTITUTE : MATHEMATICAL CENTRE.

RECEIVED : 741215.

BRIEF DESCRIPTION :

    THIS SECTION CONTAINS FIVE PROCEDURES :
    FULMATVEC CALCULATES THE VECTOR A * B, WHERE A IS A GIVEN MATRIX
    AND B IS A VECTOR.
    FULTAMVEC CALCULATES THE VECTOR A' * B, WHERE A' IS THE TRANSPOSED
    OF THE MATRIX A AND B IS A VECTOR.
    FULSYMMATVEC CALCULATES THE VECTOR A * B, WHERE A IS A SYMMETRIC
    MATRIX WHOSE UPPERTRIANGLE IS STORED COLUMNWISE IN A
    ONE-DIMENSIONAL ARRAY AND B IS A VECTOR.
    RESVEC CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS A
    GIVEN MATRIX, B AND C ARE VECTORS AND X IS A SCALAR.
    SYMRESVEC CALCULATES THE RESIDUAL VECTOR A * B + X * C, WHERE A IS
    A SYMMETRIC MATRIX WHOSE UPPERTRIANGLE IS STORED IN A
    ONE-DIMENSIONAL ARRAY, B AND C ARE VECTORS AND X IS A SCALAR.

KEYWORDS :

    ELEMENTARY PROCEDURE,
    VECTOR OPERATION.


SUBSECTION: FULMATVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "PROCEDURE" FULMATVEC(LR, UR, LC, UC, A, B, C);
    "VALUE" LR, UR, LC, UC; "INTEGER" LR, UR, LC, UC;
    "ARRAY" A, B, C;
    "CODE" 31500;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    LR, UR: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE ROW-INDEX;
    LC, UC: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE COLUMN-INDEX;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[LR:UR,LC:UC]; THE MATRIX;
    B:      <ARRAY IDENTIFIER>;
            "ARRAY" B[LC:UC]; THE VECTOR;
    C:      <ARRAY IDENTIFIER>;
            "ARRAY" C[LR:UR];
            THE RESULT A * B IS DELIVERED IN C.

LANGUAGE:   COMPASS 3.
    (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE
    BEEN SPECIFIED "VALUE".)

METHOD AND PERFORMANCE: SEE REFERENCE [1].


SUBSECTION: FULTAMVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "PROCEDURE" FULTAMVEC(LR, UR, LC, UC, A, B, C);
    "VALUE" LR, UR, LC, UC; "INTEGER" LR, UR, LC, UC;
    "ARRAY" A, B, C;
    "CODE" 31501;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    LR, UR: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE ROW-INDEX;
    LC, UC: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE COLUMN-INDEX;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[LR:UR,LC:UC]; THE MATRIX;
    B:      <ARRAY IDENTIFIER>;
           "ARRAY" B[LR:UR]; THE VECTOR;
    C:      <ARRAY IDENTIFIER>;
            "ARRAY" C[LC:UC];
            THE RESULT A' * B IS DELIVERED IN C; HERE A' DENOTES THE
            TRANSPOSED OF THE MATRIX A.

LANGUAGE:   COMPASS 3.
    (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE
    BEEN SPECIFIED "VALUE".)

METHOD AND PERFORMANCE: ELEMENTARY.


SUBSECTION: FULSYMMATVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "PROCEDURE" FULSYMMATVEC(LR, UR, LC, UC, A, B, C);
    "VALUE" LR, UR, LC, UC, B; "INTEGER" LR, UR, LC, UC;
    "ARRAY" A, B, C;
    "CODE" 31502;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    LR, UR: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1;
    LC, UC: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[L:U], WHERE:
            L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR),
            U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR)
            AND FOR I <= J THE (I,J)-TH ELEMENT, OTHERWISE THE
            (J,I)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE
            GIVEN IN A[J * (J - 1) // 2 + I];
    B:      <ARRAY IDENTIFIER>;
            "ARRAY" B[LC:UC]; THE VECTOR;
    C:      <ARRAY IDENTIFIER>;
            "ARRAY" C[LR:UR];
            THE RESULT A * B IS DELIVERED IN C.

PROCEDURES USED:

    SYMMATVEC = CP34018.

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

    ELEMENTARY.


SUBSECTION: RESVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "PROCEDURE" RESVEC(LR, UR, LC, UC, A, B, C, X);
    "VALUE" LR, UR, LC, UC, X; "INTEGER" LR, UR, LC, UC;
    "REAL" X; "ARRAY" A, B, C;
    "CODE" 31503;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    LR, UR: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE ROW-INDEX;
    LC, UC: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE COLUMN-INDEX;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[LR:UR,LC:UC]; THE MATRIX;
    B:      <ARRAY IDENTIFIER>;
            "ARRAY" B[LC:UC]; THE VECTOR;
    X:      <ARITHMETIC EXPRESSION>;
            THE VALUE OF THE MULTIPLYING SCALAR;
    C:      <ARRAY IDENTIFIER>;
            "ARRAY" C[LR:UR];
            THE RESULT A * B + X * C IS OVERWRITTEN ON C.

LANGUAGE:   COMPASS 3.
    (FOR THE COMPASS-VERSION, THE PARAMETER B CAN BE ASSUMED TO HAVE
    BEEN SPECIFIED "VALUE".)

METHOD AND PERFORMANCE:

    ELEMENTARY.


SUBSECTION: SYMRESVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "PROCEDURE" SYMRESVEC(LR, UR, LC, UC, A, B, C, X);
    "VALUE" LR, UR, LC, UC, B, X; "INTEGER" LR, UR, LC, UC;
    "REAL" X; "ARRAY" A, B, C;
    "CODE" 31504;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    LR, UR: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE ROW-INDEX; LR >= 1;
    LC, UC: <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE COLUMN-INDEX; LC >= 1;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[L:U], WHERE:
            L = MIN(LR * (LR - 1) // 2 + LC, LC * (LC - 1) // 2 + LR),
            U = MAX(UR * (UR - 1) // 2 + UC, UC * (UC - 1) // 2 + UR)
            AND THE (I,J)-TH ELEMENT OF THE SYMMETRIC MATRIX SHOULD BE
            GIVEN IN A[J * (J - 1) // 2 + I];
    B:      <ARRAY IDENTIFIER>;
            "ARRAY" B[LC:UC]; THE VECTOR;
    X:      <ARITHMETIC EXPRESSION>;
            THE VALUE OF THE MULTIPLYING SCALAR;
    C:      <ARRAY IDENTIFIER>;
            "ARRAY" C[LR:UR];
            THE RESULT A * B  + X * C IS DELIVERED IN C.

PROCEDURES USED:

    SYMMATVEC = CP34018.

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

    ELEMENTARY.

REFERENCES:

    [1].T.J.DEKKER.
        ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART1,
        MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970).

    [2].J.C.P.BUS.
        MINIMALISERING VAN FUNKTIES VAN MEERDERE VARIABELEN,
        MATHEMATICAL CENTRE, NR 29/72, AMSTERDAM (1972).

SOURCE TEXT(S):

THE FOLLOWING PROCEDURES, EXCEPT FOR FULSYMMATVEC AND SYMRESVEC ARE
WRITTEN IN COMPASS 3, AN EQUIVALENT ALGOL TEXT OF THESE COMPASS
ROUTINES IS GIVEN.
"CODE" 31500;
"CODE" 31501;
"CODE" 31502;
"CODE" 31503;
"CODE" 31504;