【问题标题】:Create a polynomial of arbitrary degree in python在python中创建任意次数的多项式
【发布时间】:2015-03-28 14:09:54
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 你可以创建一个像 def curve_fit(n) 这样的函数,其中n 表示多项式的次数,并将所有代码放入函数中。

标签: python polynomials


【解决方案1】:

是的,您可以创建一个任意次数的多项式,它会计算出您给它多少个系数。如果用户想要一个次数为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 且长度正确的显式数组来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2014-12-22
    • 2020-03-20
    • 2018-05-26
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多