2015-05-27 115 views
0

我正在嘗試使用gnuplot將漸近曲線擬合到我的數據中。它是顯示測試期間反應時間結果的數據集。我已經能夠繪製數據並使用下面的代碼適合通過它的一條直線。Gnuplot:擬合數據的漸近曲線

f(x) = a*x + c; 
fit f(x) 'ReactionLearning.txt' using 1:2 via a,c 

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \ 
    f(x) with lines notitle 

其中給出以下結果: http://imgur.com/PlQmalX.jpg

然而,因爲這是應該表現出學習效果,漸近曲線會使很多更有意義,因爲在性能上的提高引起的學習效果最終會停止,使得這條線路完全失效。

從我所瞭解的漸近線創建f(x)= 1/x。所以我改變了我的代碼是

f(x) = 1/(a*x) 
fit f(x) 'ReactionLearning.txt' using 1:2 via a 

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \ 
    f(x) with lines notitle 

不過,我得到這樣的輸出:http://imgur.com/PimTa1T

有人能解釋我做錯了什麼?

感謝

+0

您使用的是完全錯誤的模型。 1/x沒有爲x = 0定義,並且對於大x收斂於y = 0。嘗試手動將這個功能「擬合」到您的數據集中,您將不會獲得太多成功。 – Christoph

回答

1

有很多種曲線,顯示一個漸近行爲,1/x可能不是描述物理或生物過程時談到最多的一個。通常,這些過程可能會呈現某種指數衰減。有了你展示的數據,我認爲你不能總結任何關於你應該使用哪種模型,除了「它衰變」。如果你已經知道你期望的功能行爲是什麼,那就會讓事情變得不同。這就是說,你1/x曲線的一般形式應該是f(x) = a/(x-x0) + c,這可能會給你一些有意義的結果,當你適應它:

f(x) = a/(x-x0) + c 
fit f(x) "data" via a,c,x0 

由於配件可能顯示了這種功能,如果初始值不穩定性不好,你應該/可能需要提供合理的初始值或將問題重新表達爲線性關係。您可以通過更改變量y = 1/(x - x0)來完成後者,並對x0的不同值進行擬合。記錄它們中的每一個的擬閤中的誤差(由gnuplot輸出),並看看誤差如何作爲x0的函數被最小化:它應該是關於最優值的二次方。像這樣:

f(x) = a*x + c 
x0 = 1. # give some value for x0 
fit f(x) "data" u (1./($1-x0)):2 via a,C# record fit errors for a and c 
x0 = 3. # give some other value for x0 
fit f(x) "data" u (1./($1-x0)):2 via a,C# record fit errors for a and c