2013-10-17 30 views
2

我想近似二次方程的圖(曲線擬合)。我有4個數據文件,其中包含x和y列。我確定係數併爲每個數據文件寫入每個係數文件。使用Gnuplot的近似圖/曲線擬合

clk0_h clk0_h_c clk0_s clk0_s_c clk1_h clk1_h_c clk1_s clk1_s_c 
c coefficient File (As of now I determie manually for generate Graph in python) 

我圖爲:enter image description here

的gnuplot的代碼是:

set title "Approximation Graph" 
set term png 
set output 'plot.png' 
f(x) = a*x*x + b*x + c 
fit f(x) 'clk0_h' via 'clk0_h_c' 
fit f(x) 'clk1_h' via 'clk1_h_c' 
fit f(x) 'clk0_s' via 'clk0_s_c' 
fit f(x) 'clk1_s' via 'clk1_s_c' 
plot "clk0_h" using 1:2 with lines, f(x), "clk1_h" using 1:2 with lines, f(x), "clk0_s" using 1:2 with lines, f(x), "clk1_s" using 1:2 with lines, f(x) 

我試圖逼近每行的圖。但它看起來像是混合或覆蓋。 我需要使用gnuplot創建以下Graph。我知道,我離原始圖很遠。 但是我可以知道,可以使用gnuplot創建散點圖。

在下圖中,虛線表示近似值(樣本僅表示兩個值)。但在工作圖中,我們需要四條近似線。

enter image description here

今天我只嘗試gnuplot的和還需要創建圖表。

回答

1

您始終使用係數文件中給出的具有不同開始值的相同功能f(x)。爲了有四種不同的功能,你還必須定義這四個不同的功能:

f0_h(x) = a0_h * x**2 + b0_h * x + c0_h 
fit f0_h(x) 'clk0_h' via 'clk0_h_c' 

f1_h(x) = a1_h * x**2 + b1_h * x + c1_h 
fit f1_h(x) 'clk1_h' via 'clk1_h_c' 

f0_s(x) = a0_s * x**2 + b0_s * x + c0_s 
fit f0_s(x) 'clk0_s' via 'clk0_s_c' 

f1_s(x) = a1_s * x**2 + b1_s * x + c1_s 
fit f1_s(x) 'clk1_s' via 'clk1_s_c' 

set style data lines 
plot 'clk0_h' u 1:2, f0_h(x), \ 
    'clk1_h' u 1:2, f1_h(x), \ 
    'clk0_s' u 1:2, f0_s(x), \ 
    'clk1_s' u 1:2, f1_s(x) 

因此,您係數文件還必須包含不同的參數定義(使用a0_h等)。

如果你想保持係數文件具有相同的格式(僅使用abc),你可以使用一個功能f(x)的配件,然後分配擬合變量的具體功能,這是被繪製:

f(x) = a * x**2 + b * x + c 
f0_h(x) = a0_h * x**2 + b0_h * x + c0_h 
f1_h(x) = a1_h * x**2 + b1_h * x + c1_h 
f0_s(x) = a0_s * x**2 + b0_s * x + c0_s 
f1_s(x) = a1_s * x**2 + b1_s * x + c1_s 

fit f0_h(x) 'clk0_h' via 'clk0_h_c' 
a0_h = a; b0_h = b; c0_h = c; 

fit f1_h(x) 'clk1_h' via 'clk1_h_c' 
a1_h = a; b1_h = b; c1_h = c; 

fit f0_s(x) 'clk0_s' via 'clk0_s_c' 
a0_s = a; b0_s = b; c0_s = c; 

fit f1_s(x) 'clk1_s' via 'clk1_s_c' 
a1_s = a; b1_s = b; c1_s = c; 

set style data lines 
plot 'clk0_h' u 1:2, f0_h(x), \ 
    'clk1_h' u 1:2, f1_h(x), \ 
    'clk0_s' u 1:2, f0_s(x), \ 
    'clk1_s' u 1:2, f1_s(x) 
+0

非常感謝您的回覆。我們是否也可以在Gnuplot.if中創建散點圖?是的您可以給我一些想法來生成散點圖嗎? – user765443

+0

那麼,散點圖的最簡單可能性是'splot'data.txt'with points'。如果您有特殊需求,我建議您提出一個新問題。 – Christoph

+0

真的,當你有非常有限的時間,並且你有適當的輸入 – user765443