sympy简化了虚数的分数幂

时间:2014-06-07 18:50:11

标签: python sympy

为什么没有-(-1)**(1/3) + (-1)**(2/3)减少到-1?

wolfram alpha knows它是-1但sympy gamma只进行浮动近似

re(_) + I*im(_)生成一个NegativeOne对象,但我试过的其他简化函数都没有做任何事情。

1 个答案:

答案 0 :(得分:3)

我假设你真的是-(-1)**Rational(1, 3) + (-1)**Rational(2, 3),因为字面上-(-1)**(1/3) + (-1)**(2/3)都是Python(没有SymPy),并且以数字方式进行评估。

大多数SymPy对象不会自动执行任何类型的非平凡简化。原因是有时您可能希望在没有简化的情况下代表-(-1)**(1/3) + (-1)**(2/3)。此外,简化通常是一项昂贵的操作,并且在创建操作时这样做效率非常低,因为通常您创建的中间表达式不需要在中间阶段进行简化。

re(expr) + I*im(expr)没问题。更自动化的方法是使用expand_complex()

In [19]: expand_complex(-(-1)**Rational(1, 3) + (-1)**Rational(2, 3))
Out[19]: -1

理想情况下,simplify()会调用expand_complex(),并且有一个未解决的问题(https://github.com/sympy/sympy/issues/7569)。

并注意到SymPy Gamma直接在SymPy上提供了很多自动化功能。例如,它将-(-1)**(1/3) + (-1)**(2/3)转换为SymPy类型,并对表达式执行各种功能,如数值评估,简化,区分等。