Curve fitting to data using fit

2 vues (au cours des 30 derniers jours)
Editor
Editor le 11 Oct 2022
Commenté : Cris LaPierre le 11 Oct 2022
I have data x sampled at times t. I would like to fit my function to this data. Below is a code.
clear; close all
x=[100; 85.4019292604501; 77.9310344827586; 79.3365583966828; 70.3524533;
13.213644524237; 24.5654917953199; 12.6526340272125;
9.71822886716503; 9.99113213124446; 10.525];
t=[0; 24; 24; 24; 24; 48; 48; 48; 72; 72; 72;];
mdl=fittype('A*exp((-C.*(1-exp(-lambda.*t))/lambda)-(D*(exp(-lambda.*t)-1+lambda.*t)/lambda^2))','indep','t');
fittedmdl = fit(t,x,mdl,'start',[0.1 0.1 0.1 0.1])
fittedmdl =
General model: fittedmdl(t) = A*exp((-C.*(1-exp(-lambda.*t))/lambda)-(D*(exp(-lambda.*t) -1+lambda.*t)/lambda^2)) Coefficients (with 95% confidence bounds): A = 100 (84.3, 115.7) C = -120.9 (-9.45e+09, 9.45e+09) D = 6.135 (-4.793e+08, 4.793e+08) lambda = 105.9 (-8.273e+09, 8.273e+09)
plot(fittedmdl,'k.')
hold on
plot(t,x,'.m', MarkerSize=20)
And I obtain the following figure:
I am not impressed with the fitting. Can someone please check where I could be going wrong. Thanks in anticipation.
  9 commentaires
Editor
Editor le 11 Oct 2022
Thank you all for your constructive comments. I can tell that one of the problem could be the poor choice of initial conditions for this complex model. I will try though to play around with the initial condtions to see whether anything good can come out.
Thank you once again
Cris LaPierre
Cris LaPierre le 11 Oct 2022
Just responding about the missing negative sign. The negative sign before C has been applied to the contents inside parentheses. So it is there.
-C(1-exp(t)) is the same as C(exp(t)-1)

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 11 Oct 2022
Modifié(e) : Matt J le 11 Oct 2022
x=[100; 85.4019292604501; 77.9310344827586; 79.3365583966828; 70.3524533;
13.213644524237; 24.5654917953199; 12.6526340272125;
9.71822886716503; 9.99113213124446; 10.525];
t=[0; 24; 24; 24; 24; 48; 48; 48; 72; 72; 72;];
mdl=fittype('A*exp((-C.*(1-exp(-lambda.*t))/lambda)-(D*(exp(-lambda.*t)-1+lambda.*t)/lambda^2))','indep','t');
fittedmdl = fit(t,x,mdl,'start',[100 0.1 0.1 0.1],'Lower',[0 0 0 0])
fittedmdl =
General model: fittedmdl(t) = A*exp((-C.*(1-exp(-lambda.*t))/lambda)-(D*(exp(-lambda.*t) -1+lambda.*t)/lambda^2)) Coefficients (with 95% confidence bounds): A = 108.1 (88.32, 128) C = 4.114e-14 (fixed at bound) D = 0.001322 (0.0002522, 0.002393) lambda = 8.823e-07 (-0.0381, 0.0381)
H=plot(fittedmdl,t,x);
H(1).MarkerSize=20; H(1).Color='m';
H(2).Color='k';H(2).LineWidth=2;
  1 commentaire
Editor
Editor le 11 Oct 2022
Thank you @Matt J for your help

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Interpolation dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by