gnuplot:功能正在被切断

时间:2018-05-26 21:38:08

标签: gnuplot

我试图用lambda = 100绘制泊松分布,但是当λ值很高时,部分分布被切断了,我无法弄清楚原因。

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

1 个答案:

答案 0 :(得分:1)

要修复的第一件事,使用上面的代码,您是否注意到即使lambda = 10也不会产生正确的结果。这个问题与gnuplot的函数默认采样有关。它是100.您想要绘制151点(0到150,整数值)。因此,虽然你对factorial使用int()函数,但lambda ** x并没有给你正确的结果。首先将采样设置为您想要的点数:

set sample 151

gnuplot的部门似乎有一个错误。如果你只是print poisson(88),你会得到NaN。但是,您可以print 100**88获取1e+176,然后print 88!获取1.85482642257398e+134。但是如果你print 1e+176 / 1.85482642257398e+134获得inf.0。这不应该发生,因为这里没有溢出。

通过使用log(lambda ** x)和log(int(x)!)并使用logarithms属性将所有内容放入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