Fitting a Curve to Data
This section gives an example that shows how to fit an exponential function of the form to some data. The example uses the function
fminsearch to minimize the sum of squares of errors between the data and an exponential function for varying parameters A and . This section covers the following topics.
Creating an M-file for the Example
To run the example, first create an M-file that
To do so, copy and paste the following code into an M-file and save it as
fitcurvedemo in a directory on the MATLAB path.
function [estimates, model] = fitcurvedemo(xdata, ydata) % Call fminsearch with a random starting point. start_point = rand(1, 2); model = @expfun; estimates = fminsearch(model, start_point); % expfun accepts curve parameters as inputs, and outputs sse, % the sum of squares error for A * exp(-lambda * xdata) - ydata, % and the FittedCurve. FMINSEARCH only needs sse, but we want to % plot the FittedCurve at the end. function [sse, FittedCurve] = expfun(params) A = params(1); lambda = params(2); FittedCurve = A .* exp(-lambda * xdata); ErrorVector = FittedCurve - ydata; sse = sum(ErrorVector .^ 2); end end
The M-file calls the function
fminsearch, which find parameters
A and lambda that minimize the sum of squares of the differences between the data and the exponential function
A*exp(-lambda*t). The nested function
expfun computes the sum of squares.
Running the Example
To run the example, first create some random data to fit. The following commands create random data that is approximately exponential with parameters
A = 40 and
lambda = .5.
To fit an exponential function to the data, enter
This returns estimates for the parameters
and a function handle,
model, to the function that computes the exponential function
Plotting the Results
To plot the fit and the data, enter the following commands.
The resulting plot displays the data points and the exponential fit.
|Minimizing Functions of Several Variables||Setting Minimization Options|
© 1994-2005 The MathWorks, Inc.