使用Gnuplot的近似图/曲线拟合

时间:2013-10-17 08:37:20

标签: graph gnuplot curve-fitting

我试图逼近二次方程的Graph(曲线拟合)。我有4个数据文件,其中包含x和y列。我确定系数并为每个数据文件写入每个系数文件。

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 个答案:

答案 0 :(得分: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)