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

function()接受4个位置参数,但在Python3.5中为5个提供了_def函数,python,python-3.x,function,curve-fitting,exponential,Python,Python 3.x,Function,Curve Fitting,Exponential,我试图从我的数据中拟合指数函数。我还没有将数学函数拟合到数据的经验。 下面是我现在的代码 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

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

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

我想我不太明白这个错误消息是怎么说的。有谁能帮助我了解导致此错误的原因以及如何改进代码?

函数的
myfunc
功能接收四个参数,
x
a
b
c

错误消息显示您提供了5个参数。这是因为您解包了
popt
,它可能包含四个元素(因此解包时包含四个参数)

在这方面:

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

myfunc
函数接收
myu x
+四个参数。 它有五个参数,但函数只需要四个


有关解包的详细信息。

函数
myfunc
接收四个参数,
x
a
b
c

错误消息显示您提供了5个参数。这是因为您解包了
popt
,它可能包含四个元素(因此解包时包含四个参数)

在这方面:

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

myfunc
函数接收
myu x
+四个参数。 它有五个参数,但函数只需要四个


关于解包的更多信息。

它说
params
包含四项内容,因此使用
xdata
您将五项内容传递给
myfunc
,这只需要四项。@jornsharpe,我明白了。但是我仍然很难理解当前代码的哪一部分表明它给了myfunc五样东西。
myfunc(my_x,*popt)
popt
的元素分散到单独的参数中。所以问题是,
popt
是一个包含4项内容的列表,但它应该只有3项。。。它的长度是4。。。我希望
popt
的长度为4。。。因此,在args中解包将导致4+1=5个参数。。。你确定
p
应该有
my_x
?这是说
params
包含四个东西,所以使用
xdata
你将五个东西传递给
myfunc
,这只需要四个。@jornsharpe,我明白了。但是我仍然很难理解当前代码的哪一部分表明它给了myfunc五样东西。
myfunc(my_x,*popt)
popt
的元素分散到单独的参数中。所以问题是,
popt
是一个包含4项内容的列表,但它应该只有3项。。。它的长度是4。。。我希望
popt
的长度为4。。。因此,在args中解包将导致4+1=5个参数。。。你确定
p
应该有
my_x