因爲我在編碼方面很新,所以非常感謝幫助。我有一個單獨的文件,我導入和使用此代碼提取數據,一組在15x55矩陣的數據:因爲我已經在其他代碼中使用它當試圖在python中將數據擬合成指數曲線時,我得到一組奇怪的錯誤
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'。如果我超過了兩個,我只是得到一個錯誤,說我試圖輸入太多的參數進入動力學,這是有道理的。
我試過了所有我能想到的/在互聯網上無法找到的東西。如果M是初始參數,爲什麼不改變p0中'1的數量改變錯誤報告爲M?我能做些什麼來解決這個問題?