How do I find the coefficients of a function for a curve fit?
Mostrar comentarios más antiguos
I have the data:
X = [0; 0.5; ...]
Y = [0; 0.8; ...]
And the function to which I want to model the data:
F = a + exp ^ (- x * b)
How do I find "a" and "b" for a good curve fit?
I should not use cftool.
7 comentarios
Martín Menéndez
el 22 de Abr. de 2017
Image Analyst
el 22 de Abr. de 2017
This second question is basically just a slight modification of what I did below. It's just a couple of terms more. Can you take what I did below and make the easy changes so that it will handle this second equation?
Martín Menéndez
el 22 de Abr. de 2017
Editada: Martín Menéndez
el 22 de Abr. de 2017
Image Analyst
el 22 de Abr. de 2017
I don't know your definition of dispersed. To me it looks like each point is at a different location so they are dispersed. Let's see my code that you adapted for this new formula. I'll check back later tonight.
Martín Menéndez
el 22 de Abr. de 2017
Editada: Walter Roberson
el 23 de Abr. de 2017
Image Analyst
el 23 de Abr. de 2017
So, if it worked, could you "Accept" my answer below?
Walter Roberson
el 23 de Abr. de 2017
> In nlinfit>LMfit (line 579)
In nlinfit (line 276)
In NonLinearModel/fitter (line 1123)
In classreg.regr.FitObject/doFit (line 94)
In NonLinearModel.fit (line 1430)
In fitnlm (line 94)
In guava (line 49)
Warning: Rank deficient, rank = 3, tol = 1.458001e-13.
> In nlinfit>LMfit (line 579)
In nlinfit (line 276)
In NonLinearModel/fitter (line 1123)
In classreg.regr.FitObject/doFit (line 94)
In NonLinearModel.fit (line 1430)
In fitnlm (line 94)
In guava (line 49)
Warning: Rank deficient, rank = 3, tol = 1.451491e-13.
> In nlinfit>LMfit (line 579)
In nlinfit (line 276)
In NonLinearModel/fitter (line 1123)
In classreg.regr.FitObject/doFit (line 94)
In NonLinearModel.fit (line 1430)
In fitnlm (line 94)
In guava (line 49)
Warning: Rank deficient, rank = 3, tol = 1.450838e-13.
Warning: Some columns of the Jacobian are effectively zero at the solution, indicating that the model is insensitive to some of its parameters. That may be
because those parameters are not present in the model, or otherwise do not affect the predicted values. It may also be due to numerical underflow in the model
function, which can sometimes be avoided by choosing better initial parameter values, or by rescaling or recentering. Parameter estimates may be unreliable.
> In nlinfit (line 373)
In NonLinearModel/fitter (line 1123)
In classreg.regr.FitObject/doFit (line 94)
In NonLinearModel.fit (line 1430)
In fitnlm (line 94)
In guava (line 49)
Respuesta aceptada
Más respuestas (2)
Walter Roberson
el 22 de Abr. de 2017
1 voto
The best I find for the 7-coefficient model, using custom code that I have not released, is
[1.95345951298651754, -0.271402425481958642, 0.114129599568334961, 0.6048791673085121, 0.000138307518530737773, 1.61189969373566888, -0.0124593500324885736]
You can get much the same result using cftool if you adjust the bounds. For example for each positive number above, set the lower bound to 0 and upper to 2; and for each negative number above set the lower bound to -2 and the upper to 0.
I evaluated over a large range of coefficients; there are some other locations that are not bad, but this was the best I found. For example, at
[1.95618718619627652, -0.206949316792977123, 48925.8303936270968, 1.56148395793133599, 0.011815555675624435, 0.601652543952944985, -0.000134723232812764676]
the residue is only about 15% larger.
1 comentario
Walter Roberson
el 23 de Abr. de 2017
For your reduced system with 5 coefficients,
Y= a-b*exp(-c*X)-d*exp(-e*X)
there are two minima that are equivalent, one near
[1.96086280008987 0.596272887303567 0.000128842293439593 1.50536232706941 0.0109031671832912]
and the other near
[1.96086281505995 1.50536227966151 0.0109031664979331 0.596272910300341 0.000128842291110631]
You can get close to the first of those in a fraction of a second using cftool custom equation and using the Fit Options to constrain each of the parameters between 0 and 2.
Alex Sha
el 24 de Feb. de 2020
The below should be the best solution:
Root of Mean Square Error (RMSE): 0.0255893453091926
Sum of Squared Residual: 0.047146650721423
Correlation Coef. (R): 0.999022475612635
R-Square: 0.998045906779199
Adjusted R-Square: 0.997989266395987
Determination Coef. (DC): 0.998045906779199
Chi-Square: 0.0562099503181627
F-Statistic: 5533.08505193596
Parameter Best Estimate
---------- -------------
a 1.95345951949563
b -0.271402458132563
c 0.114129545758927
d 1.61189973355979
e 0.0124593503150589
f 0.604879174590309
g -0.000138307512053813
Categorías
Más información sobre Get Started with Curve Fitting Toolbox en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

