curve fitting without the toolbox
143 views (last 30 days)
Show older comments
Hello,
I would like to ask if there are any functions that can I use to fit two series of data without using the Curve Fitting Toolbox.
For example is there a built-in function to fit the data through the "Exponential" type of fitting
a*exp(b*x)
that is found in the toolbox?
If not, how can I write one that performs the "Exponential" fitting?
Thank you very much.
Best,
Pavlos
0 Comments
Accepted Answer
Star Strider
on 17 Apr 2014
There are the functions lsqcurvefit (Optimization Toolbox) and nlinfit (Statistics Toolbox) that will fit an objective function you provide. They each have their own advantages and disadvantages, depending upon what you want to do.
If you don’t have those, using the MATLAB core function fminsearch can do the nonlinear fit with an additional line of code (the OLS cost function). (See the fminsearch documentation for details on what it does and how it works.)
This works:
y = @(b,x) b(1).*exp(-b(2).*x); % Objective function
p = [3; 5]*1E-1; % Create data
x = linspace(1, 10);
yx = y(p,x) + 0.1*(rand(size(x))-0.5);
OLS = @(b) sum((y(b,x) - yx).^2); % Ordinary Least Squares cost function
opts = optimset('MaxFunEvals',50000, 'MaxIter',10000);
B = fminsearch(OLS, rand(2,1), opts) % Use ‘fminsearch’ to minimise the ‘OLS’ function
figure(1)
plot(x, yx, '*b')
hold on
plot(x, y(B,x), '-r')
hold off
grid
0 Comments
More Answers (1)
See Also
Categories
Find more on Linear and Nonlinear Regression in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!