答案 0 :(得分:4)
首先,它有助于理解gnuplot如何生成函数图(或者实际上任何计算机程序必须如何执行它)。它必须将连续函数转换为某种离散表示。要绘制的数学函数在沿独立( x )轴的各个点处进行评估。这会创建一组( x , y )点。然后在这些点之间绘制一条线(想想“连接点”)。正如您可能想象的那样,使用的离散样本数量会影响曲线的准确程度,以及它看起来的平滑程度。
你注意到的问题是gnuplot中的默认样本量有点太低了。默认(我相信)是可见 x -axis上的100个样本。您可以使用
调整样本数(例如,1000)set samples 1000
我已经举了一些高斯人的例子来说明这一点。 (我粗略估计了你的高斯参数。)每个图都有不同数量的samples
:
注意如果样本量太小,线条会变得过于锯齿状。即使默认值100也太低。设置为1000使其足够平滑。这可能比它需要的更多,但它确实有效。如果您使用的是生成位图图像的终端(例如PNG),那么您应该不需要比用于 x -axis绘图区域的像素宽度更多的样本。如果你正在生成基于矢量的输出,那么只需选择一些“看起来正确”的东西,无论你使用它的是什么。
有关详情,请参阅问题Gnuplot x-axis resolution。
顺便说一句,生成上述示例的代码是:
set terminal pngcairo size 640,480 enhanced
# Line styles
set style line 1 lw 2 lc rgb "blue"
set style line 2 lw 2 lc rgb "red"
set style line 3 lw 2 lc rgb "yellow"
# Gaussian function stuff
set yrange [0:1.1]
set xrange [-20:20]
gauss(x,a) = exp(-(x/a)**2)
eqn(a) = sprintf("y = e^{-(x/%d)^2}", a)
# First example (default)
set output "example1.png"
set title "100 samples (default)"
plot gauss(x,8) ls 1 title eqn(8), \
gauss(x,2) ls 2 title eqn(2), \
gauss(x,1) ls 3 title eqn(1)
# Second example (too low)
set output "example2.png"
set title "20 samples (too low)"
set samples 20
replot
# Third example (plenty high)
set output "example3.png"
set title "1000 samples (plenty high)"
set samples 1000
replot