简化根和三角恒等式

时间:2018-05-24 14:59:03

标签: sympy

我有一堆类似于

的同情表达
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使用这个身份呢?

1 个答案:

答案 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)