在 python 中创建任意次数的多项式
Create a polynomial of arbitrary degree in python
我想使用 ax +bx^2+c*x^3+... 类型的多项式函数来拟合一些数据 scipy.optimize.curve_fit.
我做得很好,但我的问题是我希望用户能够输入拟合的多项式次数,仅此而已。如果不在 python 中指定系数,我一直无法找到生成 n 次多项式的简单方法。谁能帮帮我?
谢谢!
是的,您可以创建任意次数的多项式,它会计算您给它的任意多个系数。如果用户想要 d
次的多项式,你要确保给它 d+1
系数。如果您确保初始猜测的长度为 d+1
.
,则可以说服 curve_fit
为其提供 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 的显式数组来解决的。
我想使用 ax +bx^2+c*x^3+... 类型的多项式函数来拟合一些数据 scipy.optimize.curve_fit.
我做得很好,但我的问题是我希望用户能够输入拟合的多项式次数,仅此而已。如果不在 python 中指定系数,我一直无法找到生成 n 次多项式的简单方法。谁能帮帮我?
谢谢!
是的,您可以创建任意次数的多项式,它会计算您给它的任意多个系数。如果用户想要 d
次的多项式,你要确保给它 d+1
系数。如果您确保初始猜测的长度为 d+1
.
curve_fit
为其提供 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 的显式数组来解决的。