Custom Fit Fit options

I have created a custom fittype and tried let MATLAB itself find the starting point, given lower and upper bounds that I specify. However, those bounds seem to have been ignored when the fit process was performed (see attachments). Does anyone know how I can force MATLAB to search for the coefficients between the bounds I have specified? Thank you.

Answers (1)

Matt J
Matt J on 22 Jun 2018
Edited: Matt J on 23 Jun 2018

0 votes

The bounds weren't ignored. You defined them in "Options", but just forgot to pass Options to the fitting routine.

4 Comments

J.S.
J.S. on 25 Jun 2018
Hello Matt,
Thanks for the suggestion. I tried including Options in my fit call (see attachment), but I'm getting an error. Do you know I can fix my syntax in f_norm? Thanks!
It would help us both if you would copy/paste your code and errors/output into your posts, rather than communicating them via screenshots. That way, it is easier for people to copy/paste modifications of the code for you.
Sorry about that.
x0=0.6; y0=0.6;
HOF=fittype('a*exp(b*(x-x0))+c*exp(d*(x-x0))+y0','coefficients',{'a','b'...
'c','d'},'problem',{'x0','y0'},'independent','x');
L=[0,(-1/(0.1e-9)),0,(-1/(0.1e-9))];
U=[1,(-1/(1e-6)),1,(-1/(1e-6))];
Op=fitoptions(HOF);
Op.Lower=L;
Op.Upper=U;
f_normTEST=fit(binTimeCol,bindataColNorm,HOF,'problem',{x0,y0},Op);
binTimeCol and bindataColNorm are two column vectors of the same length.
Matt J
Matt J on 25 Jun 2018
Edited: Matt J on 25 Jun 2018
Well, the problem is probably that you are now constraining b,d to a region where the exp() operations overflow to infinity, as in the following:
>> exp(1000)
ans =
Inf
You need to double-check the magnitudes of (x-x0) to be sure that range is sensible.
One other remark. I recommend reformulating the model as follows
U=[1,(-1/(1e-6)),1,-1];
HOF=fittype('a*exp(b*X)+c*exp((b+d)*X)',...
'coefficients',{'a','b','c','d'},'independent','X');
f_normTEST=fit(binTimeCol-x0,bindataColNorm-y0,HOF,Op);
There are 2 main changes. First, the input data is pre-offset by x0,y0 so that the fitting routine doesn't have to repeat it unnecessarily in every iteration. Second, one of the exponential parameters is now represented as b+d. This tells the solver that those parameters are meant to be nonequal, since that would make a,c ambiguous.

Sign in to comment.

Products

Release

R2015b

Asked:

on 22 Jun 2018

Edited:

on 25 Jun 2018

Community Treasure Hunt

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

Start Hunting!