PDA

查看完整版本 : [求助]关于MATLAB中lsqcurvefit、polyfit用法的探讨


huaijuliu
2008-10-31, 15:45
各位,小弟在这请安了。最近遇到一个数据拟合问题。
已知:x=[1500 2000 2500 3000 3500 4000 4500 5000 5500];
y=[78.59 83.04 84.11 86.63 87.61 84.87 84.67 82.50 80.54];求解系数a,使得函数f(x)=a(1)*x+a(2)*x^2+a(3)*x^3+a(4)*x^4+a(5)*x^5+a(6)是x,y的最佳拟合曲线。
这个问题我想就是利用多项式数据拟合
是不是直接应用polyval polyfit,得出的系数即为a?
还是需要最小二乘法数据拟合函数lsqcurvefit?如果将目标函数设置为多项式f(x)=a(1)*x+a(2)*x^2+a(3)*x^3+a(4)*x^4+a(5)*x^5+a(6),效果是不是和polyfit一样,可结果得出的系数是不一样的,不知道这道题大家用第一种还是第二种,抑或其它?请解疑。

huaijuliu
2008-10-31, 17:25
polyfit函数拟合出来的就是一个多项式,而多项式的系数都是用最小二乘法得出的。
可以用help polyfit来看帮助,会发现有这么一句话:
P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
degree N that fits the data Y best in a least-squares sense.
既然Polyfit是用最小二乘法拟合多项式曲线,按说应该两个函数求出的系数矩阵相同,可是总是会存在偏差。

meteora1005
2008-11-01, 00:29
多项式拟合是按x的降幂排列的,相应系数也是,而用lsqcurvefit给出的系数是你定义函数时怎么定义,顺序还是怎么排,你看看是不是这个地方出问题了。

未注册
2008-11-01, 00:49
lsqcurvefit在有些情况下与所给的初值(a的初值)有关。若给的初值适当,两者的结果应该完全相同(注意系数序列的差别),因为他们都是根据最小平方法(最小二乘法)得到相应的结果。当然,对于多项式问题,用polyfit更为简单方便。

huaijuliu
2008-11-01, 11:13
您讲的很对 起始向量对结果有很大影响 如果取不好 经常会发生警告 奇异阵 什么的 POLYfit 确实更为方便 而且拟合精度也较好