同情如何用变量作为指数来简化表达式
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
我有这样一个表达: 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