How do I find the coefficients of a function for a curve fit?
Show older comments
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 Comments
Martín Menéndez
on 22 Apr 2017
Image Analyst
on 22 Apr 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
on 22 Apr 2017
Edited: Martín Menéndez
on 22 Apr 2017
Image Analyst
on 22 Apr 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
on 22 Apr 2017
Edited: Walter Roberson
on 23 Apr 2017
Image Analyst
on 23 Apr 2017
So, if it worked, could you "Accept" my answer below?
Walter Roberson
on 23 Apr 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)
Accepted Answer
More Answers (2)
Walter Roberson
on 22 Apr 2017
1 vote
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 Comment
Walter Roberson
on 23 Apr 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
on 24 Feb 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
Categories
Find more on Get Started with Curve Fitting Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
