sympy 如何简化以变量为指数的表达式

Posted

技术标签:

【中文标题】sympy 如何简化以变量为指数的表达式【英文标题】:sympy how to simplify expressions with a variable as exponent 【发布时间】:2020-10-27 17:52:15 【问题描述】:

我有这样一个表达式: 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) 没有成功。

【问题讨论】:

【参考方案1】:

我们需要强制对整数进行因式分解,这可以使用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

【讨论】:

以上是关于sympy 如何简化以变量为指数的表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何传递用于scipy的sympy表达式?

sympy 简化无法识别二项式的平方

使用 SymPy 表达式和 SciPy 求解器求解一阶 ODE 系统

在 sympy 中,如何将函数表达式转换为运算符重载表达式?

使用python的sympy解符号方程组后,如何将结果带入之后的符号表达式

有啥方法可以在 sympy 中进行整数除法?