为什么没有-(-1)**(1/3) + (-1)**(2/3)
减少到-1?
wolfram alpha knows它是-1但sympy gamma只进行浮动近似
re(_) + I*im(_)
生成一个NegativeOne
对象,但我试过的其他简化函数都没有做任何事情。
答案 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类型,并对表达式执行各种功能,如数值评估,简化,区分等。