diff options
Diffstat (limited to 'src/lmfit/lmmin.h')
-rw-r--r-- | src/lmfit/lmmin.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lmfit/lmmin.h b/src/lmfit/lmmin.h new file mode 100644 index 0000000..1a90f13 --- /dev/null +++ b/src/lmfit/lmmin.h @@ -0,0 +1,52 @@ +// parameters for calling the high-level interface lmfit +// ( lmfit.c provides lm_initialize_control which sets default values ): +typedef struct { + double ftol; // relative error desired in the sum of squares. + double xtol; // relative error between last two approximations. + double gtol; // orthogonality desired between fvec and its derivs. + double epsilon; // step used to calculate the jacobian. + double stepbound; // initial bound to steps in the outer loop. + double fnorm; // norm of the residue vector fvec. + int maxcall; // maximum number of iterations. + int nfev; // actual number of iterations. + int info; // status of minimization. +} lm_control_type; + + +// the subroutine that calculates fvec: +typedef void (lm_evaluate_ftype) ( + double* par, int m_dat, double* fvec, void *data, int *info ); +// default implementation therof, provided by lm_eval.c: +void lm_evaluate_default ( + double* par, int m_dat, double* fvec, void *data, int *info ); + +// the subroutine that informs about fit progress: +typedef void (lm_print_ftype) ( + int n_par, double* par, int m_dat, double* fvec, void *data, + int iflag, int iter, int nfev ); +// default implementation therof, provided by lm_eval.c: +void lm_print_default ( + int n_par, double* par, int m_dat, double* fvec, void *data, + int iflag, int iter, int nfev ); + +// compact high-level interface: +void lm_initialize_control( lm_control_type *control ); +void lm_minimize ( int m_dat, int n_par, double* par, + lm_evaluate_ftype *evaluate, lm_print_ftype *printout, + void *data, lm_control_type *control ); +double lm_enorm( int, double* ); + +// low-level interface for full control: +void lm_lmdif( int m, int n, double* x, double* fvec, double ftol, double xtol, + double gtol, int maxfev, double epsfcn, double* diag, int mode, + double factor, int *info, int *nfev, + double* fjac, int* ipvt, double* qtf, + double* wa1, double* wa2, double* wa3, double* wa4, + lm_evaluate_ftype *evaluate, lm_print_ftype *printout, + void *data ); + + +#ifndef _LMDIF +extern char *lm_infmsg[]; +extern char *lm_shortmsg[]; +#endif |