【问题标题】:Determine coefficients of quadratic equation using gnuplot使用 gnuplot 确定二次方程的系数
【发布时间】:2013-10-18 03:30:59
【问题描述】:

我根据 stackoverflow 上的输入创建了我的第一个图表。所以我的代码是,

set title "Approximation Graph"
set term png
set output 'plot.png'
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" using 1:2, f0_h(x), "clk1_h" using 1:2, f1_h(x), "clk0_s" using 1:2, f0_s(x), "clk1_s" using 1:2, f1_s(x)

图表是:

所以我有主要和次要问题。

主要:是否可以使用 gnuplot 确定系数。作为 现在,我手动确定。 (由于某种原因,我不能在 python 中使用 numpy 用于确定系数)

Minor : 任何人都可以参考我的线路属性。 1)增加线宽 2)改变颜色 3)为每一行添加一个标题(以区分它们是否相同 颜色)4)就像我应该有 8 行但有些被覆盖了

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    关于你的第一个问题:这就是fit 实际所做的。在您的脚本中,通过使用via 'file.par',您只需设置起始值并指定要用于拟合的变量。

    只需尝试以下操作:

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

    看看,如果系数出来好。默认情况下,起始值假定为1。如果不成功,您可能需要设置正确的数量级(例如在拟合之前设置a0_h = 10)。

    关于次要内容,使用linewidthlinecolor 等作为线路属性。要指定标题,请使用title :)

    您可以为每个函数/数据组合定义一个linestyle,并使用线条进行拟合,并使用点作为数据:

    set style line 1 linecolor rgb 'red' linewidth 2 pointtype 4 linetype -1
    set style line 2 linecolor rgb '#ff7700' pointtype 7 linetype 2
    ...
    

    在这种情况下,如果您指定linecolorlinetype,第一个决定颜色,第二个决定破折号(如果终端支持,请参阅Gnuplot line types)。

    对于绘图,使用上述线型定义,使用例如

    set style data points
    set style func lines # these two settings are default
    
    plot "clk0_h" using 1:2 linestyle 1 title 'clk0_h, data', \
         f0_h(x) linestyle 1 title 'clk0_h, fit'
    ...
    

    您应该考虑使用pngcairo 终端,它可以创建更好的图形。或者,最好使用基于矢量的终端,例如pdfcairo

    【讨论】:

    • 非常感谢您对这两个问题的回复。对于第一个问题,我有 x 和 y 数据点,需要确定二次方程的 a、b、c。根据您的建议,默认为 1 或更改 a0_h 值。是否可以使用 gnuplot 的任何函数来确定 a0_h,b0_h,c0.....
    • @AbhishekGoswami 是的,基本上你可以定义任何使用这些系数的函数。但是对于更复杂的函数,可能会发生拟合没有很好的收敛性,您必须使用更好的起始值。但基本上你可以使用任何返回数字的东西。
    • 感谢您的意见。还有一个小问题。当我运行 gnuplot 时,它会生成 fit.log 并在标准输出中生成类似的消息。是否可以隐藏此消息。因为这对最终用户来说是一种困惑。如果他们需要详细信息,他们可以查看 fit.log
    • @AbhishekGoswami 使用set fit quiet,自 4.6.0 起可用
    • 非常感谢您的及时回复
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多