我试图逼近二次方程的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)
我得到的图表是:
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创建散点图。
在下图中,虚线表示近似值(样本仅代表两个)但在工作图中,我们需要四条近似线。
我今天只尝试过gnuplot,也需要创建图表。
答案 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
等)。
如果您希望系数文件保持相同的格式(仅使用a
,b
和c
),您可以使用一个函数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)