0

我想使用 a x +b x^2+c*x^3+... 类型的多项式函数来使用 scipy.optimize.curve_fit 拟合一些数据。

我设法做得很好,但我的问题是我希望用户能够输入拟合的多项式次数,仅此而已。如果不指定 python 中的系数,我无法找到一种简单的方法来生成 n 次多项式。谁能帮我?

谢谢!

4

1 回答 1

3

是的,您可以创建一个任意次数的多项式,它会计算出您给出的系数。d+1如果用户想要一个多项式,你要确保给它系数d。如果您确保初始猜测具有长度,您可以说服curve_fit给它系数。d+1d+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的显式数组来解决的。

于 2015-01-29T11:52:14.537 回答