2

我正在尝试逼近二次方程的图形(曲线拟合)。我有 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 创建以下图表。我知道,我与原始图表相去甚远。但我知道吗,可以使用 gnuplot 创建散点图。

在下图中,虚线表示近似值(样本仅表示两个)但在工作图中,我们需要四个近似线。

在此处输入图像描述

我今天只尝试了 gnuplot,还需要创建图表。

4

1 回答 1

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)
于 2013-10-17T09:05:39.443 回答