我正在使用sympy在Python3中进行符号计算。我的问题是强制替换已知的术语a,定义为x,y和z的乘积。看到这个最小的例子:
import sympy as sp
from sympy.abc import a,x,y,z
expr=(x*y)/z**3 *(x**2*y**2-5*x*y*z+12*z**2)
print (expr) #as typed in line 3
print (expr.subs(x*y/z,a)) #only substitues the first factor to a**1/z**2
print (sp.simplify(expr)) #not any better
我希望看到的是表格
a**3-5*a**2+12*a
a = x * y / z第4行也不是第5行或第6行。谁能帮我? 谢谢!
答案 0 :(得分:1)
嗯,对于这个特殊的例子,以下想法导致了一个解决方案,但更一般地说,我不知道如何实现目标。
因此,不要将x*y/z
替换为a
,而是将x*y
替换为a*z
,然后进行简化。
expr2 = expr.subs(x*y, a*z)
print(expr2)
print(sp.simplify(expr2))
答案 1 :(得分:1)
先使用展开:
In [13]: expr.expand()
Out[13]:
3 3 2 2
x ⋅y 5⋅x ⋅y 12⋅x⋅y
───── - ─────── + ──────
3 2 z
z z
In [14]: expr.expand().subs({x * y / z: a})
Out[14]:
3 2
a - 5⋅a + 12⋅a