尝试将数据拟合到 python 中的指数曲线时,出现了一组奇怪的错误

When attempting to fit data to an exponential curve in python, I get a strange set of errors

我在一个单独的文件中的 15x55 矩阵中有一组数据,我使用此代码从中导入和提取数据:

ScanNum = []

#Import the data
data = loadtxt('FNScan40.txt')

#Define columns
ccd1= data[:,14]
t= data[:,0]

我对这部分代码很有信心,因为我已经在其他代码中使用过它并且成功了。然后我定义了我想要拟合数据的函数。

def Kinetics(tk,A,B):
f=A*(1.0-math.e**(-B*tk))
return f

其中A和B是未知系数。 然后,我将我拥有的 x 和 y 数据放入数组中。

x = array([t])
y = array([ccd1])

到这里为止我很确定一切都是正确的,但当我实际尝试执行曲线拟合时遇到了麻烦。这是我拥有的其余代码:

popt, pcov = curve_fit(Kinetics, x, y, p0=None)

print popt, pcov

plt.figure()
plt.plot(x, kinetics(x, *popt), label="Fitted Curve")
plt.show()

当我执行代码时收到错误消息:输入不正确:N=2 不得超过 M=1。我知道 N 是数据点的数量,而 M 是初始参数的数量。我不确定如何解决这个问题。我发现唯一要尝试的是设置我自己的初始参数,所以在上面的代码中我定义了 p0=[1,1](因为我有两个我试图猜测的参数,A 和 B。)这只会导致同样的错误(不正确的输入:N=2 不能超过 M=1),所以我尝试改变我输入的 '1' 的数量。如果我超过两个,我只会收到一条错误消息,说我试图输入太多参数进入动力学,这是有道理的。

我已经尝试了我能想到的/在 Internet 上找到的所有方法,但都无济于事。如果 M 是初始参数,为什么更改 p0 中“1”的数量不会更改错误报告为 M 的内容?我该怎么做才能解决这个问题?

我遇到的问题是数组。我决定查看实际的阵列,看看它们是否是问题所在。当我在 't' 和 'ccd1' 两边加上方括号时,它会将数组的长度设置为 1。取出括号解决了这个问题。代码中还有其他不相关的问题应该很容易解决。