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;