ADAS Subroutine lmdif1_all
subroutine lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa)
C-----------------------------------------------------------------------
c subroutine lmdif1
c
c PURPOSE: minimize the sum of the squares of m nonlinear
c functions in n variables by a modification of the
c levenberg-marquardt algorithm.
c
c this is done by using the more general least-squares solver
c lmdif. the user must provide a subroutine which calculates
c the functions. the jacobian is then calculated by a
c forward-difference approximation.
c
c the subroutine statement is
c
c subroutine lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa)
c
c where
c
c fcn is the name of the user-supplied subroutine which
c calculates the functions. fcn must be declared
c in an external statement in the user calling
c program, and should be written as follows.
c
c subroutine fcn(m,n,x,fvec,iflag)
c integer m,n,iflag
c double precision x(n),fvec(m)
c ----------
c calculate the functions at x and
c return this vector in fvec.
c ----------
c return
c end
c
c the value of iflag should not be changed by fcn unless
c the user wants to terminate execution of lmdif1.
c in this case set iflag to a negative integer.
c
c m is a positive integer input variable set to the number
c of functions.
c
c n is a positive integer input variable set to the number
c of variables. n must not exceed m.
c
c x is an array of length n. on input x must contain
c an initial estimate of the solution vector. on output x
c contains the final estimate of the solution vector.
c
c fvec is an output array of length m which contains
c the functions evaluated at the output x.
c
c tol is a nonnegative input variable. termination occurs
c when the algorithm estimates either that the relative
c error in the sum of squares is at most tol or that
c the relative error between x and the solution is at
c most tol.
c
c info is an integer output variable. if the user has
c terminated execution, info is set to the (negative)
c value of iflag. see description of fcn. otherwise,
c info is set as follows.
c
c info = 0 improper input parameters.
c
c info = 1 algorithm estimates that the relative error
c in the sum of squares is at most tol.
c
c info = 2 algorithm estimates that the relative error
c between x and the solution is at most tol.
c
c info = 3 conditions for info = 1 and info = 2 both hold.
c
c info = 4 fvec is orthogonal to the columns of the
c jacobian to machine precision.
c
c info = 5 number of calls to fcn has reached or
c exceeded 200*(n+1).
c
c info = 6 tol is too small. no further reduction in
c the sum of squares is possible.
c
c info = 7 tol is too small. no further improvement in
c the approximate solution x is possible.
c
c iwa is an integer work array of length n.
c
c wa is a work array of length lwa.
c
c lwa is a positive integer input variable not less than
c m*n+5*n+m.
c
c subprograms called
c
c user-supplied ...... fcn
c
c minpack-supplied ... lmdif
c
c argonne national laboratory. minpack project. march 1980.
c burton s. garbow, kenneth e. hillstrom, jorge j. more
c
C PUT INTO ADAS BY:
C WILLIAM OSBORN, TESSELLA SUPPORT SERVICES PLC.
C
C DATE: 25TH APRIL 1996
C
C VERSION: 1.1 DATE: 25-04-96
C MODIFIED: WILLIAM OSBORN
C - FOUND AT WWW.NETLIB.ORG/MINPACK/ .
C REPLACES NAG ROUTINE E04FDF .
C
C VERSION: 1.2 DATE: 21-05-96
C MODIFIED: WILLIAM OSBORN
C - CHANGED TOLERANCE CALCULATION IN ORDER TO USE SMALLER
C VALUES
C
C VERSION: 1.3 DATE: 22-09-99
C MODIFIED: RICHARD MARTIN
C - RENAMED FROM lmdif1_all.f to lmdif1_all.for
C
C VERSION: 1.4 DATE: 16-05-07
C MODIFIED: Allan Whiteford
C - Updated comments as part of subroutine documentation
C procedure.
C
C-------------------------------------------------------------------
DOUBLE PRECISION FVEC(M), TOL, WA(LWA), X(N)
INTEGER INFO, IWA(N), LWA, M
INTEGER N
DOUBLE PRECISION X(N)
INTEGER N
DOUBLE PRECISION EPSFCN, FJAC(LDFJAC,N), FVEC(M)
DOUBLE PRECISION WA(M), X(N)
INTEGER IFLAG, LDFJAC, M, N
DOUBLE PRECISION DIAG(N), EPSFCN, FACTOR
DOUBLE PRECISION FJAC(LDFJAC,N), FTOL, FVEC(M)
DOUBLE PRECISION GTOL, QTF(N), WA1(N), WA2(N)
DOUBLE PRECISION WA3(N), WA4(M), X(N), XTOL
INTEGER INFO, IPVT(N), LDFJAC, M
INTEGER MAXFEV, MODE, N, NFEV
INTEGER NPRINT
DOUBLE PRECISION DELTA, DIAG(N), PAR, QTB(N)
DOUBLE PRECISION R(LDR,N), SDIAG(N), WA1(N), WA2(N)
DOUBLE PRECISION X(N)
INTEGER IPVT(N), LDR, N
DOUBLE PRECISION A(LDA,N), ACNORM(N), RDIAG(N), WA(N)
INTEGER IPVT(LIPVT), LDA, LIPVT, M
INTEGER N
LOGICAL PIVOT
DOUBLE PRECISION DIAG(N), QTB(N), R(LDR,N)
DOUBLE PRECISION SDIAG(N), WA(N), X(N)
INTEGER IPVT(N), LDR, N