subroutine pda_lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa)
**********
subroutine pda_lmdif1
the purpose of pda_lmdif1 is to minimize the sum of the squares of
m nonlinear functions in n variables by a modification of the
levenberg-marquardt algorithm. this is done by using the more
general least-squares solver pda_lmdif. the user must provide a
subroutine which calculates the functions. the jacobian is
then calculated by a forward-difference approximation.
the subroutine statement is
subroutine pda_lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa)
where
fcn is the name of the user-supplied subroutine which
calculates the functions. fcn must be declared
in an external statement in the user calling
program, and should be written as follows.
subroutine fcn(m,n,x,fvec,iflag)
integer m,n,iflag
double precision x(n),fvec(m)
----------
calculate the functions at x and
return this vector in fvec.
----------
return
end
the value of iflag should not be changed by fcn unless
the user wants to terminate execution of pda_lmdif1.
in this case set iflag to a negative integer.
m is a positive integer input variable set to the number
of functions.
n is a positive integer input variable set to the number
of variables. n must not exceed m.
x is an array of length n. on input x must contain
an initial estimate of the solution vector. on output x
contains the final estimate of the solution vector.
fvec is an output array of length m which contains
the functions evaluated at the output x.
tol is a nonnegative input variable. termination occurs
when the algorithm estimates either that the relative
error in the sum of squares is at most tol or that
the relative error between x and the solution is at
most tol.
info is an integer output variable. if the user has
terminated execution, info is set to the (negative)
value of iflag. see description of fcn. otherwise,
info is set as follows.
info = 0 improper input parameters.
info = 1 algorithm estimates that the relative error
in the sum of squares is at most tol.
info = 2 algorithm estimates that the relative error
between x and the solution is at most tol.
info = 3 conditions for info = 1 and info = 2 both hold.
info = 4 fvec is orthogonal to the columns of the
jacobian to machine precision.
info = 5 number of calls to fcn has reached or
exceeded 200*(n+1).
info = 6 tol is too small. no further reduction in
the sum of squares is possible.
info = 7 tol is too small. no further improvement in
the approximate solution x is possible.
iwa is an integer work array of length n.
wa is a work array of length lwa.
lwa is a positive integer input variable not less than
m*n+5*n+m.
subprograms called
user-supplied ...... fcn
minpack-supplied ... pda_lmdif
argonne national laboratory. minpack project. march 1980.
burton s. garbow, kenneth e. hillstrom, jorge j. more
**********