Curve fitting in MATLAB: different result form toolbox vs command line?

廉价感情. 提交于 2019-12-10 11:27:21

问题


This is the data I am using for Y data:

0.577032413537833
0.288198874369377
0.192282280031568
0.143824619265244
0.114952782524097
0.0960518606520442
0.0824041879978560
0.0719078360110914
0.0640919744028295
0.0572120310249072
0.0519630635470660
0.0479380073164273
0.0443712721513307

X is simply the integer value from 1 to 13 and I know that this is power function of form a*x^b+c from running GUI cftool on MATLAB with rather high R-square value (1)

To perform the fit on command line, I used:

>> g = fittype('a*x^b+c','coeff',{'a','b','c'})
>> x=1:13;
>> [c3,gof3] = fit(x',B3(:,1),g)

This results in

c3 =

 General model:
   c3(x) = a*x^b+c
 Coefficients (with 95% confidence bounds):
   a =        -179  (-1.151e+005, 1.148e+005)
   b =    0.001066  (-0.6825, 0.6847)
   c =       179.5  (-1.148e+005, 1.151e+005)

gof3 =

       sse: 0.0354
   rsquare: 0.8660
       dfe: 10
adjrsquare: 0.8392
      rmse: 0.0595

Which is not the same as

General model Power2:
       f(x) = a*x^b+c
Coefficients (with 95% confidence bounds):
   a =      0.5771  (0.5765, 0.5777)
   b =      -1.001  (-1.004, -0.9983)
   c = -8.972e-005  (-0.0005845, 0.000405)

Goodness of fit:
  SSE: 4.089e-007
  R-square: 1
  Adjusted R-square: 1
  RMSE: 0.0002022

That I get when I run the regression on cftool GUI interface. What options I am missing here that gives me rather different results on seemingly the model? That a = -179 is very fishy....

Thanks in advance for your inputs.

Oh also, once I sort those out, is there way to get only particular value from fitted model? Say, I am only interested in values of A.

for gof, I know I can extract out by using gof.rsquare... and so on, but how about for cfit?


回答1:


When I tried doing

>> g = fittype('a*x^b+c','coeff',{'a','b','c'})
>> x=1:13;
>> [c3,gof3] = fit(x',B3(:,1),g)

I got

Warning: Start point not provided, choosing random start point. 
> In Warning>Warning.throw at 31
  In fit>iFit at 320
  In fit at 109 

So I changed it to

>> [c3,gof3] = fit(x', B3(:,1),g, 'Startpoint', [0 0 0])

which gives me

c3 = 

     General model:
     c3(x) = a*x^b+c
     Coefficients (with 95% confidence bounds):
       a =      0.5771  (0.5765, 0.5777)
       b =      -1.001  (-1.004, -0.9983)
       c =  -8.972e-05  (-0.0005844, 0.000405)

which is indeed a lot closer to the one you got from the cftool GUI.

Quite possibly the "random start point" was a lot better for the GUI than it was for the CLI fit, so you were just lucky.

If these results can be produced consistently, well, then the GUI must be programmed to also use the Global optimization toolbox when available, or some similar scheme. But that's just wild speculation.



来源:https://stackoverflow.com/questions/13575126/curve-fitting-in-matlab-different-result-form-toolbox-vs-command-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!