gnuplot拟合是否受终端影响



我有一个gnuplot脚本文件来拟合测量数据,使用以下结构:

set terminal png
...some format templates...
f(x) = a + b*x + c*x**2
fit f(x) "datafile.txt" using "X":"Y" via a, b, c
...some plotting commands etc...

这样,gnuplot显示了一些奇怪的行为:

  • 当我按原样运行脚本时,它给我以下错误:

    Undefined value during function evaluation
    "myscriptfile.gnuplot", line 5: error during fit
    
  • 当我将set terminal png行移动到fit行之后,它运行起来没有任何麻烦。

  • 通常,我在包含格式模板和进一步数据处理例程的主脚本开始加载此。这样做也给了我前面提到的错误信息,即使移动了set terminal命令。

因为这只是处理我的数据的第一部分,我真的需要它从主脚本工作…我已经尝试设置初始猜测,FIT_LIMIT并从gnuplot环境加载它。我使用的是gnuplot 4.6.5。

有谁知道如何解决这个问题或fit如何受到其他命令的影响?还是这是某种bug?

edit:上传了一个脚本和数据文件的精简版本到这里。对于简化的数据文件,计算的拟合与测量点不一致,但与完整的数据一致。

我不确定,真正的错误是什么,但它似乎与您使用using "PHEAT":"RHOT"有关,虽然这应该是好的。

我可以用以下最小的设置重现你的错误:

数据文件test.dat:

A B
1 2
2 3 
3 4

和一个文件test.gp:

f(x) = a*x**2 + b*x + c
fit f(x) 'test.dat' using "A":"B" via a,b,c

如果我用gnuplot test.gp调用这个文件,我会得到和你一样的错误。如果我使用using 1:2,它不会出现。如果在交互式终端中粘贴代码,也会出现错误,但只出现一次。如果我再次只重复fit命令,它可以正常工作。我将把它作为bug报告。

在你发布的脚本中,我也能够通过使用using 9:8而不是using "PHEAT":"RHOT"来修复这个问题。此外,您必须删除数据文件的第一行,这可以使用tail实时完成,这样您就可以保持plotusing语句不变。所以你可以使用:

fit rhotside(x) "< tail -n +2 testdata.txt" using 9:8 via rhot0, rhot1, rhot2
fit rcoldside(x) "< tail -n +2 testdata2.txt" using 9:8 via rcold0, rcold1, rcold2

最新更新