.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
.    if \nF \{
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "lmcurve 3"
.TH lmcurve 3 "2015-11-27" "perl v5.20.2" "lmfit manual"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
lmcurve \- Levenberg\-Marquardt least\-squares fit of a curve (t,y)
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fB#include <lmcurve.h\fR>
.PP
\&\fBvoid lmcurve( const int\fR \fIn_par\fR\fB, double *\fR\fIpar\fR\fB, const int\fR \fIm_dat\fR\fB,
              const\ double *\fR\fIt\fR\fB, const\ double *\fR\fIy\fR\fB,
              double (*\fR\fIf\fR\fB)( const double \fR\fIti\fR\fB, const double *\fR\fIpar\fR\fB ),
              const\ lm_control_struct *\fR\fIcontrol\fR\fB,
              lm_status_struct *\fR\fIstatus\fR\fB);\fR
.PP
\&\fBvoid lmcurve_tyd(
              const int\fR \fIn_par\fR\fB, double *\fR\fIpar\fR\fB, const int\fR \fIm_dat\fR\fB,
              const\ double *\fR\fIt\fR\fB, const\ double *\fR\fIy\fR\fB, const\ double *\fR\fIdy\fR\fB,
              double (*\fR\fIf\fR\fB)( const double \fR\fIti\fR\fB, const double *\fR\fIpar\fR\fB ),
              const\ lm_control_struct *\fR\fIcontrol\fR\fB,
              lm_status_struct *\fR\fIstatus\fR\fB);\fR
.PP
\&\fBextern const lm_control_struct lm_control_double;\fR
.PP
\&\fBextern const lm_control_struct lm_control_float;\fR
.PP
\&\fBextern const char *lm_infmsg[];\fR
.PP
\&\fBextern const char *lm_shortmsg[];\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\fB\f(BIlmcurve()\fB\fR and \fB\f(BIlmcurve_tyd()\fB\fR wrap the more generic minimization function \fB\f(BIlmmin()\fB\fR, for use in curve fitting.
.PP
\&\fB\f(BIlmcurve()\fB\fR determines a vector \fIpar\fR that minimizes the sum of squared elements of a residue vector \fIr\fR[i] := \fIy\fR[i] \- \fIf\fR(\fIt\fR[i];\fIpar\fR). Typically, \fB\f(BIlmcurve()\fB\fR is used to approximate a data set \fIt\fR,\fIy\fR by a parametric function \fIf\fR(\fIti\fR;\fIpar\fR). On success, \fIpar\fR represents a local minimum, not necessarily a global one; it may depend on its starting value.
.PP
\&\fB\f(BIlmcurve_tyd()\fB\fR does the same for a data set \fIt\fR,\fIy\fR,\fIdy\fR, where \fIdy\fR represents the standard deviation of empirical data \fIy\fR. Residues are computed as \fIr\fR[i] := (\fIy\fR[i] \- \fIf\fR(\fIt\fR[i];\fIpar\fR))/\fIdy\fR[i]. Users must ensure that all \fIdy\fR[i] are positive.
.PP
Function arguments:
.IP "\fIn_par\fR" 4
.IX Item "n_par"
Number of free variables.
Length of parameter vector \fIpar\fR.
.IP "\fIpar\fR" 4
.IX Item "par"
Parameter vector.
On input, it must contain a reasonable guess.
On output, it contains the solution found to minimize ||\fIr\fR||.
.IP "\fIm_dat\fR" 4
.IX Item "m_dat"
Number of data points.
Length of vectors \fIt\fR and \fIy\fR.
Must statisfy \fIn_par\fR <= \fIm_dat\fR.
.IP "\fIt\fR" 4
.IX Item "t"
Array of length \fIm_dat\fR.
Contains the abcissae (time, or \*(L"x\*(R") for which function \fIf\fR will be evaluated.
.IP "\fIy\fR" 4
.IX Item "y"
Array of length \fIm_dat\fR.
Contains the ordinate values that shall be fitted.
.IP "\fIdy\fR" 4
.IX Item "dy"
Only in \fB\f(BIlmcurve_tyd()\fB\fR.
Array of length \fIm_dat\fR.
Contains the standard deviations of the values \fIy\fR.
.IP "\fIf\fR" 4
.IX Item "f"
A user-supplied parametric function \fIf\fR(ti;\fIpar\fR).
.IP "\fIcontrol\fR" 4
.IX Item "control"
Parameter collection for tuning the fit procedure.
In most cases, the default &\fIlm_control_double\fR is adequate.
If \fIf\fR is only computed with single-precision accuracy,
\&\fI&lm_control_float\fR should be used.
Parameters are explained in \fB\f(BIlmmin\fB\|(3)\fR.
.IP "\fIstatus\fR" 4
.IX Item "status"
A record used to return information about the minimization process:
For details, see \fB\f(BIlmmin\fB\|(3)\fR.
.SH "EXAMPLE"
.IX Header "EXAMPLE"
Fit a data set y(x) by a curve f(x;p):
.PP
.Vb 2
\&    #include "lmcurve.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 */
\&
\&        /* 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 };
\&
\&        lm_control_struct control = lm_control_double;
\&        lm_status_struct status;
\&        control.verbosity = 7;
\&
\&        printf( "Fitting ...\en" );
\&        lmcurve( n, par, m, t, y, f, &control, &status );
\&
\&        printf( "Results:\en" );
\&        printf( "status after %d function evaluations:\en  %s\en",
\&                status.nfev, lm_infmsg[status.outcome] );
\&
\&        printf("obtained parameters:\en");
\&        for ( i = 0; i < n; ++i)
\&            printf("  par[%i] = %12g\en", i, par[i]);
\&        printf("obtained norm:\en  %12g\en", status.fnorm );
\&
\&        printf("fitting data as follows:\en");
\&        for ( i = 0; i < m; ++i)
\&            printf( "  t[%2d]=%4g y=%6g fit=%10g residue=%12g\en",
\&                    i, t[i], y[i], f(t[i],par), y[i] \- f(t[i],par) );
\&
\&        return 0;
\&    }
.Ve
.SH "COPYING"
.IX Header "COPYING"
Copyright (C) 2009\-2015 Joachim Wuttke, Forschungszentrum Juelich GmbH
.PP
Software: FreeBSD License
.PP
Documentation: Creative Commons Attribution Share Alike
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\fBlmmin\fR(3)
.PP
Homepage: http://apps.jcns.fz\-juelich.de/lmfit
.SH "BUGS"
.IX Header "BUGS"
Please send bug reports and suggestions to the author <j.wuttke@fz\-juelich.de>.
