我想使用 a x +b x^2+c*x^3+... 类型的多项式函数来使用 scipy.optimize.curve_fit 拟合一些数据。
我设法做得很好,但我的问题是我希望用户能够输入拟合的多项式次数,仅此而已。如果不指定 python 中的系数,我无法找到一种简单的方法来生成 n 次多项式。谁能帮我?
谢谢!
我想使用 a x +b x^2+c*x^3+... 类型的多项式函数来使用 scipy.optimize.curve_fit 拟合一些数据。
我设法做得很好,但我的问题是我希望用户能够输入拟合的多项式次数,仅此而已。如果不指定 python 中的系数,我无法找到一种简单的方法来生成 n 次多项式。谁能帮我?
谢谢!
是的,您可以创建一个任意次数的多项式,它会计算出您给出的系数。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的显式数组来解决的。