我用symphy做了一些计算,结果是一组常数。其中一个直接插入到下面的代码片段中:
from sympy import *
expr = (18**(Rational(1, 3))/(6*(3 + sqrt(3)*I)**(Rational(1, 3)))
+ 12**(Rational(1, 3))*(3 + sqrt(3)*I)**(Rational(1, 3))/12)
print(expr.evalf())
print(expr.simplify())
这又回来了
0.56857902130163 + 0.e-22*I
18**(1/3)/(6*(3 + sqrt(3)*I)**(1/3)) + (36 + 12*sqrt(3)*I)**(1/3)/12
所以这个表达式看起来是一个实数,但是sympy不能进一步简化它。用笔和纸,我把它简化成
cos(pi/18) / sqrt(3)
与evalf()
返回的数值一致。
我尝试了许多不同的简化函数,但似乎没有一个能够进一步简化表达式。使用替换,如
expr.subs(3 + sqrt(3)*I, sqrt(12) * exp(I*pi/6))
改进了表达式,但仍然同情无法断定它是真实的。用欧拉公式代换
expr.subs(3 + sqrt(3)*I, sqrt(12) * (cos(pi/6) + I*sin(pi/6)))
sympy最终能够得出这样的结论:表达式是真实的,但是在打印时表达式本身的大小会爆炸(即使我在替换之后尝试simplify
)。
有没有更好的方法来减少这种情况?我有很多类似的复杂常数表达式,我想知道它们是否真实。
目前没有回答
相关问题 更多 >
编程相关推荐