我目前正在使用 numpy.polyfit(x,y,deg) 将多项式拟合到实验数据。但是,我想拟合一个基于点的误差使用加权的多项式。
我找到了 scipy.curve_fit它利用了权重,我想我可以将函数“f”设置为我想要的阶数的多项式形式,并将权重放在“sigma”中,这应该可以实现我的目标。
我想知道还有其他更好的方法吗?
非常感谢。
最佳答案
对于加权多项式拟合,您可以使用:
numpy.polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=weights)
参见 http://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyfit.html
需要注意的是,在此函数中,权重不应作为1/variance
(这是许多权重中的常用形式)提供应用程序),但作为 1/sigma
虽然 curve_fit
和 leastsq
是比 polyfit
更通用和更强大的优化工具(因为它们可以适应任何 函数),polyfit
的优势在于它可以生成(精确的)解析解,因此可能比 curve_fit
和 leastsq 等迭代近似方法快得多
- 特别是在将多项式拟合到多组 y 数据(在同一 x 向量处获得)的情况下
更新:从 numpy 1.7 版开始,numpy.polyfit
也将权重作为输入(理想情况下应作为 1/sigma
,不是1/variance
)
关于python - 如何将多项式拟合到带有误差线的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6663127/