/* * 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 */