summaryrefslogtreecommitdiff
path: root/src/lmfit/lmmin.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lmfit/lmmin.h')
-rw-r--r--src/lmfit/lmmin.h52
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