[curve fitting] dependence between coefficients

Dear all -
I need to fit my experimental data (x_data, y_data) with a biexponential decay model:
% define fit options
fo_ = fitoptions('method','NonlinearLeastSquares','Lower',lower,'Upper',upper);
% define fittype
ft_ = fittype('offset+a*exp(-(x-x0)/b)+c*exp(-(x-x0)/d)',...
'dependent',{'y'},'independent',{'x'},...
'coefficients',{ 'offset', 'x0', 'a', 'b', 'c', 'd'});
% perform fit
[cf_, gof, output] = fit(x_data,y_data,ft_,fo_);
offset = y-offset
x0 = x-offset
a and c = amplitudes (weighing factors)
b and d = decay constants
As my experimental data are normalised, i.e. the decay occurs from 1 to 0, I would like to implement the following condition in my fitting routine: a + c = 1
How can I do this?
I appreciate your help!
Sebastian

 Accepted Answer

Replace occurrences of c in your model with 1-a. Then fit the remaining parameters.
ft_ = fittype('offset+a*exp(-(x-x0)/b)+(1-a)*exp(-(x-x0)/d)',...
'dependent',{'y'},'independent',{'x'},...
'coefficients',{ 'offset', 'x0', 'a', 'b', 'd'});

3 Comments

Dear Matt,
thank you for your reply! This would be an elegant solution to this particular problem.
However, how should I proceed if I was to perform a triexponential fit and the same condition should apply (amp1 + amp2 + amp3 = 1)?
Cheers, Sebastian
You could do the same thing.
amp1 = 1 - amp2 - amp3
The equation always allows one variable to be eliminated, no matter how many terms you have.
That is in fact true. :-)
Thanks for your help!

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!