matlab 模拟函数与数据相差太多是怎么回事

我的命令是这样的
x=[0 1.50E-02 3.00E-02 4.50E-02 6.00E-02 7.50E-02 9.00E-02 0.105 0.12 0.135 0.15 0.165 0.18 0.195 0.21 0.225 0.24 0.255 0.27 0.285 0.3];
y=[50.15 48.235 46.32 44.406 42.761 41.252 39.743 38.372 37.278 36.184 35.089 34.368 33.646 32.924 32.414 32.009 31.605 31.292 31.162 31.033 30.903];
myfunc=inline('beta(1)*exp(beta(2)*x)','beta','x');
beta=nlinfit(x,y,myfunc,[20 -8]);
a=beta(1),b=beta(2)
xx=linspace(min(x),max(x));
yy=a*exp(b*xx);
plot(x,y,'o',xx,yy,'r')
模拟的曲线与所给数据相差很多 最好帮我改一下 谢谢哦

这个问题我先给你分析一下,数据拟合首先需要给定你要拟合的公式的结构,像你的程序使用了指数函数,给定函数类型后,就可以进行拟合了,你的程序没有任何问题。

那么问题在哪里呢,是你选定的函数不好,就是说你使用指数函数拟合这个数据肯定就是这个样了。

如果没有特殊的要求,我建议一般使用多项式函数进行拟合!

下面的拟合可以看出结果很好的

x=[0 1.50E-02 3.00E-02 4.50E-02 6.00E-02 7.50E-02 9.00E-02 0.105 0.12 0.135 0.15 0.165 0.18 0.195 0.21 0.225 0.24 0.255 0.27 0.285 0.3];

y=[50.15 48.235 46.32 44.406 42.761 41.252 39.743 38.372 37.278 36.184 35.089 34.368 33.646 32.924 32.414 32.009 31.605 31.292 31.162 31.033 30.903];

p=polyfit(x,y,2);

yy=polyval(p,x);

figure;plot(x,y,'-r*',x,yy,'-b+')

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-09

General model Exp1:

     f(x) = a*exp(b*x)

Coefficients (with 95% confidence bounds):

       a =       47.81  (46.4, 49.23)

       b =      -1.762  (-1.959, -1.565)

Goodness of fit:

  SSE: 38.87

  R-square: 0.9485

  Adjusted R-square: 0.9458

  RMSE: 1.43

General model Exp2:

     f(x) = a*exp(b*x) + c*exp(d*x)

Coefficients (with 95% confidence bounds):

       a =       44.24  (42.5, 45.98)

       b =      -3.749  (-4.014, -3.485)

       c =        6.04  (4.238, 7.841)

       d =       3.376  (2.707, 4.045)

Goodness of fit:

  SSE: 0.08654

  R-square: 0.9999

  Adjusted R-square: 0.9999

  RMSE: 0.07135