ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
lmcurve.cxx
Go to the documentation of this file.
1 /*
2  * Project: LevenbergMarquardtLeastSquaresFitting
3  *
4  * File: lmcurve.c
5  *
6  * Contents: Simplified wrapper for one-dimensional curve fitting,
7  * using Levenberg-Marquardt least-squares minimization.
8  *
9  * Usage: see application sample demo/curve1.c
10  *
11  * Author: Joachim Wuttke 2010
12  *
13  * Homepage: joachimwuttke.de/lmfit
14  */
15 
16 #include "lmmin.h"
17 
18 using lmcurve_data_struct = struct {
19  const double *t;
20  const double *y;
21  double (*f)(double t, const double *par);
22 };
23 
24 void lmcurve_evaluate(const double *par, int m_dat, const void *data, double *fvec, int *info)
25 {
26  int i = 0;
27  for (i = 0; i < m_dat; i++)
28  fvec[i] = ((lmcurve_data_struct *)data)->y[i] -
29  ((lmcurve_data_struct *)data)->f(((lmcurve_data_struct *)data)->t[i], par);
30  // *info = *info; /* to prevent a 'unused variable' warning */
31 }
32 
33 void lmcurve_fit(int n_par, double *par, int m_dat, const double *t, const double *y,
34  double (*f)(double t, const double *par), const lm_control_struct *control, lm_status_struct *status)
35 {
36  lmcurve_data_struct data = {t, y, f};
37 
38  lmmin(n_par, par, m_dat, (const void *)&data, lmcurve_evaluate, control, status, lm_printout_std);
39 }
lmmin.h
lmcurve_evaluate
void lmcurve_evaluate(const double *par, int m_dat, const void *data, double *fvec, int *info)
Definition: lmcurve.cxx:24
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
Definition: lmmin.h:23
f
double(* f)(double t, const double *par)
Definition: lmcurve.cxx:21
lm_status_struct
Definition: lmmin.h:35
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
y
const double * y
Definition: lmcurve.cxx:20
lmcurve_fit
void lmcurve_fit(int n_par, double *par, int m_dat, const double *t, const double *y, double(*f)(double t, const double *par), const lm_control_struct *control, lm_status_struct *status)
Definition: lmcurve.cxx:33
lmcurve_data_struct
struct { const double *t lmcurve_data_struct
Definition: lmcurve.cxx:19