int nllsqfit(xdat, xdim, ydat, wdat, ddat, ndat,fpar, epar, mpar, npar,tol, its, lab, f, df) int nr_nllsqfit(xdat, xdim, ydat, wdat, ddat, ndat,fpar, epar, mpar, npar,tol, its, lab, f, df) real *xdat, *ydat, *wdat, *ddat, *fpar, *epar, tol, lab; int xdim, ndat, *mpar, npar, its; rproc f; iproc df;

*nllsqfit* returns number
of iterations needed to achieve convergence according to **tol**. When this
number is negative, the fitting was not continued because a fatal error
occurred:

-1 Too many free parameters, maximum "#define MAXPAR 32". -2 No free parameters. -3 Not enough degrees of freedom. -4 Too many iterations to get a solution which satisfies tol. -5 Diagonal of matrix contains elements which are zero, or less. -6 Determinant of the coefficient matrix is zero. -7 Square root of negative number.A linear fit (

*nr_nllsqfit* is a wrapper routine with the
same calling sequence, but calls the (NEMO adapted) Numerical Recipes routine
mrqmin() and its helper functions.

**xdat**- contains the coordinates
of the data points.
**xdat**is two-dimensional:**xdat(xdim,ndatf**) in FORTRAN notation or**xdat[ndat][xdim]**in C. sense. **xdim**- is the dimension of the fit.
**ydat**- contains the data points.
**wdat**- contains the weigths for the data points. Can be a NULL pointer, in which case all weights are equal.
**ddat**- contains the difference between data and fit. Can be a NULL pointer, in which case no fit differences are returned.
**ndat**- is the number of data points.
**fpar**- On input contains initial estimates of the parameters for non-linear fits, on output the fitted parameters.
**epar**- contains estimates of errors in fitted parameters.
**mpar**- logical
mask telling which parameters are free (
**mpar[j]**=non-zero) and which parameters are fixed (**mpar[j]**=0). **npar**- number of parameters (free+fixed).
**tol**- relative tolerance.
*nllsqfit*stops when successive iterations fail to produce a decrement in reduced chi-squared less than**tol**. If**tol**is less than the minimum tolerance possible,**tol**will be set to this value. This means that maximum accuracy can be obtained by setting**tol**=0.0. **its**- maximum number of iterations.
**lab**- mixing parameter,
**lab**determines the initial weight of steepest descent method relative to the Taylor method.**lab**should be a small value (i.e. 0.01).**lab**can only be zero when the partial derivatives are independent of the parameters. In fact in this case**lab**should be exactly equal to zero, in which case the fit can (or is assumed to) be done linear. **f**- external function, must return a real value, see below.
**df**- external function, returns the partial deriviates to the fitted parameters, see below

real func(xdat, fpar, npar) func returns the function value of the function to be fitted. real xdat[] (input) coordinate(s) of data point. real fpar[] (input) parameter list. int npar (input) number of parameters.

void derv(xdat, fpar, dpar, npar)

real xdat[] (input) coordinate(s) of data point.

real fpar[] (input) parameter list.

real dpar[] (output) partial derivatives to the parameters of
the

function to be fitted.

int npar (input) number of parameters.

real func(real *xdat, real *fpar, int npar) { return fpar[0] * (*xdat) + fpar[1]; } void derv(real *xdat, real *fpar, real *dpar, int npar) { dpar[0] = *xdat; dpar[1] = 1.0; }

May 7, 1990 Document created(KGB), document refereed(MXV) Apr 30, 1991 NEMO version written for rotcur, as old PJT July 23, 1992 manual page written PJT Aug 20, 1992 turbocharged getvec() considerably PJT July 12, 2002allow ’wdat’ to be a NULL vector if all weights the samePJT