所以我想将g函数显示为图形,但每当我运行它时,它会返回标题中的OverflowError,我无法弄清楚原因。有人可以帮忙吗?
%matplotlib inline
import sympy as sym
def g(x):
return 1 - (sym.factorial(365) / ((365 ** x) * sym.factorial(365 - x)))
sym.plot(f(x), (x, 0, 100), ylim=(0, 1))
答案 0 :(得分:1)
问题在于,为了绘制函数,SymPy使用NumPy以数字方式对其进行评估。 NumPy仅限于机器精度浮标,其不大于~10 ^ 309(365!~10 ^ 778)。
您需要做的是重写表达式,使其不会产生如此大的中间值。 SymPy仍然needs some work能够很好地帮助这个。
我们可以使用身份:
binomial(n, x) = factorial(n)/(factorial(x - n)*factorial(x)
将factorial(365)/factorial(365 - x)
替换为binomial(365, x)*factorial(x)
:
1 - binomial(365, x)*factorial(x)*365**-x
这给出了这个情节