【问题标题】:Approximation Graph/curve Fitting using Gnuplot使用 Gnuplot 进行近似图/曲线拟合
【发布时间】:2013-10-17 08:37:19
【问题描述】:

我正在尝试逼近二次方程的图形(曲线拟合)。我有 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,还需要创建图表。

【问题讨论】:

    标签: graph gnuplot curve-fitting


    【解决方案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)
    

    【讨论】:

    • 非常感谢您的回复。我们也可以在 Gnuplot 中创建散点图吗?如果可以,你能给我一些生成散点图的想法吗
    • 嗯,散点图最简单的方法是splot 'data.txt' with points。如果您有一些特殊需求,我建议您提出一个新问题。
    • 真的非常感谢您的时间非常有限并且您得到了适当的输入
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2021-10-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多