为什么-(-1)**(1/3) + (-1)**(2/3)
不减少到-1?
wolfram alpha knows它是-1但是sympy gamma仅进行浮点近似
re(_) + I*im(_)
生成一个 NegativeOne
对象,但我尝试过的其他简化函数都没有对其执行任何操作。
最佳答案
我假设您真正的意思是 -(-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()
,并且对此存在一个 Unresolved 问题 ( https://github.com/sympy/sympy/issues/7569 )。
值得注意的是,SymPy Gamma 直接在 SymPy 之上提供了大量自动化功能。例如,它将 -(-1)**(1/3) + (-1)**(2/3)
转换为 SymPy 类型并对表达式执行各种函数,例如数值计算、简化、微分等。
关于python - sympy 简化虚数的分数幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100509/