2016-12-03 23 views
1

我遇到了一些麻煩,擬合數據集來計算溫度計的響應時間。所以,我有我在使用gnuplot適合使用列的對數

Time (s) - Temperature (K) 
0.4820 295.0772 
0.4840 295.0772 
0.4860 295.1651 
0.4880 295.1651 
0.4900 295.1651 
0.4920 295.2531 
0.4940 295.2091 
0.4960 295.2531 
0.4980 295.2972 
0.5000 295.3412 
0.5020 295.2972 
0.5040 295.3853 
0.5060 295.3412 

形式的數據集,我想通過這樣的操作

y = log($2 - 325.6) 

所以我寫了我的.gp文件這樣

線性化僅第二列
f(x) = a*x+b 
fit f(x) 'termom_COST_SCALED.txt' via a, b u 1:(log($2 - 325.6)) 

p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) title 'T(t)', 
f(x) title "Linear fit" 

,但好歹是行不通的,即使我繪製圖形,而不配合

p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) 

結果是所需的圖表,至少我想從中適合。適合的語法是錯誤的?

via a, b u 1:(log($2 - 325.6)) 

謝謝!

回答

1

我覺得usingvia之前應該來,你應該忽略你的數據文件中的標頭every ::1

f(x) = a*x+b 
fit f(x) 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) every ::1 via a,b 

p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) every ::1 title 'T(t)',\ 
    f(x) title "Linear fit" 
pause mouse 

的語法現在是正確的。

你的第二列是接近295,這意味着$2-325.6接近-31,它的日誌將是複雜的:

gnuplot> print log(-31) 
{3.43398720448515, 3.14159265358979} 

真的是你想要的嗎?

+0

太好了!這對我有效,但我仍然沒有得到'every :: 1'和'暫停鼠標'的命令。我的意思是,如果我在頭部之前有'#',我不需要這個命令嗎? 「暫停鼠標」呢,它有必要嗎?無論如何,我發現我的代碼中也有一個錯誤,因爲我不想得到複雜的數字,而是一個真實的數字,所以我必須更改我使用的公式。 – opisthofulax

+0

如果你的頭裏有'#',沒問題。 '暫停鼠標'只是用來保持顯示圖形。 'wxt'。 –

+0

現在很清楚,非常感謝! – opisthofulax