求Matlab高手指点一个多项式拟合问题

我有一个数据列共15个数如下:22.900023.200023.000024.400026.700025.000025.500026.300026.100026.2000... 我有一个数据列共15个数如下:
22.9000
23.2000
23.0000
24.4000
26.7000
25.0000
25.5000
26.3000
26.1000
26.2000
27.0000
26.3000
28.1000
26.4000
27.8000
令其转置为y;已知这些数对应的序号是线性增加的,比如说是1到15,或者5到19等等,只要是连续的15个正整数就行。

我想要用最小二乘多项式来拟合;
比如x1=1:15;
x2=11:25;
x3=22:36;
x4=11111:11125;
用命令y1=polyval(polyfit(x1,y,14),x1);
y2=polyval(polyfit(x2,y,14),x2);
y3=polyval(polyfit(x3,y,14),x3);
y4=polyval(polyfit(x4,y,14),x4);
按道理来讲,15个数用14阶多项式拟合应该是精确的(就是15个方程确定15个未知数),误差为0;但是现在为什么结果相差很大?改变拟合阶次会发现有时候差别大,有时候差别小。
这组数据是我实验里的数,不是凭空造的。如果把y换成比如1到15的平方,还是用上面的式子拟合,结果4组y值是一样的。如果再随便取一组数[1,3,7,5,6,8,10,9,20,18,10,2,1,3,3],结果又不一样了,非常困惑啊。似乎取x1时相对是最精确的,拟合的曲线几乎总是能完全通过给的15个点。
展开
 我来答
victoriajll
2011-10-12 · TA获得超过4884个赞
知道大有可为答主
回答量:654
采纳率:100%
帮助的人:1058万
展开全部
y1=polyval(polyfit(x1,y,14),x1);
y2=polyval(polyfit(x2,y,14),x2);
y3=polyval(polyfit(x3,y,14),x3);
y4=polyval(polyfit(x4,y,14),x4);

至于说为什么y1,y2,y3,y4为什么与原y值不同,我觉得可能有的原因是:
1.楼主学过线性代数的话,应该知道多元方程组的解和系数矩阵有很大关系,但事实上有些方程组的系数矩阵是病态的,也就是说当系数有很微小的变化,解就会发生显著变化,你可以搜一下。在这种情况下,就会出现上述问题,即15个方程并不能很好的确定15个未知数。因为matlab的计算精度是有限的,这样求出的系数会与真实系数有误差,而这时碰巧系数矩阵是病态的,那么就会因为这很微不足道的误差造成解有很大不同,而如果碰巧系数矩阵不是病态的,那么即使有一点的误差,但反映到解那里或许也是微不足道的,也就会出现上面你说的4组y值近似相等的情况。
不知道我说明白没,有问题可以继续探讨,主要是理论方面的问题,与matlab软件无关。
追问
谢谢。对,您说的这一点我认同。但是我想问一下为什么同样的数,用matlab里面的[p s u]=polyfit(x,y,n);然后再用polyval算拟合值就基本上一致了呢?它对x的处理是[xi-mean(x)]/std(x);您能解释一下这样做的优点吗?从理论的角度。数值分析我不太懂。
追答
x的处理是[xi-mean(x)]/std(x),本质上就是对x序列做归一化处理。
兄弟,我也是对这方面比较感兴趣而已,没有专门学过,所以归一化的本质我也不是很清楚,只是知道有些时候这样做会得到比较好的效果,有时反而会起到反效果。
具体的你有兴趣的话可以自己研究研究,如果没必要的话也不用搞得太清楚。下面是一个网页你可以参考一下。
http://www.ilovematlab.cn/viewthread.php?tid=27021&extra=page%3D1%26amp%3Bfilter%3D0%26amp%3Borderby%3Ddateline%26amp%3Bascdesc%3DDESC
铸诗剑志怀8660
2011-10-23 · TA获得超过6万个赞
知道大有可为答主
回答量:4.6万
采纳率:0%
帮助的人:6102万
展开全部
zijizuo
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式