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 如何简化以变量为指数的表达式的主要内容,如果未能解决你的问题,请参考以下文章
使用 SymPy 表达式和 SciPy 求解器求解一阶 ODE 系统
在 sympy 中,如何将函数表达式转换为运算符重载表达式?