在 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) 只是长度正确的一种可能的初始猜测。如果您正在做一些更聪明的事情来选择初始猜测,您应该这样做,并且您可能已经必须确保它具有正确的长度。如果您 不是 计算出您自己的 p0curve_fit 默认为全 1 的数组,假设它可以计算出合适的长度。由于 arbitrary_poly 是专门为接受任意数量的参数而设计的,因此不允许 curve_fit 计算出预期的长度,默认行为会引发异常。这是通过给它一个长度正确的全 1 的显式数组来解决的。