代码之家  ›  专栏  ›  技术社区  ›  user7852656

function()接受4个位置参数,但在Python 3.5中为5个提供了_def函数

  •  0
  • user7852656  · 技术社区  · 7 年前

    我试图从我的数据中拟合指数函数。我对将数学函数拟合到我的数据还不是很有经验。 下面是我现在的代码。

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    
    my_x = (4,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40)
    my_y = (0.022172333,0.020881,0.017729,0.021641333,0.02479,0.030755667,0.037235,0.048389,0.068451,0.06898974,0.161409,0.242802333,0.316012667,0.440762333,0.569118333,0.7016839,0.832527333)
    
    def myfunc(x,a,b,c):
        return a*np.exp(b*x)+c
    
    
    p=[my_x,0.0045,0.1262,0] #pre-determined a=0.0045, b=0.1262, c=0 according to excel
    popt, pcov = curve_fit(myfunc,my_x,my_y, p0=p)
    
    
    plt.plot (my_x,myfunc(my_x, *popt))
    

    我得到的错误消息如下。

    return function(xdata, *params) - ydata
    
    TypeError: myfunc() takes 4 positional arguments but 5 were given
    

    我不太明白这个错误消息在说什么。谁能帮我理解是什么导致了这个错误,以及我如何改进代码?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Zcode    7 年前

    myfunc x , a , b c

    错误消息显示您提供了5个参数。因为你打开了包裹 popt who可能包含四个元素(因此在解包时包含四个参数)。

    在这一行中:

    plt.plot (my_x,myfunc(my_x, *popt))
    

    myfunc公司 函数接收 my_x +四个参数。

    有关解包的更多信息 here