2

这是我用于 Y 数据的数据:

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 只是从 1 到 13 的整数值,我知道这是在 MATLAB 上运行 GUI cftool 的形式 a*x^b+c 的幂函数,具有相当高的 R 平方值 (1)

为了在命令行上执行拟合,我使用了:

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

这导致

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

哪个不一样

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

我在 cftool GUI 界面上运行回归时得到的。我在这里缺少哪些选项,在看似模型上给了我相当不同的结果?a = -179 很可疑....

提前感谢您的投入。

哦,还有,一旦我把它们整理出来,有没有办法从拟合模型中只获得特定的价值?说,我只对 A 的值感兴趣。

对于 gof,我知道我可以使用 gof.rsquare 提取...等等,但是对于 cfit 呢?

4

1 回答 1

4

当我尝试做

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

我有

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

所以我把它改成了

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

这给了我

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)

这确实与您从cftoolGUI 获得的更接近。

GUI 的“随机起点”很可能比 CLI 适合的要好得多,所以你很幸运。

如果可以始终如一地产生这些结果,那么必须对 GUI 进行编程,以便在可用时也使用全局优化工具箱,或一些类似的方案。但这只是疯狂的猜测。

于 2012-11-27T06:34:16.333 回答