ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
lmmin.h
Go to the documentation of this file.
1 /*
2  * Project: LevenbergMarquardtLeastSquaresFitting
3  *
4  * File: lmmin.h
5  *
6  * Contents: Public interface to the Levenberg-Marquardt core implementation.
7  *
8  * Author: Joachim Wuttke 2004-2010
9  *
10  * Homepage: joachimwuttke.de/lmfit
11  */
12 
13 #ifndef LMMIN_H
14 #define LMMIN_H
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
22 /* Collection of control (input) parameters. */
23 typedef struct {
24  double ftol; /* relative error desired in the sum of squares. */
25  double xtol; /* relative error between last two approximations. */
26  double gtol; /* orthogonality desired between fvec and its derivs. */
27  double epsilon; /* step used to calculate the jacobian. */
28  double stepbound; /* initial bound to steps in the outer loop. */
29  int maxcall; /* maximum number of iterations. */
30  int scale_diag; /* UNDOCUMENTED, TESTWISE automatical diag rescaling? */
31  int printflags; /* OR'ed to produce more noise */
33 
34 /* Collection of status (output) parameters. */
35 typedef struct {
36  double fnorm; /* norm of the residue vector fvec. */
37  int nfev; /* actual number of iterations. */
38  int info; /* status (index for lm_infmsg and lm_shortmsg). */
40 
41 /* Recommended control parameter settings. */
44 
45 /* Standard monitoring routine. */
46 void lm_printout_std(int n_par, const double *par, int m_dat, const void *data, const double *fvec, int printflags,
47  int iflag, int iter, int nfev);
48 
49 /* Refined calculation of Eucledian norm, typically used in printout routine. */
50 double lm_enorm(int, const double *);
51 
52 /* The actual minimization. */
53 void lmmin(int n_par, double *par, int m_dat, const void *data,
54  void (*evaluate)(const double *par, int m_dat, const void *data, double *fvec, int *info),
55  const lm_control_struct *control, lm_status_struct *status,
56  void (*printout)(int n_par, const double *par, int m_dat, const void *data, const double *fvec,
57  int printflags, int iflag, int iter, int nfev));
58 
61 /* Alternative to lm_minimize, allowing full control, and read-out
62  of auxiliary arrays. For usage, see implementation of lmmin. */
63 void lm_lmdif(int m, int n, double *x, double *fvec, double ftol, double xtol, double gtol, int maxfev, double epsfcn,
64  double *diag, int mode, double factor, int *info, int *nfev, double *fjac, int *ipvt, double *qtf,
65  double *wa1, double *wa2, double *wa3, double *wa4,
66  void (*evaluate)(const double *par, int m_dat, const void *data, double *fvec, int *info),
67  void (*printout)(int n_par, const double *par, int m_dat, const void *data, const double *fvec,
68  int printflags, int iflag, int iter, int nfev),
69  int printflags, const void *data);
70 
71 extern const char *lm_infmsg[];
72 extern const char *lm_shortmsg[];
73 
74 #ifdef __cplusplus
75 }
76 #endif
77 
78 #endif /* LMMIN_H */
lm_control_struct::ftol
double ftol
Definition: lmmin.h:24
lm_infmsg
const char * lm_infmsg[]
Definition: lmmin.cxx:65
lm_control_float
const lm_control_struct lm_control_float
Definition: lmmin.cxx:59
lm_status_struct::info
int info
Definition: lmmin.h:38
lm_shortmsg
const char * lm_shortmsg[]
Definition: lmmin.cxx:78
lm_control_struct::xtol
double xtol
Definition: lmmin.h:25
lm_control_struct
Definition: lmmin.h:23
lm_enorm
double lm_enorm(int, const double *)
Definition: lmmin.cxx:1206
lm_status_struct
Definition: lmmin.h:35
lm_control_struct::printflags
int printflags
Definition: lmmin.h:31
lmmin
void lmmin(int n_par, double *par, int m_dat, const void *data, void(*evaluate)(const double *par, int m_dat, const void *data, double *fvec, int *info), const lm_control_struct *control, lm_status_struct *status, void(*printout)(int n_par, const double *par, int m_dat, const void *data, const double *fvec, int printflags, int iflag, int iter, int nfev))
Definition: lmmin.cxx:135
lm_control_struct::scale_diag
int scale_diag
Definition: lmmin.h:30
lm_control_struct::epsilon
double epsilon
Definition: lmmin.h:27
lm_control_struct::stepbound
double stepbound
Definition: lmmin.h:28
lm_control_struct::gtol
double gtol
Definition: lmmin.h:26
lm_printout_std
void lm_printout_std(int n_par, const double *par, int m_dat, const void *data, const double *fvec, int printflags, int iflag, int iter, int nfev)
Definition: lmmin.cxx:86
lm_control_struct::maxcall
int maxcall
Definition: lmmin.h:29
lm_control_double
const lm_control_struct lm_control_double
Definition: lmmin.cxx:58
lm_lmdif
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, void(*evaluate)(const double *par, int m_dat, const void *data, double *fvec, int *info), void(*printout)(int n_par, const double *par, int m_dat, const void *data, const double *fvec, int printflags, int iflag, int iter, int nfev), int printflags, const void *data)
Definition: lmmin.cxx:207
lm_status_struct::nfev
int nfev
Definition: lmmin.h:37
lm_status_struct::fnorm
double fnorm
Definition: lmmin.h:36