我有一堆类似于
的同情表达g = sp.sympify('2**(1/4) * 5**(1/2) * 3**(3/4) * 6**(-1)')
我想简化。在这种情况下,我非常希望将其改写为(25/24)**(1/4),但我无法找到简化设置或其他允许我做的方法listed here此
所以我想要的是一堆自然数 a_i 和理性指数(p_i / q_i),我想要产品
a1**(p1/q1) * a2**(p2/q2) * ... * ak**(pk/qk)
被重写为
(r/s)**(1/lcm(q1,q2,...,qk))
或可能
(r1**s1 * r2**s2 *... rm**sm)**(1/lcm(q1,q2,...,qk))
其中 r_i 是主要因素, s_i 是整数。是否有任何内置功能可以让我这样做?
其次,我注意到Sympy不会简化某些三角函数身份。例如,它似乎不知道
tan((1/2)*atan(x)) = (sqrt(x**2 + 1)-1)/x
即使x更复杂,我怎么能告诉Sympy使用这个身份呢?
答案 0 :(得分:0)
试试这个:
def simplify_root(g):
d = sp.degree(sp.minimal_polynomial(g))
return sp.Pow(sp.simplify(g**d), sp.Rational(1, d), evaluate=False)