NUMAL Section 1.1.4.1

BEGIN SECTION : 1.1.4.1 (December, 1975)

AUTHORS:        T.J.DEKKER, J.C.P.BUS, J.WOLLESWINKEL.

CONTRIBUTORS:   P.A.BEENTJES, J.C.P.BUS.

INSTITUTE:      MATHEMATICAL CENTRE.

RECEIVED:       741215.

BRIEF DESCRIPTION:

    THIS SECTION CONTAINS NINE PROCEDURES.
    VECVEC:= SCALAR PRODUCT OF  THE VECTOR  GIVEN  IN  ARRAY A[L:U] AND
    ARRAY B[SHIFT + L : SHIFT + U].
    MATVEC:= SCALAR PRODUCT OF THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U]
    AND THE VECTOR GIVEN IN ARRAY B[L:U].
    TAMVEC:= SCALAR  PRODUCT  OF  THE  COLUMN  VECTOR  GIVEN  IN  ARRAY
    A[L:U, I:I] AND THE VECTOR GIVEN IN ARRAY B[L:U].
    MATMAT:= SCALAR PRODUCT OF THE ROW VECTOR GIVEN IN ARRAY A[I:I,L:U]
    AND THE COLUMN VECTOR IN ARRAY B[L:U, J:J].
    TAMMAT:= SCALAR  PRODUCT  OF  THE  COLUMN VECTORS  GIVEN  IN  ARRAY
    A[L:U, I:I] AND ARRAY B[L:U, J:J].
    MATTAM :=  SCALAR  PRODUCT  OF  THE  ROW  VECTORS  GIVEN  IN  ARRAY
    A[I:I,L:U] AND ARRAY B[J:J, L:U].
    SEQVEC :=  SCALAR   PRODUCT   OF   THE   VECTORS   GIVEN  IN  ARRAY
    A[IL : IL + (U+L-1)*(U-L)//2]  AND ARRAY  B[SHIFT + L : SHIFT + U],
    WHERE THE ELEMENTS OF  THE FIRST VECTOR ARE  A[IL+(J+L-1)*(J-L)//2]
    FOR J = L, ..., U.
    SCAPRD1:=  SCALAR   PRODUCT   OF   THE   VECTORS   GIVEN  IN  ARRAY
    A[MIN(LA, LA + (N - 1) * SA) : MAX(LA,LA + (N - 1) * SA)] AND ARRAY
    B[MIN(LB, LB + (N - 1) * SB) : MAX(LB,LB + (N - 1) * SB)] WHERE THE
    ELEMENTS  OF  THE  VECTORS  ARE  A[LA+(J-1)*SA] AND  B[LB+(J-1)*SB]
    FOR J = 1, ..., N.
    SYMMATVEC := THE SCALARPRODUCT OF ( A PART OF ) A VECTOR AND
    ( A PART OF ) A ROW OF A SYMMETRIC MATRIX , WHOSE  UPPERTRIANGLE IS
    GIVEN COLUMNWISE IN AN ONE-DIMENSIONAL ARRAY.

KEYWORDS:

    ELEMENTARY PROCEDURE,
    VECTOR OPERATIONS,
    SCALAR PRODUCTS.


SUBSECTION: VECVEC.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" VECVEC(L, U, SHIFT, A, B); "VALUE" L,U,SHIFT;
    "INTEGER" L,U,SHIFT; "ARRAY" A,B;
    "CODE" 34010;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    SHIFT:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING PARAMETER OF THE VECTOR B;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[L : U], B[L + SHIFT : U + SHIFT].

LANGUAGE: COMPASS.


SUBSECTION: MATVEC.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" MATVEC(L, U, I, A, B); "VALUE" L,U,I;
    "INTEGER" L,U,I; "ARRAY" A,B;
    "CODE" 34011;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I:      <ARITHMETIC EXPRESSION>;
            ROW-INDEX OF THE ROW VECTOR A;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[I : I, L : U], B[L : U].

LANGUAGE: COMPASS.


SUBSECTION: TAMVEC.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" TAMVEC(L, U, I, A, B); "VALUE" L,U,I;
    "INTEGER" L,U,I; "ARRAY" A,B;
    "CODE" 34012;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I:      <ARITHMETIC EXPRESSION>;
            COLUMN-INDEX OF THE COLUMN VECTOR A;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[L : U, I : I], B[L : U].

LANGUAGE: COMPASS.


SUBSECTION: MATMAT.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" MATMAT(L, U, I, J, A, B); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A,B;
    "CODE" 34013;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I,J:    <ARITHMETIC EXPRESSION>;
            ROW-INDEX  OF  THE ROW VECTOR  A  AND  COLUMN-INDEX  OF THE
            COLUMN VECTOR B;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[I : I, L : U], B[L : U, J : J].

LANGUAGE: COMPASS.


SUBSECTION: TAMMAT.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" TAMMAT(L, U, I, J, A, B); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A,B;
    "CODE" 34014;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I,J:    <ARITHMETIC EXPRESSION>;
            COLUMN-INDICES OF THE COLUMN VECTORS A AND B, RESPECTIVELY;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[L : U, I : I], B[L : U, J : J].

LANGUAGE: COMPASS.


SUBSECTION: MATTAM.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" MATTAM(L, U, I, J, A, B); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A,B;
    "CODE" 34015;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I,J:    <ARITHMETIC EXPRESSION>;
            ROW-INDICES  OF  THE  ROW VECTORS  A  AND  B, RESPECTIVELY;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[I : I, L : U], B[J : J, L : U].

LANGUAGE: COMPASS.


SUBSECTION: SEQVEC.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" SEQVEC(L, U, IL, SHIFT, A, B);
    "VALUE" L, U, IL, SHIFT; "INTEGER" L, U, IL, SHIFT; "ARRAY" A, B;
    "CODE" 34016;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    IL:     <ARITHMETIC EXPRESSION>;
            LOWER BOUND OF THE VECTOR A;
    SHIFT:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING PARAMETER OF THE VECTOR B;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q], B[L + SHIFT, U + SHIFT];
            THE VALUES OF P AND  Q  SHOULD  SATISFY  P <= IL  AND  Q >=
            IL+(U+L-1)*(U-L)//2).

LANGUAGE: COMPASS.


SUBSECTION: SCAPRD1.

CALLING SEQUENCE:

    HEADING:
    "REAL" "PROCEDURE" SCAPRD1(LA, SA, LB, SB, N, A, B);
    "VALUE" LA,SA,LB,SB,N; "INTEGER" LA,SA,LB,SB,N; "ARRAY" A,B;
    "CODE" 34017;

    FORMAL PARAMETERS:
    N:      <ARITHMETIC EXPRESSION>;
            UPPER BOUND OF THE RUNNING SUBSCRIPT;
    LA,LB:  <ARITHMETIC EXPRESSION>;
            LOWER   BOUNDS   OF   THE VECTORS  A  AND  B, RESPECTIVELY;
    SA,SB:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING   PARAMETERS   OF   THE  VECTORS  A  AND  B,
            RESPECTIVELY;
    A,B:    <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q], B[R : S];
            THE SUBSCRIPTS ABOVE AND THE VALUES OF LA( +(J-1)*SA )  AND
            LB( +(J-1)*SB ),J = 1(1)N SHOULD NOT CONTRADICT EACH OTHER.

LANGUAGE: COMPASS.


SUBSECTION: SYMMATVEC.

CALLING SEQUENCE:

    THE HEADING OF THE PROCEDURE READS:
    "REAL" "PROCEDURE" SYMMATVEC(L, U, I, A, B); "VALUE" L,U,I;
    "INTEGER" L,U,I; "ARRAY" A,B;
    "CODE" 34018;

    SYMMATVEC:= THE VALUE OF THE SCALAR PRODUCT OF THE VECTORS GIVEN
                IN  ARRAY A[P:Q] AND  ARRAY B[L:U] , WHERE THE ELEMENTS
                OF THE FIRST VECTOR ARE: IF L<I THEN A[(I-1)*I//2 + J],
                J=L,..., MIN(U, I-1) AND A[(J-1)*J//2 + I], J=I,..., U,
                RESPECTIVELY , OTHERWISE A[(J-1)*J//2 + I], J=L,..., U.

    THE MEANING OF THE FORMAL PARAMETERS IS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE VECTOR B, RESPECTIVELY; L >=1;
    I:      <ARITHMETIC EXPRESSION>;
            ROW INDEX OF THE MATRIX A; I >= 1;
    A:      <ARRAY IDENTIFIER>;
            A  ONE-DIMENSIONAL  ARRAY  A[P : Q]  WITH:  IF  I > L  THEN
            P=(I-1)*I//2 + L ELSE  P=(L-1)*L//2 + I AND IF  I > U  THEN
            Q=(I-1)*I//2 + U ELSE  Q=(U-1)*U//2 + I;
    B:      <ARRAY IDENTIFIER>;
            A ONE-DIMENSIONAL ARRAY B[L:U];

PROCEDURES USED:

           VECVEC = CP34010,
           SEQVEC = CP34016.

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

           SEE REFERENCE [2].

REFERENCES :

       [1]  T.J.DEKKER.
            ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA,PART 1,
            MATHEMATICAL CENTRE TRACT 22,AMSTERDAM (1970)
       [2]  J.C.P.BUS.
            MINIMALISERING VAN FUNCTIES VAN MEERDERE VARIABELEN,
            MATHEMATICAL CENTRE, NR 29/72,AMSTERDAM (1972)

SOURCE TEXT(S):

THE FOLLOWING PROCEDURES,  EXCEPT FOR SYMMATVEC ARE WRITTEN IN COMPASS,
AN EQUIVALENT ALGOL 60 TEXT OF THESE COMPASS ROUTINES IS GIVEN.

"CODE" 34010;
"CODE" 34011;
"CODE" 34012;
"CODE" 34013;
"CODE" 34014;
"CODE" 34015;
"CODE" 34016;
"CODE" 34017;
"CODE" 34018;