gpt4 book ai didi

math - Gnuplot 中的高斯峰值不重叠

转载 作者:行者123 更新时间:2023-12-02 04:02:54 37 4
gpt4 key购买 nike

我正在尝试使用 Gnuplot 在同一张图上绘制多个高斯函数,这是一件非常简单的事情。问题是峰不重叠,我得到以下结果,看起来它们有不同的峰,但事实并非如此。我该如何解决这个问题?

ugly thing

最佳答案

首先,它有助于理解 gnuplot 如何生成函数图(或者实际上任何计算机程序必须如何执行此操作)。它必须将连续函数转换为某种离散表示。要绘制的数学函数在沿独立 (x) 轴的各个点处进行计算。这将创建一组 (x,y) 点。然后在这些点之间画一条线(想想“连接点”)。正如您可能想象的那样,所使用的离散样本的数量会影响曲线表示的准确性及其看起来的平滑程度。

您注意到的问题是 gnuplot 中的默认样本大小有点太低。默认值(我认为)是可见的 x 轴上的 100 个样本。您可以使用

调整样本数量(例如,调整为 1000)
set samples 1000

我制作了一些高斯图示例来说明这一点。 (我对您的高斯参数进行了粗略估计。)每个图都有不同数量的样本:

100 samples (default) 20 samples (too low) 1000 samples (plenty high)

请注意,如果样本量太小,线条会变得过于锯齿。即使默认值 100 也太低了。设置为 1000 会非常流畅。这可能超出了它的需要,但它确实有效。如果您使用的是生成位图图像(例如 PNG)的终端,那么您需要的样本不应多于用于 x 轴绘图区域的像素宽度。如果您要生成基于矢量的输出,那么只需为您使用的任何内容选择“看起来正确”的内容即可。

查看问题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

关于math - Gnuplot 中的高斯峰值不重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41051778/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com