代码之家  ›  专栏  ›  技术社区  ›  Titouan Lazeyras

在python中创建任意次数的多项式

  •  0
  • Titouan Lazeyras  · 技术社区  · 10 年前

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

    我成功地做到了这一点,但我的问题是,我希望用户能够输入拟合多项式的次数,而不是更多。我还没有找到一种简单的方法来生成n次多项式,而不用在python中指定系数。有人能帮我吗?

    谢谢

    1 回复  |  直到 10 年前
        1
  •  3
  •   Amit Kumar Gupta    10 年前

    是的,你可以创建一个任意次数的多项式,它将计算出你给它多少个系数 d+1 系数,如果用户想要一个多项式 d 。你可以说服 curve_fit 给它 天+1 系数,如果你确定初始猜测有长度 天+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 , 曲线拟合 默认为全1的数组,假设它可以计算出适当的长度。自从 arbitrary_poly 被专门设计为接受任意数量的参数,因此不允许 曲线拟合 为了计算预期长度,默认行为将引发异常。通过给它一个长度正确的所有1的显式数组,这是固定的。