Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止gnuplot为每个数据点计算函数_Gnuplot - Fatal编程技术网

防止gnuplot为每个数据点计算函数

防止gnuplot为每个数据点计算函数,gnuplot,Gnuplot,我遇到了一些gnuplotplot命令的问题,这些命令需要很长时间才能执行。基本上,当您对数据文件执行以下操作时: f(x) = sin(x) # for example! plot "data" u ($1-f($1)):2 f($1)将针对要绘制的每个数据点进行评估。现在,我有一个外部函数: a(i) = real(system(sprintf("awk 'NR==1 {print $6}' dos_%i", i))) 其中不同的dos_1、dos_2等是我的数据文件。此函数返回从每个文

我遇到了一些gnuplot
plot
命令的问题,这些命令需要很长时间才能执行。基本上,当您对数据文件执行以下操作时:

f(x) = sin(x) # for example!
plot "data" u ($1-f($1)):2
f($1)
将针对要绘制的每个数据点进行评估。现在,我有一个外部函数:

a(i) = real(system(sprintf("awk 'NR==1 {print $6}' dos_%i", i)))
其中不同的
dos_1
dos_2
等是我的数据文件。此函数返回从每个文件读取的实数

问题是,当在
绘图
命令中使用此函数时,例如

plot "dos_1" u ($1+a(1)):2
函数
a(1)
将针对每个数据点进行评估,即使它没有改变。这可能需要很多时间,因为它是一个调用外部命令的函数。现在,有人可能(正确地)建议,如果a(1)不变,我使用常数:

a1 = a(1)
plot "dos_1" u ($1+a1):2
这将大大加快执行速度并给出相同的结果。我的问题是,我必须绘制许多文件:

plot for [i=1:agazillion] "dos_".i u ($1+a(i)):2
永远不会结束

如何将函数值的存储(和使用)自动化到静态变量(或更轻的函数)上,示意图如下:

for [i=1:agazillion] "a".i = a(i) # This doesn't work!!!
plot for [i=1:agazillion] "dos_".i u ($1+"a".i):2 # This doesn't work either!
更复杂的是,我可以访问的最新gnuplot是4.4。(请同时建议适用于更高版本的解决方案,但说明它们仅适用于更高版本)

想法?

我知道的唯一“结构”是使用单词列表来存储值。文件的迭代必须使用bash完成,因为4.4版只能在plot调用中循环,而不能使用
do for…

a_values = system("for file in dos_*; do awk -v ORS=' ' 'NR==1 {print $6}' $file; done")

plot for [i=1:words(a_values)] "dos_".i u ($1+word(a_values, i)):2

我用4.4.4测试了它。

很好,谢谢。对于gnuplot的内容,您可以始终依赖Christoph:-)