2024-05-14 18:13:53 发布
网友
我目前正在使用numpy.polyfit(x,y,deg)将多项式拟合到实验数据。不过,我想拟合一个多项式,使用基于点的误差加权。
我发现scipy.curve_fit利用了权重,我想我可以把函数“f”设置成我想要的阶数的多项式,然后把我的权重放在“sigma”中,这样就能达到我的目标。
我想知道还有其他更好的方法吗?
非常感谢。
我就是这样做的,评论很多!
注意:我是用qth和n阶多项式拟合的。
from numpy import * import pylab # get data fn = 'cooltemp.dat' x, y, xerr, yerr = loadtxt(fn,unpack=True, usecols=[0,1,2,3]) # create nth degree polynomial fit n = 1 zn = polyfit(x,y,n) pn = poly1d(zn) # construct polynomial # create qth degree polynomial fit q = 5 zq = polyfit(x,y,q) pq = poly1d(zq) # plot data and fit xx = linspace(0, max(x), 500) pylab.plot(xx, pn(xx),'-g', xx, pq(xx),'-b') pylab.errorbar(x, y, xerr, yerr, fmt='r.') # customise graph pylab.legend(['degree '+str(n),'degree '+str(q),'data']) pylab.axis([0,max(x),0,max(y)]) pylab.xlabel('x label (unit)') pylab.ylabel('y label (unit)') pylab.show()
看看http://scipy-cookbook.readthedocs.io/items/FittingData.html,特别是'Fitting a power-law to data with errors'部分。它展示了如何将scipy.optimize.leatsq与包含错误权重的函数一起使用。
对于加权多项式拟合,可以使用:
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的形式提供
1/variance
1/sigma
虽然curve_fit和leastsq是比polyfit更通用、更强大的优化工具(因为它们只适合任何函数),但是polyfit的优点是它产生(精确)分析解,因此可能比curve_fit和leastsq等迭代近似方法快得多,特别是在将多项式拟合到多组y数据的情况(在同一x向量上获得)
curve_fit
leastsq
polyfit
更新:从numpy版本1.7开始,numpy.polyfit还将权重作为输入(理想情况下,应以1/sigma的形式提供,而不是1/variance)
numpy.polyfit
我就是这样做的,评论很多!
注意:我是用qth和n阶多项式拟合的。
看看http://scipy-cookbook.readthedocs.io/items/FittingData.html,特别是'Fitting a power-law to data with errors'部分。它展示了如何将scipy.optimize.leatsq与包含错误权重的函数一起使用。
对于加权多项式拟合,可以使用:
见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
)相关问题 更多 >
编程相关推荐