我想使用类型a x + b x ^ 2 + c * x ^ 3 + ...的多项式函数来使用scipy.optimize.curve_fit来拟合一些数据。< / p>
我设法做得很好但我的问题是我希望用户能够输入拟合的多项式的度数,仅此而已。我还没有找到一种简单的方法来生成n次多项式而不指定python中的系数。任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:3)
是的,你可以创建一个任意度多项式,它会计算出你给它的多少个系数。如果用户想要一个度d+1
的多项式,你想确保给它d
系数。如果您确定初始猜测的长度为curve_fit
,则可以说服d+1
为其提供d+1
系数。
from scipy.optimize import curve_fit
# get xdata, ydata, and desired degree d from user
def arbitrary_poly(x, *params):
return sum([p*(x**i) for i, p in enumerate(params)])
popt, pcov = curve_fit(arbitrary_poly, xdata, ydata, p0=[1]*(d+1))
[1]*(d+1)
只是一个可能的初始猜测,具有正确的长度。如果您正在做一些更聪明的事情来选择初始猜测,那么您应该这样做,而且您可能已经确保它具有正确的长度。如果您不计算出您自己的p0
,curve_fit
默认为所有1的数组,假设它可以找出合适的长度。由于arbitrary_poly
专门用于获取任意数量的参数,因此不允许curve_fit
计算出预期长度是什么,因此默认行为会引发异常。通过为它提供一个正确长度的所有1的显式数组来解决这个问题。