gnuplot:函数被切断

gnuplot:函数被切断,gnuplot,Gnuplot,我试图绘制一个lambda=100的泊松分布,但当lambda值很高时,部分分布被截断,我不知道为什么 set xrange [ 0: 150] lambda = 100 poisson(x) = lambda**x / int(x)! * exp(-lambda) plot poisson(x) with boxes 首先要解决的问题是,使用上面的代码,您是否注意到即使lambda=10也不能产生正确的结果。这个问题与gnuplot的默认函数采样有关。它是100。您有151个要打印的点(0到

我试图绘制一个lambda=100的泊松分布,但当lambda值很高时,部分分布被截断,我不知道为什么

set xrange [ 0: 150]
lambda = 100
poisson(x) = lambda**x / int(x)! * exp(-lambda)
plot poisson(x) with boxes

首先要解决的问题是,使用上面的代码,您是否注意到即使lambda=10也不能产生正确的结果。这个问题与gnuplot的默认函数采样有关。它是100。您有151个要打印的点(0到150个整数值)。因此,尽管您对阶乘使用int()函数,但lambda**x并没有给出正确的结果。首先,将采样设置为所需的点数:

set sample 151
gnuplot的部门似乎有一个bug。如果您只需
打印泊松(88)
就可以得到NaN。但是,您可以
打印100**88
并获得
1e+176
,您可以
打印88
并获取
1.85482642257398e+134
。但是,如果您
打印1e+176/1.85482642257398e+134
,您将获得
inf.0
。这不应该发生,因为这里没有溢出

我通过使用log(lambda**x)和log(int(x)!)并使用对数的属性将所有内容引入exp()函数,使其正常工作。这消除了除法和乘法中疯狂的大数字。尝试:

set xrange [ 0: 150]
set sample 151
lambda = 100
poisson(x) = exp(log(lambda**x) - log(int(x)!) - lambda)
plot poisson(x) with boxes