2017-06-14 160 views
0

我有一個數據集,(x和y),我需要在scipy中與分析模型擬合。擬合指數衰減模型的方程

enter image description here

我已經使用MATLAB曲線擬合工具箱和其他一些工具,包括簡單地增加方面標準擬合方程式(例如指數)嘗試。

我唯一真正的約束是我想限制需要擬合的參數的數量,4是理想的,但是6可以工作,而且我對模型適應高於線性的數據集開始時曲線的一部分。這就是爲什麼我不喜歡我所能得到的多項式擬合解決方案。

這裏是referencs數據,

Y = np.array([7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.48E-01 , 7.48E-01 , 7.48E-01 , 7.47E-01 , 7.47E-01 , 7.46E-01 , 7.46E-01 , 7.45E-01 , 7.44E-01 , 7.44E-01 , 7.43E-01 , 7.42E-01 , 7.41E-01 , 7.40E-01 , 7.39E-01 , 7.38E-01 , 7.37E-01 , 7.36E-01 , 7.35E-01 , 7.34E-01 , 7.32E-01 , 7.31E-01 , 7.30E-01 , 7.28E-01 , 7.27E-01 , 7.25E-01 , 7.24E-01 , 7.22E-01 , 7.21E-01 , 7.19E-01 , 7.17E-01 , 7.16E-01 , 7.14E-01 , 7.12E-01 , 7.10E-01 , 7.08E-01 , 7.06E-01 , 7.04E-01 , 7.02E-01 , 7.00E-01 , 6.98E-01 , 6.96E-01 , 6.94E-01 , 6.92E-01 , 6.90E-01 , 6.88E-01 , 6.86E-01 , 6.83E-01 , 6.81E-01 , 6.79E-01 , 6.77E-01 , 6.75E-01 , 6.72E-01 , 6.70E-01 , 6.68E-01 , 6.65E-01 , 6.63E-01 , 6.61E-01 , 6.58E-01 , 6.56E-01 , 6.54E-01 , 6.51E-01 , 6.49E-01 , 6.46E-01 , 6.44E-01 , 6.42E-01 , 6.39E-01 , 6.37E-01 , 6.34E-01 , 6.32E-01 , 6.30E-01 , 6.27E-01 , 6.25E-01 , 6.22E-01 , 6.20E-01 , 6.17E-01 , 6.15E-01 , 6.12E-01 , 6.10E-01 , 6.08E-01 , 6.05E-01 , 6.03E-01 , 6.00E-01 , 5.98E-01 , 5.95E-01 , 5.93E-01 , 5.91E-01 , 5.88E-01 , 5.86E-01 , 5.83E-01 , 5.81E-01 , 5.79E-01 , 5.76E-01 , 5.74E-01 , 5.71E-01 , 5.69E-01 , 5.67E-01 , 5.64E-01 , 5.62E-01 , 5.60E-01 , 5.57E-01 , 5.55E-01 , 5.53E-01 , 5.50E-01 , 5.48E-01 , 5.46E-01 , 5.43E-01 , 5.41E-01 , 5.39E-01 , 5.36E-01 , 5.34E-01 , 5.32E-01 , 5.29E-01 , 5.27E-01 , 5.25E-01]) 
X = np.arange(len(Y)) 

最後,我使用symfit,但我樂於使用scipy.optimize.curve_fit或其他方法,如果它有助於解決我的問題。

+0

的數據不對應於圖 – Stelios

+0

@Stelios,是的,它已現予以更正。對不起,花了這麼長時間,我的互聯網死了,所以我不得不設置一個熱點。 –

回答

2

這裏試圖用三參數函數f來擬合你的數據。請注意,該函數未在x=0處定義。但是,scipy確實能夠爲所有其他點提供合理的配合。您可能需要使用x+very_small_number之類的內容替換中的x以獲得對x=0有效的功能。

from scipy.optimize import curve_fit 

def f(x, a, b, c): 
    return a + b * (1 - np.exp(-c/x)) 

sol = curve_fit(f, X, Y, p0 = (.75,.75,200,)) 

plt.plot(X, Y, 'o', label = 'data') 
plt.plot(X, [f(x,*sol[0]) for x in X], lw = 3, label = 'fit') 

enter image description here