/* * Library: lmfit (Levenberg-Marquardt least squares fitting) * * File: lmmin.h * * Contents: Declarations for Levenberg-Marquardt minimization. * * Copyright: Joachim Wuttke, Forschungszentrum Juelich GmbH (2004-2013) * * License: see ../COPYING (FreeBSD) * * Homepage: apps.jcns.fz-juelich.de/lmfit */ #ifndef LMMIN_H #define LMMIN_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 #include "lmstruct.h" __BEGIN_DECLS /* Levenberg-Marquardt minimization. */ void lmmin(const int n_par, double* par, const int m_dat, const void* data, void (*evaluate)(const double* par, const int m_dat, const void* data, double* fvec, int* userbreak), const lm_control_struct* control, lm_status_struct* status); /* * This routine contains the core algorithm of our library. * * It minimizes the sum of the squares of m nonlinear functions * in n variables by a modified Levenberg-Marquardt algorithm. * The function evaluation is done by the user-provided routine 'evaluate'. * The Jacobian is then calculated by a forward-difference approximation. * * Parameters: * * n is the number of variables (INPUT, positive integer). * * x is the solution vector (INPUT/OUTPUT, array of length n). * On input it must be set to an estimated solution. * On output it yields the final estimate of the solution. * * m is the number of functions to be minimized (INPUT, positive integer). * It must fulfill m>=n. * * data is a pointer that is ignored by lmmin; it is however forwarded * to the user-supplied functions evaluate and printout. * In a typical application, it contains experimental data to be fitted. * * evaluate is a user-supplied function that calculates the m functions. * Parameters: * n, x, m, data as above. * fvec is an array of length m; on OUTPUT, it must contain the * m function values for the parameter vector x. * userbreak is an integer pointer. When *userbreak is set to a * nonzero value, lmmin will terminate. * * control contains INPUT variables that control the fit algorithm, * as declared and explained in lmstruct.h * * status contains OUTPUT variables that inform about the fit result, * as declared and explained in lmstruct.h */ /* Refined calculation of Eucledian norm. */ double lm_enorm(int, const double*); __END_DECLS #endif /* LMMIN_H */