# Custom fit to negative exponential

4 views (last 30 days)
Timothy Tuong on 10 Oct 2021
Edited: Matt J on 10 Oct 2021
I am trying to custom fit the data set below into a negative expential in form of "-b*exp(-c*x)+a"
x = [73.1, 94, 100, 130, 150, 184, 192, 200];
y = [0.25, 0.6, 0.65, 0.9, 0.91, 0.94, 0.95, 1];
%Custom fit to -b*exp(-c*x)+a
cftool
But seems as though I am only getting a line.

Matt J on 10 Oct 2021
Edited: Matt J on 10 Oct 2021
Possibly you have to supply a better initial guess. In any case, I would recommend fminspleas (Download) for this problem, which only requires an initial guess for the c parameter.
x = [73.1, 94, 100, 130, 150, 184, 192, 200];
y = [0.25, 0.6, 0.65, 0.9, 0.91, 0.94, 0.95, 1];
funlist= {1 , @(c,x) -exp(-c*x(:)) };
[c,ab]=fminspleas(funlist,0,x,y);
Warning: Rank deficient, rank = 1, tol = 5.024296e-15.
a=ab(1);
b=ab(2);
xup=linspace(min(x),max(x));
fun=@(x) a-b*exp(-c*x(:));
plot(x,y,'o',xup,fun(xup)) Matt J on 10 Oct 2021
Edited: Matt J on 10 Oct 2021
You don't need a custom fit for your model. You can use the exp2 model,
Y = a*exp(b*x)+c*exp(d*x)
but put upper and lower bounds of zero on the d parameter (and thus ensure that d=0).
For that matter, it will also help the solver if you put an upper bound of 0 on a and a lower bounds of zero on b and c, since it is obvious from the shape of the data that those bounds should be satisfied at the solution.