FDJAC
Approximates the Jacobian of M functions in N unknowns using forward differences.
Required Arguments
FCN — User-supplied subroutine to evaluate the function to be minimized. The usage is
CALL FCN (M, N, X, F), where
M – Length of F. (Input)
N – Length of X. (Input)
X – The point at which the function is evaluated. (Input)
X should not be changed by FCN.
F – The computed function at the point X. (Output)
FCN must be declared EXTERNAL in the calling program.
XC — Vector of length N containing the point at which the gradient is to be estimated. (Input)
FC — Vector of length M containing the function values at XC. (Input)
FJAC — M by N matrix containing the estimated Jacobian at XC. (Output)
Optional Arguments
M — The number of functions. (Input)
Default: M = SIZE (FC,1).
N — The number of variables. (Input)
Default: N = SIZE (XC,1).
XSCALE — Vector of length N containing the diagonal scaling matrix for the variables. (Input)
In the absence of other information, set all entries to 1.0.
Default: XSCALE = 1.0.
EPSFCN — Estimate for the relative noise in the function. (Input)
EPSFCN must be less than or equal to 0.1. In the absence of other information, set EPSFCN to 0.0.
Default: EPSFCN = 0.0.
LDFJAC — Leading dimension of FJAC exactly as specified in the dimension statement of the calling program. (Input)
Default: LDFJAC = SIZE (FJAC,1).
FORTRAN 90 Interface
Generic: CALL FDJAC (FCN, XC, FC, FJAC [, …])
Specific: The specific interface names are S_FDJAC and D_FDJAC.
FORTRAN 77 Interface
Single: CALL FDJAC (FCN, M, N, XC, XSCALE, FC, EPSFCN, FJAC, LDFJAC)
Double: The double precision name is DFDJAC.
Description
The routine FDJAC uses the following finite-difference formula to estimate the Jacobian matrix of function f at x:
where ej is the j-th unit vector, hj = ɛ1/2 max{∣xj∣, 1/sj} sign(xj), ɛ is the machine epsilon, and sj is the scaling factor of the j-th variable. For more details, see Dennis and Schnabel (1983).
Since the finite-difference method has truncation error, cancellation error, and rounding error, users should be aware of possible poor performance. When possible, high precision arithmetic is recommended.
Comments
1. Workspace may be explicitly provided, if desired, by use of F2JAC/DF2JAC. The reference is:
CALL F2JAC (FCN, M, N, XC, XSCALE, FC, EPSFCN, FJAC, LDFJAC, WK)
The additional argument is:
WK — Work vector of length M.
2. This is Description A5.4.1, Dennis and Schnabel, 1983, page 314.
Example
In this example, the Jacobian matrix of
is estimated by the finite-difference method at the point (1.0, 1.0).
USE FDJAC_INT
USE UMACH_INT
IMPLICIT NONE
! Declaration of variables
INTEGER N, M, LDFJAC, NOUT
PARAMETER (N=2, M=2, LDFJAC=2)
REAL FJAC(LDFJAC,N), XC(N), FC(M), EPSFCN
EXTERNAL FCN!
DATA XC/2*1.0E0/
! Set function noise
EPSFCN = 0.01
! Evaluate the function at the
! current point
CALL FCN (M, N, XC, FC)
! Get Jacobian forward-difference
! approximation
CALL FDJAC (FCN, XC, FC, FJAC, EPSFCN=EPFSCN)
! Print results
CALL UMACH (2, NOUT)
WRITE (NOUT,99999) ((FJAC(I,J),J=1,N),I=1,M)
99999 FORMAT (’ The Jacobian is’, /, 2(5X,2F10.2,/),/)
!
END
!
SUBROUTINE FCN (M, N, X, F)
! SPECIFICATIONS FOR ARGUMENTS
INTEGER M, N
REAL X(N), F(M)
!
F(1) = X(1)*X(2) - 2.0E0
F(2) = X(1) - X(1)*X(2) + 1.0E0
!
RETURN
END
The Jacobian is
1.00 1.00
0.00 -1.00