Python 虚数分数次幂的辛化简
为什么Python 虚数分数次幂的辛化简,python,sympy,Python,Sympy,为什么-(-1)**(1/3)+(-1)**(2/3)没有减少到-1 它是-1,但只做浮点近似 re()+I*im()生成了一个NegativeOne对象,但是我尝试过的其他简化函数都没有对它做任何处理。我假设你的意思是-1)**Rational(1,3)+-1)**Rational(2,3),就像字面上的-1)**(1/3)+-1)**(2/3)都是Python(没有SymPy),并进行数值计算 大多数SymPy对象不会自动进行任何类型的非平凡简化。原因是,有时您可能希望表示-(-1)**(1
-(-1)**(1/3)+(-1)**(2/3)
没有减少到-1
它是-1,但只做浮点近似
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\u complex()
:
理想情况下,simplify()
将调用expand\u complex()
,这是一个悬而未决的问题()
需要注意的是,SymPy Gamma直接在SymPy之上提供了很多自动化功能。例如,它将
-(-1)**(1/3)+(-1)**(2/3)
转换为SymPy类型,并对表达式执行各种功能,如数值计算、简化、微分等。舍入误差。如果您想确切知道发生了什么,请查看Symphy源代码。@larsmans:但是Symphy没有舍入错误?它在计算普通Python表达式时会有舍入错误,我怀疑这里就是这种情况。它并没有改变Python语言,只是增加了它。@larsmans不,它是一种同情的表达。我尝试了一系列简化函数,但没有找到expand\u complex()
。
In [19]: expand_complex(-(-1)**Rational(1, 3) + (-1)**Rational(2, 3))
Out[19]: -1