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::lmcurve2(3) lmfit manual wrkdirs::usr::ports::math::lmfit::work::lmfit-v9.0::man::lmcurve2(3)

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

#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[];

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:

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||.
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.
Covariance matrix. Array of length n_par * n_par or NULL. On output, unless it is NULL, it contains the covariance matrix.
Number of data points. Length of vectors t, y, dy. 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.
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 lmmin2(3).
A record used to return information about the minimization process: For details, see lmmin2(3).

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;
    }

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

Software: FreeBSD License

Documentation: Creative Commons Attribution Share Alike

lmmin2(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.