GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
wrkdirs::usr::ports::math::lmfit::work::lmfit-v9.0::man::lmcurve(3) lmfit manual wrkdirs::usr::ports::math::lmfit::work::lmfit-v9.0::man::lmcurve(3)

lmcurve - Levenberg-Marquardt least-squares fit of a curve (t,y)

#include <lmcurve.h>

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

void lmcurve_tyd(
const int n_par, double *par, 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[];

lmcurve() and lmcurve_tyd() wrap the more generic minimization function lmmin(), for use in curve fitting.

lmcurve() determines a vector par that minimizes the sum of squared elements of a residue vector r[i] := y[i] - f(t[i];par). Typically, lmcurve() is used to approximate a data set t,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.

lmcurve_tyd() does the same for a data set t,y,dy, where dy represents the standard deviation of empirical data y. Residues are computed as r[i] := (y[i] - f(t[i];par))/dy[i]. Users must ensure that all dy[i] are positive.

Function arguments:

Number of free variables. Length of parameter vector par.
Parameter vector. On input, it must contain a reasonable guess. On output, it contains the solution found to minimize ||r||.
Number of data points. Length of vectors t and y. Must statisfy n_par <= m_dat.
Array of length m_dat. Contains the abcissae (time, or "x") for which function f will be evaluated.
Array of length m_dat. Contains the ordinate values that shall be fitted.
Only in lmcurve_tyd(). Array of length m_dat. Contains the standard deviations of the values y.
A user-supplied parametric function f(ti;par).
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 lmmin(3).
A record used to return information about the minimization process: For details, see lmmin(3).

Fit a data set y(x) by a curve f(x;p):

    #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 ...\n" );
        lmcurve( n, par, m, t, y, 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\n", i, par[i]);
        printf("obtained norm:\n  %12g\n", status.fnorm );
        printf("fitting data as follows:\n");
        for ( i = 0; i < m; ++i)
            printf( "  t[%2d]=%4g y=%6g fit=%10g residue=%12g\n",
                    i, t[i], y[i], f(t[i],par), y[i] - f(t[i],par) );
        return 0;
    }

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

Software: FreeBSD License

Documentation: Creative Commons Attribution Share Alike

lmmin(3)

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

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

2021-06-10 perl v5.40.2

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.