用matlab曲线拟合时遇到的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:11:37
发现根据曲线拟合出的方程,再画出曲线,和拟合时的曲线不相同?为什么?急!谢谢
具体代码是这样的

第一部分,曲线拟合:
X=[0.24 0.52 1.54 3.91 10.8 18.7 25 30.6 45 55 70 100 118 150 200 250 300 350 400 450 500 550 600 650 700 751]
Y=[5 10 20 30 40 45 48 50 52 54 56 59 60 61.5 63 64 65 66 66.6 67 67.5 68 68.5 69 69.5 70]
p=polyfit(X,Y,3)
y=vpa(poly2sym(p),6)
XX=[0.24 0.52 1.54 3.91 10.8 18.7 30.6 118 751];
YY=polyval(p,XX);
plot(X,Y,'o',XX,YY)

第二部分,根据方程画曲线代码
clear all;
x=0:1:800;
y=.688737e-6*x.^3-.899208e-3*x.^2+.349732*x+28.7791
plot(x,y);axis([0 800 0 80]);

是不是曲线拟合的代码不对?我不希望第一象限曲线上升后又下降
如有可能,请达人给出程序

数据量不足造成的,略改一下就好了。
不过,曲线不适合多项式拟合,即使使用高次幂也不理想,用指数方程拟合效果好多了。

clear;clc;clf;
X=[0.24 0.52 1.54 3.91 10.8 18.7 25 30.6 45 55 70 100 118 150 200 250 300 350 400 450 500 550 600 650 700 751];
Y=[5 10 20 30 40 45 48 50 52 54 56 59 60 61.5 63 64 65 66 66.6 67 67.5 68 68.5 69 69.5 70];
p=polyfit(X,Y,3)
y=vpa(poly2sym(p),6)
XX=min(X):0.1:max(X) %只改动了它
YY=polyval(p,XX);
plot(X,Y,'o',XX,YY)
%非线性拟合(指数方程)
fx=@(a,x) a(1).*x.^a(2)+a(3)
a=nlinfit(X,Y,fx,[-100 -1 100])
Yn=a(1).*XX.^a(2)+a(3);
hold on
plot(XX,Yn,'r')

曲线见我的博客:
http://hi.baidu.com/chemical%5Fengineering/album/item/2b1b0ad1024c8dc3562c84f1.html

不知道你学过线性回归没有?
出现这种结果是预料之中的

我没有试验,但可以肯定的说:
曲线拟合方程本身就是有误差的,方程次数设置的越高越精确.你的次数不够高,所以不够精确
理论上,你使用了n组数据,就要将次数设置成n-1