我想找到並畫出一個函數f,它代表一個曲線擬合在我已知的一些設定點上,x和y。python中的非線性曲線擬合程序
經過一番研究,我開始嘗試scipy.optimize和curve_fit,但在參考指南中,我發現程序使用函數來擬合數據,並假設ydata = f(xdata,* params)+ eps。
所以我的問題是這樣的:我需要改變我的代碼以使用curve_fit或任何其他庫來使用我的設置點來查找曲線的功能? (注意:我想知道這個函數,所以我可以稍後集成我的項目並繪製它)。我知道它將是一個衰減的指數函數,但不知道確切的參數。這是我在我的程序中試過的:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * np.exp(-b * x) + c
xdata = np.array([0.2, 0.5, 0.8, 1])
ydata = np.array([6, 1, 0.5, 0.2])
plt.plot(xdata, ydata, 'b-', label='data')
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
我目前正在Raspberry Pi上開發此項目,如果它改變了任何東西。因爲它非常精確,所以希望使用最小二乘法,但任何其他可行的方法都很受歡迎。 再次,這是基於scipy庫的參考指南。另外,我得到如下圖,它甚至不是一個曲線:根據設定點
一切正常,除了你繪製圖表和曲線:'X = np.arange(0,1,0.01)'然後是'plt.plot(x,func(x,* popt),'r-',label ='fit')',因爲您想要評估您的擬合函數多點,看到一個平穩的結果。關於擬合參數,它們在彈出數組中。 –
實際上你現有的代碼有什麼問題?編輯:@MauroLacy證實了我的懷疑。 –