Python sympy.Plot - OverflowError:int太大而无法转换为float

时间:2017-12-12 12:43:44

标签: python python-3.x sympy

所以我想将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))

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

这给出了这个情节

enter image description here