Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
wrkdirs::usr...man::lmcurve2(3)	 lmfit manual  wrkdirs::usr...man::lmcurve2(3)

NAME
       lmcurve2	- Levenberg-Marquardt least-squares fit	of a curve (t,y,dy)

SYNOPSIS
       #include	<lmcurve2.h>

       void lmcurve2(
		     const int n_par, double *par,
		     double *parerr, double *covar,
		     const int m_dat, const double *t,
		     const double *y, const double *dy,
		     double (*f)( const	double ti, const double	*par ),
		     const lm_control_struct *control,
		     lm_status_struct *status);

       extern const lm_control_struct lm_control_double;

       extern const lm_control_struct lm_control_float;

       extern const char *lm_infmsg[];

       extern const char *lm_shortmsg[];

DESCRIPTION
       lmcurve2() wraps	the more generic minimization function lmmin2(), for
       use in curve fitting.

       lmcurve2() determines a vector par that minimizes the sum of squared
       elements	of a residue vector r[i] := (y[i] - f(t[i];par)) / dy[i].
       Typically, lmcurve2() is	used to	approximate a data set t,y,dy, where
       dy represents the standard deviation of empirical data y, by a
       parametric function f(ti;par). On success, par represents a local
       minimum,	not necessarily	a global one; it may depend on its starting
       value. Users must ensure	that all dy[i] are positive.

       Function	arguments:

       n_par
	   Number of free variables.  Length of	parameter vector par.

       par Parameter  vector.	On  input, it must contain a reasonable	guess.
	   On output, it contains the solution found to	minimize ||r||.

       parerr
	   Parameter uncertainties vector.  Array of length n_par or NULL.  On
	   output, unless it or	 covar	is  NULL,  it  contains	 the  weighted
	   parameter uncertainties for the found parameters.

       covar
	   Covariance  matrix.	 Array	of  length  n_par * n_par or NULL.  On
	   output, unless it is	NULL, it contains the covariance matrix.

       m_dat
	   Number of data points.  Length of vectors t,	y, dy.	Must  statisfy
	   n_par <= m_dat.

       t   Array  of  length  m_dat.  Contains the abcissae (time, or "x") for
	   which function f will be evaluated.

       y   Array of length m_dat.  Contains the	ordinate values	that shall  be
	   fitted.

       dy  Array  of  length  m_dat.   Contains	the standard deviations	of the
	   values y.

       f   A user-supplied parametric function f(ti;par).

       control
	   Parameter collection	for tuning the fit procedure.  In most	cases,
	   the	default	&lm_control_double is adequate.	 If f is only computed
	   with	single-precision accuracy, &lm_control_float should  be	 used.
	   Parameters are explained in lmmin2(3).

       status
	   A record used to return information about the minimization process:
	   For details,	see lmmin2(3).

EXAMPLE
       Fit a data set y(x) with	standard deviations dy(x) by a curve f(x;p):

	   #include "lmcurve2.h"
	   #include <stdio.h>

	   /* model function: a	parabola */

	   double f( double t, const double *p )
	   {
	       return p[0] + p[1]*t + p[2]*t*t;
	   }

	   int main()
	   {
	       int n = 3; /* number of parameters in model function f */
	       double par[3] = { 100, 0, -10 };	/* really bad starting value */
	       double parerr[3];
	       double covar[3*3];

	       /* data points: a slightly distorted standard parabola */
	       int m = 9;
	       int i;
	       double t[9] = { -4., -3., -2., -1.,  0.,	1.,  2.,  3.,  4. };
	       double y[9] = { 16.6, 9.9, 4.4, 1.1, 0.,	1.1, 4.2, 9.3, 16.4 };
	       double dy[9] = {	4, 3, 2, 1, 2, 3, 4, 5,	6 };

	       lm_control_struct control = lm_control_double;
	       lm_status_struct	status;
	       control.verbosity = 1;

	       printf( "Fitting	...\n" );
	       /* now the call to lmfit	*/
	       lmcurve2( n, par, parerr, covar,	m, t, y, dy, f,	&control, &status );

	       printf( "Results:\n" );
	       printf( "status after %d	function evaluations:\n	 %s\n",
		       status.nfev, lm_infmsg[status.outcome] );

	       printf("obtained	parameters:\n");
	       for ( i = 0; i <	n; ++i)
		   printf("  par[%i] = %12g  uncertainty = %12g\n", i, par[i], parerr[i]);
	       printf("obtained	norm:\n	 %12g\n", status.fnorm );

	       printf("fitting data as follows:\n");
	       for ( i = 0; i <	m; ++i)
		   printf(
		   "  t[%1d]=%2g y=%5.1f+-%4.1f	fit=%8.5f residue=%8.4f	weighed=%8.4f\n",
		   i, t[i], y[i], dy[i], f(t[i],par), y[i] - f(t[i],par),
		   (y[i] - f(t[i],par))/dy[i] );

	       return 0;
	   }

COPYING
       Copyright (C) 2009-2015 Joachim Wuttke, Forschungszentrum Juelich GmbH

       Software: FreeBSD License

       Documentation: Creative Commons Attribution Share Alike

SEE ALSO
       lmmin2(3)

       Homepage: https://jugit.fz-juelich.de/mlz/lmfit

BUGS
       Please	 send	 bug   reports	 and   suggestions   to	  the	author
       <j.wuttke@fz-juelich.de>.

perl v5.36.3			  2021-06-10   wrkdirs::usr...man::lmcurve2(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=lmcurve2&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help