作业帮 > 数学 > 作业

matlab求指导啊,

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:数学作业 时间:2024/07/31 04:21:32
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求指导啊,
为什么不可能呢~最小二乘法是求一条直线,所有点到直线的距离平方和最小.也就是说这个直线是不一定经过你的已知点的.因为你的已知点也可能是有误差的,这也是最小二乘避免误差的意义所在.
如果你的已知点是准确的,或者说,是必须在拟合曲线上的,那你应该用的是插值之类的.
再问: 那现在误差这么大肯定不能用啊,,大神有没有办法啊,给个代码啊,初学莫怪
再答: 你的需求是什么啊,所有已知点在直线上是不可能的,因为两点确定一条直线啊。还是说,你不要求拟合曲线是直线
再问: 我做过挺多这类的,第一次遇到这个,想和原来一样,就是从图上看,那条直线在我给的数据中穿过那个,而不是像这样,全部在上边
再答: 我知道了,其实你算的没错。只不过matlab显示位数比较少,然后自动四舍五入给你写成0.0007了,但其实斜率是69.5,因为你的x,y都比较大,所以差一点就差了很多,直线就上去了。 有两个解决方法:第一,虽然显示的是四舍五入的结果,但真实结果是对的。当你画直线的时候,直接用你的结果矩阵p,斜率是p(1),截距是p(2) 第二,如果你很想看看后面的小数位,那么就用命令format long,就行了。 我试了,没问题的,拟合效果挺好的~