【问题标题】:sympy atan not returning exact valuesympy atan 没有返回确切的值
【发布时间】:2018-12-09 00:02:47
【问题描述】:

以下输入,通过sympy运行时

atan(2+sqrt(3))

返回

1.30899693899575

而不是

5π/12

为什么会这样?

【问题讨论】:

  • 事实上,确实如此:sympy.atan(2+sympy.sqrt(3)).evalf()==(5*sympy.pi/12).evalf()True
  • 是的,它将值评估为 true,但不在以精确形式返回的特殊值列表中。 (假设存在这样的列表)
  • 那么你的问题被错误地问了:你不是在寻找一个精确的值,而是一个特殊形式的值。答案是:大概 5π/12 还不够特别。
  • 结果有什么问题? 5π/12 ≈ 1.3089969389957471826927680763665。普通算术不返回符号结果
  • 我无法重现此内容。 atan(2+sqrt(3)) 为我返回 atan(2+sqrt(3)),而不是 1.30899693899575

标签: python math sympy trigonometry


【解决方案1】:

如果您怀疑结果可以用 pi 表示,您可以尝试nsimplify,并以常量形式给出 pi。

>>> nsimplify(atan(sqrt(3) + 2), [pi])
5*pi/12

顺便说一句,您可以通过查看它们的eval 方法的源代码来了解任何三角函数可以识别哪些特殊值。

【讨论】:

  • 我不知道 nsimplify 是如何工作的。它是否寻找数值近似值,例如:结果/提示 = 分母不太大的理性?如果是这样,那就有点不满意了;最好有一个准确的结果,因为不难编出可以愚弄启发式的例子。
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多