/*
* Library: lmfit (Levenberg-Marquardt least squares fitting)
*
* File: lmstruct.h
*
* Contents: Declarations of parameter records, used in lmmin.h and lmcurve.h
*
* Copyright: Joachim Wuttke, Forschungszentrum Juelich GmbH (2004-2013)
*
* License: see ../COPYING (FreeBSD)
*
* Homepage: apps.jcns.fz-juelich.de/lmfit
*/
#ifndef LMSTRUCT_H
#define LMSTRUCT_H
#undef __BEGIN_DECLS
#undef __END_DECLS
#ifdef __cplusplus
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
#else
#define __BEGIN_DECLS /* empty */
#define __END_DECLS /* empty */
#endif
__BEGIN_DECLS
#include <stdio.h>
/* Collection of input parameters for fit control. */
typedef struct {
double ftol; /* Relative error desired in the sum of squares.
Termination occurs when both the actual and
predicted relative reductions in the sum of squares
are at most ftol. */
double xtol; /* Relative error between last two approximations.
Termination occurs when the relative error between
two consecutive iterates is at most xtol. */
double gtol; /* Orthogonality desired between fvec and its derivs.
Termination occurs when the cosine of the angle
between fvec and any column of the Jacobian is at
most gtol in absolute value. */
double epsilon; /* Step used to calculate the Jacobian, should be
slightly larger than the relative error in the
user-supplied functions. */
double stepbound; /* Used in determining the initial step bound. This
bound is set to the product of stepbound and the
Euclidean norm of diag*x if nonzero, or else to
stepbound itself. In most cases stepbound should lie
in the interval (0.1,100.0). Generally, the value
100.0 is recommended. */
int patience; /* Used to set the maximum number of function evaluations
to patience*(number_of_parameters+1). */
int scale_diag; /* If 1, the variables will be rescaled internally.
Recommended value is 1. */
FILE* msgfile; /* Progress messages will be written to this file. */
int verbosity; /* OR'ed: 1: print some messages; 2: print Jacobian. */
int n_maxpri; /* -1, or max number of parameters to print. */
int m_maxpri; /* -1, or max number of residuals to print. */
} lm_control_struct;
/* Collection of output parameters for status info. */
typedef struct {
double fnorm; /* norm of the residue vector fvec. */
int nfev; /* actual number of iterations. */
int outcome; /* Status indicator. Nonnegative values are used as index
for the message text lm_infmsg, set in lmmin.c. */
int userbreak; /* Set when function evaluation requests termination. */
} lm_status_struct;
/* Preset (and recommended) control parameter settings. */
extern const lm_control_struct lm_control_double;
extern const lm_control_struct lm_control_float;
/* Preset message texts. */
extern const char* lm_infmsg[];
extern const char* lm_shortmsg[];
__END_DECLS
#endif /* LMSTRUCT_H */