2024-05-15 18:35:32 发布
网友
为什么-(-1)**(1/3) + (-1)**(2/3)不减少到-1?在
-(-1)**(1/3) + (-1)**(2/3)
wolfram alpha knows它是-1,但是sympy gamma只做浮点近似
re(_) + I*im(_)生成一个NegativeOne对象,但是我尝试的其他简化函数都没有对它做任何操作。在
re(_) + I*im(_)
NegativeOne
我假设你的意思是-(-1)**Rational(1, 3) + (-1)**Rational(2, 3),因为字面上的-(-1)**(1/3) + (-1)**(2/3)都是Python(没有SymPy),并用数值计算。在
-(-1)**Rational(1, 3) + (-1)**Rational(2, 3)
大多数SymPy对象不会自动进行任何非平凡的简化。原因是有时您可能希望表示-(-1)**(1/3) + (-1)**(2/3),而不进行简化。另外,一般来说,简化是一个昂贵的操作,在操作创建时这样做会非常低效,因为通常您创建的中间表达式不需要在中间阶段进行简化。在
re(expr) + I*im(expr)很好。一种更自动化的方法是使用expand_complex():
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)。在
simplify()
还有一点需要注意的是,sypy Gamma直接在sypy之上提供了很多自动化。例如,它将-(-1)**(1/3) + (-1)**(2/3)转换为SymPy类型,并对表达式执行各种功能,如数值计算、简化、微分等
我假设你的意思是
-(-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()
:理想情况下,
simplify()
将调用expand_complex()
,这是一个尚未解决的问题(https://github.com/sympy/sympy/issues/7569)。在还有一点需要注意的是,sypy Gamma直接在sypy之上提供了很多自动化。例如,它将
-(-1)**(1/3) + (-1)**(2/3)
转换为SymPy类型,并对表达式执行各种功能,如数值计算、简化、微分等相关问题 更多 >
编程相关推荐