同情如何用变量作为指数来简化表达式

sympy how to simplify expressions with a variable as exponent

我有这样一个表达: 4^k/(12^k*A+4^k*B)

Python代码为:

import sympy as sy
k,A,B=sy.symbols('k A B',real=True)
C=sy.Rational(4)**k/(sy.Rational(12)**k*A+sy.Rational(4)**k*B)

有没有可以简化表达式的SymPy函数?像 MAXIMA 中的 radcan 之类的东西。 我尝试了 sy.simplify(C)、sy.factor(C)、sy.powsimp(C)、sy.radsimp(C)、sy.expand(C) 但没有成功。

我们需要强制分解整数,我们可以用 factorint:

In [46]: C                                                                                                                                                    
Out[46]: 
      k     
     4      
────────────
  k      k  
12 ⋅A + 4 ⋅B

In [47]: C.replace(lambda x: x.is_Integer, lambda x: Mul(*factorint(x, multiple=True), evaluate=False))                                                       
Out[47]: 
             k       
        (2⋅2)        
─────────────────────
         k          k
A⋅(2⋅2⋅3)  + B⋅(2⋅2) 

In [48]: expand(_)                                                                                                                                            
Out[48]: 
        2⋅k       
       2          
──────────────────
 2⋅k  k      2⋅k  
2   ⋅3 ⋅A + 2   ⋅B

In [49]: cancel(_)                                                                                                                                            
Out[49]: 
   1    
────────
 k      
3 ⋅A + B