NUMAL Section 4.3.2.1

BEGIN SECTION : 4.3.2.1 (October, 1974)

AUTHOR: J.C.P.BUS.

INSTITUTE: MATHEMATICAL CENTRE.

RECEIVED: 740218.

BRIEF DESCRIPTION:

    THIS SECTION CONTAINS PROCEDURES FOR CALCULATING THE DERIVATIVES OF
    FUNCTIONS OF MORE VARIABLES, USING DIFFERENCE FORMULAS;
    JACOBNNF   CALCULATES  THE  JACOBIAN  MATRIX  OF  AN  N-DIMENSIONAL
        FUNCTION OF N VARIABLES USING FORWARD DIFFERENCES;
    JACOBNMF   CALCULATES  THE  JACOBIAN  MATRIX  OF  AN  N-DIMENSIONAL
        FUNCTION OF M VARIABLES USING FORWARD DIFFERENCES;
    JACOBNBNDF  CALCULATES  THE  JACOBIAN  MATRIX  OF AN  N-DIMENSIONAL
        FUNCTION OF  N  VARIABLES,  IF THIS JACOBIAN  IS KNOWN TO BE  A
        BAND MATRIX AND HAVE TO BE STORED ROW-WISE IN A ONE-DIMENSIONAL
        ARRAY.

KEYWORDS:

    NUMERICAL DIFFERENTIATION,
    FUNCTIONS OF MORE VARIABLES,
    DIFFERENCE FORMULAS.


SUBSECTION: JACOBNNF.

CALLING SEQUENCE:

    THE HEADING OF THIS PROCEDURE READS:
    "PROCEDURE" JACOBNNF(N, X, F, JAC, I, DI, FUNCT);
    "VALUE" N; "INTEGER" I, N; "REAL" DI; "ARRAY" X, F, JAC;
    "PROCEDURE" FUNCT;
    "CODE" 34437;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    N:      <ARITHMETIC EXPRESSION>;
            THE NUMBER  OF INDEPENDENT VARIABLES  AND  THE DIMENSION OF
            THE FUNCTION;
    X:      <ARRAY IDENTIFIER>;
            "ARRAY" X[1:N];
            ENTRY: THE POINT AT WHICH THE JACOBIAN HAS TO BE CALCULATED
    F:      <ARRAY IDENTIFIER>;
            "ARRAY" F[1:N];
            ENTRY : THE VALUES OF THE FUNCTION-COMPONENTS AT THE POINT
            GIVEN IN ARRAY X;
    JAC:    <ARRAY IDENTIFIER>;
            "ARRAY" JAC[1:N, 1:N];
            EXIT : THE JACOBIAN MATRIX IN SUCH A WAY THAT THE PARTIAL
            DERIVATIVE OF  F[I] TO  X[J] IS  GIVEN IN
            JAC[I, J], I, J = 1, ..., N;
    I:      <INTEGER VARIABLE>;
            A JENSEN PARAMETER; DI MAY BE DEPENDENT OF I;
    DI:     <ARITHMETIC EXPRESSION>;
            THE  PARTIAL DERIVATIVES  TO  X[I]  ARE  APPROXIMATED  WITH
            FORWARD  DIFFERENCES,   USING  AN  INCREMENT  TO  THE  I-TH
            VARIABLE THAT EQUALS THE VALUE OF DI, I = 1, ..., N;
    FUNCT:  <PROCEDURE IDENTIFIER>;
            THE HEADING OF THIS PROCEDURE SHOULD READ:
            "PROCEDURE" FUNCT(N, X, F);
            "VALUE" N; "INTEGER" N; "ARRAY" X, F;
            THE MEANING OF THE FORMAL PARAMETERS IS:
            N:  <ARITHMETIC EXPRESSION>;
                THE NUMBER OF INDEPENDENT VARIABLES OF THE FUNCTION  F;
            X:  <ARRAY IDENTIFIER>;
                THE INDEPENDENT VARIABLES ARE GIVEN IN X[1:N];
            F:  <ARRAY IDENTIFIER>;
                AFTER A CALL OF FUNCT THE FUNCTION COMPONENTS SHOULD BE
                GIVEN IN F[1:N].

PROCEDURES USED: NONE.

REQUIRED CENTRAL MEMORY :

    EXECUTION FIELD LENGTH: JACOBNNF DECLARES ONE  AUXILIARY  ARRAY  OF
                            ORDER N.

RUNNING TIME: PROPORTIONAL TO  N ** 2.

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

    JACOBNNF   CALCULATES  THE  JACOBIAN  MATRIX  OF  AN  N-DIMENSIONAL
    FUNCTION OF N VARIABLES; THE ELEMENTS OF THIS MATRIX, WHICH ARE THE
    PARTIAL DERIVATIVES OF THE FUNCTION,  ARE CALCULATED  USING FORWARD
    DIFFERENCES WITH AN INCREMENT TO THE I-TH  VARIABLE OF  DI, (I = 1,
    ..., N).

EXAMPLE OF USE:

    LET F BE DEFINED BY:
            F[1]= X[1] ** 3 + X[2],
            F[2]= 10 * X[2];
    THE JACOBIAN MATRIX  AT  THE POINT  (2, 1)  MAY  BE CALCULATED  AND
    PRINTED BY THE FOLLOWING PROGRAM:

    "BEGIN"
        "INTEGER" I; "ARRAY" JAC[1:2, 1:2], X, F[1:2];
        "PROCEDURE" F1(N, X, F); "VALUE" N; "INTEGER" N; "ARRAY" X, F;
        "BEGIN" F[1]:= X[1] ** 3 + X[2]; F[2]:= X[2] * 10 "END" F1;
        X[1]:= 2; X[2]:= 1; F1(2, X, F);
        JACOBNNF(2, X, F, JAC, I, "IF" I = 1 "THEN" "-6 "ELSE" 1, F1);
        OUTPUT(71, "("/,4B,"("THE CALCULATED JACOBIAN IS:")",//,
        2(4B,2(N),/)")", JAC[1, 1], JAC[1, 2], JAC[2, 1], JAC[2, 2])
    "END"

    RESULTS:

    THE CALCULATED JACOBIAN IS:

    +1.2000005938262"+001  +1.0000000000000"+000
    +0.0000000000000"+000  +1.0000000000000"+001


SUBSECTION: JACOBNMF.

CALLING SEQUENCE:

    THE HEADING OF THIS PROCEDURE READS:
    "PROCEDURE" JACOBNMF(N, M, X, F, JAC, I, DI, FUNCT);
    "VALUE" N, M; "INTEGER" I, N, M; "REAL" DI; "ARRAY" X, F, JAC;
    "PROCEDURE" FUNCT;
    "CODE" 34438;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    N:      <ARITHMETIC EXPRESSION>;
            THE NUMBER OF FUNCTION COMPONENTS;
    M:      <ARITHMETIC EXPRESSION>;
            THE NUMBER OF INDEPENDENT VARIABLES;
    X:      <ARRAY IDENTIFIER>;
            "ARRAY" X[1:M];
            ENTRY: THE POINT AT WHICH THE JACOBIAN HAS TO BE CALCULATED
    F:      <ARRAY IDENTIFIER>;
            "ARRAY" F[1:N];
            ENTRY: THE VALUES OF THE FUNCTION-COMPONENTS AT THE POINT
            GIVEN IN ARRAY X;
    JAC:    <ARRAY IDENTIFIER>;
            "ARRAY" JAC[1:N, 1:M];
            EXIT : THE JACOBIAN MATRIX IN SUCH A WAY THAT THE PARTIAL
            DERIVATIVE OF  F[I] TO  X[J] IS  GIVEN IN
            JAC[I, J], I = 1, ..., N, J = 1, ... M;
    I:      <INTEGER VARIABLE>;
            A JENSEN PARAMETER; DI MAY BE DEPENDENT OF I;
    DI:     <ARITHMETIC EXPRESSION>;
            THE  PARTIAL DERIVATIVES  TO  X[I]  ARE  APPROXIMATED  WITH
            FORWARD  DIFFERENCES,   USING  AN  INCREMENT  TO  THE  I-TH
            VARIABLE THAT EQUALS THE VALUE OF DI, I = 1, ..., M;
    FUNCT:  <PROCEDURE IDENTIFIER>;
            THE HEADING OF THIS PROCEDURE READS :
            "PROCEDURE" FUNCT(N, M, X, F);
            "VALUE" N, M; "INTEGER" N, M; "ARRAY" X, F;
            THE MEANING OF THE FORMAL PARAMETERS IS :
            N:  <ARITHMETIC EXPRESSION>;
                THE NUMBER OF FUNCTION COMPONENTS;
            M:  <ARITHMETIC EXPRESSION>;
                THE NUMBER OF INDEPENDENT VARIABLES OF THE FUNCTION  F;
            X:  <ARRAY IDENTIFIER>;
                THE INDEPENDENT VARIABLES ARE GIVEN IN X[1:M];
            F:  <ARRAY IDENTIFIER>;
                AFTER A CALL OF FUNCT THE FUNCTION COMPONENTS SHOULD BE
                GIVEN IN F[1:N].

PROCEDURES USED: NONE.

EXECUTION FIELD LENGTH: JACOBNMF   DECLARES   ONE  AUXILIARY  ARRAY  OF
                        ORDER N.

RUNNING TIME: PROPORTIONAL TO  N * M.

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

    JACOBNMF   CALCULATES  THE  JACOBIAN  MATRIX  OF  AN  N-DIMENSIONAL
    FUNCTION OF M VARIABLES; THE ELEMENTS OF THIS MATRIX, WHICH ARE THE
    PARTIAL DERIVATIVES OF THE FUNCTION,  ARE CALCULATED  USING FORWARD
    DIFFERENCES  WITH AN INCREMENT TO THE I-TH  VARIABLE OF  DI,(I = 1,
    ..., M).

EXAMPLE OF USE:

    LET F BE DEFINED BY:
            F[1]= X[1] ** 3 + X[2],
            F[2]= 10 * X[2] + X[2] * X[1],
            F[3]= X[1] * X[2];
    THE  JACOBIAN MATRIX  AT  THE POINT  (2, 1)  MAY BE CALCULATED  AND
    PRINTED BY THE FOLLOWING PROGRAM:

    "BEGIN"
        "INTEGER" I; "ARRAY" JAC[1:3, 1:2], X[1:2], F[1:3];
        "PROCEDURE" F1(N, M, X, F); "VALUE" N, M; "INTEGER" N, M;
        "ARRAY" X, F;
        "BEGIN" F[1]:= X[1] ** 3 + X[2];
            F[2]:= X[2] * 10 + X[2] * X[1] ** 2; F[3]:= X[1] * X[2]
        "END" F1;
        X[1]:= 2; X[2]:= 1; F1(3, 2, X, F);
        JACOBNMF(3, 2, X, F, JAC, I, "IF" I=2 "THEN" 1 "ELSE" "-5, F1);
        OUTPUT(71, "("/,4B,"("THE CALCULATED JACOBIAN IS:")",//,
        3(4B,2(N),/)")", JAC[1, 1], JAC[1, 2], JAC[2, 1], JAC[2, 2],
        JAC[3, 1], JAC[3, 2])
    "END"

    RESULTS:

    THE CALCULATED JACOBIAN IS:

    +1.2000060002038"+001  +1.0000000000000"+000
    +4.0000100000270"+000  +1.4000000000000"+001
    +1.0000000003174"+000  +2.0000000000000"+000


SUBSECTION: JACOBNBNDF.

CALLING SEQUENCE:

    THE HEADING OF THIS PROCEDURE READS :
    "PROCEDURE" JACOBNBNDF(N, LW, RW, X, F, JAC, I, DI, FUNCT);
    "VALUE" N, LW, RW; "INTEGER" N, I, LW, RW; "REAL" DI;
    "ARRAY" X, F, JAC; "PROCEDURE" FUNCT;
    "CODE" 34439;

    THE MEANING OF THE FORMAL PARAMETERS IS:
    N:      <ARITHMETIC EXPRESSION>;
            THE NUMBER  OF INDEPENDENT VARIABLES  AND  THE DIMENSION OF
            THE FUNCTION;
    LW:     <ARITHMETIC EXPRESSION>;
            THE NUMBER OF CODIAGONALS  TO THE LEFT OF THE MAIN DIAGONAL
            OF THE JACOBIAN MATRIX, WHICH IS KNOWN TO BE A BAND MATRIX;
    RW:     <ARITHMETIC EXPRESSION>;
            THE NUMBER OF CODIAGONALS TO THE RIGHT OF THE MAIN DIAGONAL
            OF THE JACOBIAN MATRIX;
    X:      <ARRAY IDENTIFIER>;
            "ARRAY" X[1:N];
            ENTRY: THE POINT AT WHICH THE JACOBIAN HAS TO BE CALCULATED
    F:      <ARRAY IDENTIFIER>;
            "ARRAY" F[1:N];
            ENTRY: THE VALUES OF THE FUNCTION-COMPONENTS AT THE POINT
            GIVEN IN ARRAY X;
    JAC:    <ARRAY IDENTIFIER>;
            "ARRAY" JAC [1 : (LW + RW ) * (N - 1) + N];
            EXIT: THE JACOBIAN MATRIX  IN SUCH A WAY THAT THE (I, J)-TH
            ELEMENT OF THE JACOBIAN, I.E. THE PARTIAL DERIVATIVE OF
            F[I] TO X[J], IS  GIVEN IN
            JAC[(LW + RW) * (I - 1) + J], FOR I = 1, ..., N
            J= MAX(1, I - LW), ..., MIN(N, I + RW);
    I:      <INTEGER VARIABLE>;
            A JENSEN PARAMETER; DI MAY BE DEPENDENT OF I;
    DI:     <ARITHMETIC EXPRESSION>;
            THE  PARTIAL DERIVATIVES  TO  X[I]  ARE  APPROXIMATED  WITH
            FORWARD  DIFFERENCES,   USING  AN  INCREMENT  TO  THE  I-TH
            VARIABLE THAT EQUALS THE VALUE OF DI, I = 1, ..., N;

    FUNCT:  <PROCEDURE IDENTIFIER>;
            THE HEADING OF THIS PROCEDURE READS :
            "PROCEDURE" FUNCT(N, L, U, X, F);
            "VALUE" N, L, U; "INTEGER" N, L, U; "ARRAY" X, F;
            THE MEANING OF THE FORMAL PARAMETERS IS :
            N:  <ARITHMETIC EXPRESSION>;
                THE NUMBER OF FUNCTION COMPONENTS;
            L,U:<ARITHMETIC EXPRESSION>;
                LOWER  AND  UPPER  BOUND   OF  THE  FUNCTION  COMPONENT
                SUBSCRIPT;
            X:  <ARRAY IDENTIFIER>;
                THE INDEPENDENT VARIABLES ARE GIVEN IN X[1:N];
            F:  <ARRAY IDENTIFIER>;
                AFTER  A CALL  OF  FUNCT  THE FUNCTION COMPONENTS F[I],
                I = L, ..., U, SHOULD BE GIVEN IN F[L:U].

PROCEDURES USED: NONE.

EXECUTION FIELD LENGTH: JACOBNMF   DECLARES   ONE  AUXILIARY  ARRAY  OF
                        MAXIMUM ORDER LW + RW + 1;

RUNNING TIME: PROPORTIONAL TO  N * (LW + RW + 1).

LANGUAGE:   ALGOL 60.

METHOD AND PERFORMANCE:

    JACOBNBNDF   CALCULATES  THE  JACOBIAN MATRIX  OF AN  N-DIMENSIONAL
    FUNCTION OF  N  VARIABLES,  IF THIS JACOBIAN IS KNOWN TO BE  A BAND
    MATRIX AND HAVE TO BE STORED  ROW-WISE  IN A ONE-DIMENSIONAL ARRAY;
    THE ELEMENTS OF THIS JACOBIAN MATRIX ARE CALCULATED  USING  FORWARD
    DIFFERENCES, WITH AN INCREMENT TO THE I-TH VARIABLE OF DI,  (I = 1,
    ..., N).

EXAMPLE OF USE:

    LET F BE DEFINED BY:
    F[1] = (3 - 2 * X[1]) * X[1] + 1 - 2 * X[2],
    F[I] = (3 - 2 * X[I]) * X[I] + 1 - X[I-1] - 2 * X[I+1], I= 2, 3, 4,
    F[5] = 4 - 2 * X[5] - X[4];
    THE TRIDIAGONAL JACOBIAN MATRIX AT THE POINT X, GIVEN BY X[I] = -1,
    I = 1, ..., 5,  MAY  BE  CALCULATED  AND  PRINTED  BY THE FOLLOWING
    PROGRAM:

    "BEGIN"
        "INTEGER" I; "ARRAY" JAC[1:13], X, F[1:5];
        "PROCEDURE" F1(N, L, U, X, F); "VALUE" N, L, U;
        "INTEGER" N, L, U; "ARRAY" X, F;
        "BEGIN" "INTEGER" I;
            "FOR" I:= L "STEP" 1 "UNTIL" ("IF" U = 5 "THEN" 4 "ELSE" U)
            "DO"
            "BEGIN" F[I]:= (3 - 2 * X[I]) * X[I] + 1 - 2 * X[I + 1];
                "IF" I ^= 1 "THEN" F[I]:= F[I] - X[I - 1]
            "END";
            "IF" U = 5 "THEN" F[5]:= 4 - X[4] - X[5] * 2
        "END" F1;

        "PROCEDURE" LIST(ITEM); "PROCEDURE" ITEM;
        "BEGIN" "INTEGER" I;
            ITEM("("THE CALCULATED TRIDIAGONAL JACOBIAN IS:")");
            "FOR" I:= 1 "STEP" 1 "UNTIL" 13 "DO" ITEM(JAC[I])
         "END" LIST;

        "PROCEDURE" LAYOUT;
        FORMAT("("//,4B,40S,//,4B,2(+.5D"+D2B),/,4B,3(+.5D"+D2B),/,
        16B,3(+.5D"+D2B),/,28B,3(+.5D"+D2B),/,40B,2(+.5D"+D2B),/")");
        "FOR" I := 1 "STEP" 1 "UNTIL" 5 "DO" X[I]:= -1;
        F1(5, 1, 5, X, F);
        JACOBNBNDF(5, 1, 1, X, F, JAC, I, "IF" I = 5 "THEN" 1 "ELSE"
        "-6, F1);
        OUTLIST(71, LAYOUT, LIST)
    "END"

    RESULTS:

    THE CALCULATED TRIDIAGONAL JACOBIAN IS:

    +.70000"+1  -.20000"+1
    -.10000"+1  +.70000"+1  -.20000"+1
                -.10000"+1  +.70000"+1  -.20000"+1
                            -.10000"+1  +.70000"+1  -.20000"+1
                                        -.10000"+1  -.20000"+1

SOURCE TEXT(S):

"CODE" 34437;

"CODE" 34438;

"CODE" 34439;