| lmmin.h.html | mathcode2html |
| Source file: lmmin.h | |
| Converted: Tue Apr 17 2012 at 11:03:37 | |
| This documentation file will not reflect any later changes in the source file. |
$$\phantom{******** If you see this on the webpage then the
browser could not locate *********}$$
$$\phantom{******** jsMath/easy/load.js or the variable root
is set wrong in this file *********}$$
$$\newcommand{\vector}[1]{\left[\begin{array}{c} #1 \end{array}\right]}$$
$$\newenvironment{matrix}{\left[\begin{array}{cccccccccc}} {\end{array}\right]}$$
$$\newcommand{\A}{{\cal A}}$$
$$\newcommand{\W}{{\cal W}}$$
#ifndef LMMIN_H
#define LMMIN_H
#ifdef __cplusplus
extern "C" {
#endif
// 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.
double** curvature; // #par x #par (ignored if NULL)
} 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, double* jacjac, 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
#ifdef __cplusplus
}
#endif
#endif