Nonlinear Curve Fitting with
lsqcurvefit enables you to fit parameterized nonlinear functions to data easily. You can also use
lsqcurvefit is simply a convenient way to call
lsqnonlin for curve fitting.
In this example, the vector
xdata represents 100 data points, and the vector
ydata represents the associated measurements. Generate the data for the problem.
rng(5489,'twister') % reproducible xdata = -2*log(rand(100,1)); ydata = (ones(100,1) + .1*randn(100,1)) + (3*ones(100,1)+... 0.5*randn(100,1)).*exp((-(2*ones(100,1)+... .5*randn(100,1))).*xdata);
The modeled relationship between
The code generates
xdata from 100 independent samples of an exponential distribution with mean 2. The code generates
ydata from its defining equation using
a = [1;3;2], perturbed by adding normal deviates with standard deviations
The goal is to find parameters , = 1, 2, 3, for the model that best fit the data.
In order to fit the parameters to the data using
lsqcurvefit, you need to define a fitting function. Define the fitting function
predicted as an anonymous function.
predicted = @(a,xdata) a(1)*ones(100,1)+a(2)*exp(-a(3)*xdata);
To fit the model to the data,
lsqcurvefit needs an initial estimate
a0 of the parameters.
a0 = [2;2;2];
lsqcurvefit to find the best-fitting parameters .
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =... lsqcurvefit(predicted,a0,xdata,ydata);
Local minimum possible. lsqcurvefit stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
Examine the resulting parameters.
1.0169 3.1444 2.1596
The fitted values
ahat are within 8% of
a = [1;3;2].
If you have the Statistics and Machine Learning Toolbox™ software, use the
nlparci function to generate confidence intervals for the