增量小于 1 的 Gnuplot for 循环

Gnuplot for loop with increment smaller then 1

我试图绘制以下内容

plot for [h=0:2:0.1] sin(h*x)

但是报错如下

gnuplot> plot for [h=0:2:0.1] sin(x*h)
                     ^
         Expecting iterator     for [<var> = <start> : <end> {: <incr>}]
         or for [<var> in "string of words"]

但是下一行工作得很好

plot for [h=0:2:1.1] sin(x*h)

这是一个错误还是应该以这种方式工作?我的意思是,为什么它不接受小于 1 的增量?

我正在使用以下版本的 gnuplot

G N U P L O T
Version 5.0 patchlevel 1    last modified 2015-06-07 

Gnuplot 仅支持整数值的迭代(参见文档部分 "For loops in plot command",第 98 页)。小于 1 的值将转换为 0 的整数,这是不允许的。使用例如

plot for [h=0:3:1.5] sin(x*h) title sprintf('%.1f', h)

绘制了 h 值为 0, 1, 2, 3 的 4 条曲线。要使用较小的值,您必须稍后缩放迭代值:

plot for [h=0:20:1] sin(0.1*h*x)

除了 Christoph 的回答之外,另一种无需在函数内进行缩放即可执行任意增量循环的方法是定义一个值列表,其中包含要循环的所有元素。这可以通过对 seq:

的系统调用轻松完成
list(start,end,increment)=system(sprintf("seq %g %g %g", start, increment, end))
plot for [i in list(0.,1.,0.1)] sin(i*x)

如果 seq 不可用,一个等效的 gnuplot-only 解决方案(由 Karl 在评论中提出)如下:

start=0.; end=1.; inc=0.1
list = ""; a=start-inc; while (a<end) {list=list.sprintf(" %.3f",a=a+inc)}
plot for [i in list] sin(i*x)

请注意,while 循环仅在 gnuplot 4.6 之后可用。