【问题标题】:Python sympy.Plot - OverflowError: int too large to convert to floatPython sympy.Plot - OverflowError: int too large to convert to float
【发布时间】:2017-12-13 12:40:04
【问题描述】:

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

【问题讨论】:

  • 你想做什么?您是否正在尝试实施特定的公式?尝试编写一个循环,使您的x 在 [0,100] 范围内,并使用打印语句查看操作结果。我认为在x 的某个值之后,您的结果将变为无穷大。
  • 我只是想将公式 g(x) 实现为图形。我已经打印了结果,分数有无限长的分子和分母。我尝试四舍五入并使用浮点数,但两者都出现错误。

标签: python python-3.x sympy


【解决方案1】:

问题在于,为了绘制函数,SymPy 使用 NumPy 对其进行数值计算。 NumPy 仅限于机器精度浮点数,它不能大于 ~10^309(365!是 ~10^778)。

您需要做的是重写表达式,使其不会产生如此大的中间值。 SymPy 仍然 needs some work 能够很好地帮助解决这个问题。

我们可以使用身份:

  • binomial(n, x) = factorial(n)/(factorial(x - n)*factorial(x)

binomial(365, x)*factorial(x)替换factorial(365)/factorial(365 - x)

1 - binomial(365, x)*factorial(x)*365**-x

这给出了这个情节

【讨论】:

  • 感谢您的评论不幸的是我遇到了一个不同的问题,当我使用二项式函数时,错误现在返回“无法从 x + 1 创建 mpf”所以我尝试使用身份但它只是给了我同样的错误“int太大而无法转换为float”
  • 你在导入 mpmath 吗?听起来您使用的是 mpmath 函数而不是 sympy 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
相关资源
最近更新 更多