matlab求指导啊,做的是最小二乘法,代码如下>> x=[2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011];>> y=[5567,5497,5320,5548,5633,5795,5819,5910,5965,6022,6107];>> p=polyfit(x,y,1)p =1.0e+005 *0.0007 -1.3367也就是说y=70x-133670
来源:学生作业帮助网 编辑:六六作业网 时间:2024/09/08 04:05:30
matlab求指导啊,做的是最小二乘法,代码如下>> x=[2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011];>> y=[5567,5497,5320,5548,5633,5795,5819,5910,5965,6022,6107];>> p=polyfit(x,y,1)p =1.0e+005 *0.0007 -1.3367也就是说y=70x-133670
matlab求指导啊,
做的是最小二乘法,代码如下
>> x=[2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011];
>> y=[5567,5497,5320,5548,5633,5795,5819,5910,5965,6022,6107];
>> p=polyfit(x,y,1)
p =
1.0e+005 *
0.0007 -1.3367
也就是说y=70x-133670;
但是这个函数验算下,当x=2001的时候,答案是6400?怎么可能,是不是哪里错了?
matlab求指导啊,做的是最小二乘法,代码如下>> x=[2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011];>> y=[5567,5497,5320,5548,5633,5795,5819,5910,5965,6022,6107];>> p=polyfit(x,y,1)p =1.0e+005 *0.0007 -1.3367也就是说y=70x-133670
为什么不可能呢~最小二乘法是求一条直线,所有点到直线的距离平方和最小.也就是说这个直线是不一定经过你的已知点的.因为你的已知点也可能是有误差的,这也是最小二乘避免误差的意义所在.
如果你的已知点是准确的,或者说,是必须在拟合曲线上的,那你应该用的是插值之类的.
你的p 取值不对
>> vpa(p)
ans =
[ 69.499999999988773424774990417063, -133673.09090906832716427743434906]
x = [2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011];
y = [5567,5497,5320,5548,5633,5795,5819,5910,5965,6022,6107];
xx = (x-2000)/10; %%%% !!!!!!!!!!
p = polyfit(xx,y,1);
f = poly2sym(p)
yy = subs(f,'x',(2001-2000)/10);
str = ['2001- ' num2str(yy)];
disp(str);