How can I make an exponential fit with offset?

Hello, since Matlab does not provide a built-in exponential fit function with an offset I would like to create one by myself. I use the Curve Fitting Tool and enter as a custom equation: f(x) = a*exp(b*x)+c However the tool is not performing a correct fit. If I use the built-in exponential fit (2 terms) I obtain a smooth fit, where the time constant of the second term is set to zero and thereby creating the correct offset. Do I have to adjust the start values or why is the custom equation not yielding a good fit? Regards

Answers (2)

The easy way is to create your own anonymous function:
f = @(b,x) b(1).*exp(b(2).*x) + b(3);

4 Comments

twig27
twig27 on 26 Jan 2017
Edited: twig27 on 26 Jan 2017
okay, and how do I perform a fit with that? How would the code look like if the data to be fitted is: y_signal,x_time ?
Use fminsearch.
The Code:
y_signal = ...;
x_time = ...;
f = @(b,x) b(1).*exp(b(2).*x) + b(3);
nrmrsd = @(b) norm(y_signal - f(b,x_time)) % Residual Norm Cost Function
B0 = rand(3,1); % Choose Appropriate Initial Estimates
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
x_plot = linspace(min(x_time), max(x_time));
figure(1)
plot(x_time, y_signal, 'pg')
hold on
plot(x_plot, f(B,x_plot, '-r')
hold off
grid
xlabel('Time')
ylabel('Signal')
legend('Data', 'Fit', 'Location','NE')
This is how I would do it, or with nlinfit and its friends if I wanted statistics.
Thank you Star Strider!
@patrick —
My pleasure!

Sign in to comment.

You can use fitnlm() in the attached test.m file.

Categories

Asked:

on 26 Jan 2017

Commented:

on 24 Sep 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!