我有以下Sympy表达式
expr=b0*d0*u0 - b0*d1*u1 - b1*d0*u1 - b1*d1*u0 + d0*b0*u0 - d0*b1*u1 - d1*b0*u1 - d1*b1*u0
我想知道,例如,产品
d0*u0
在此表达式中。为此,我使用
print(expr.has(d0*u0))
但结果是
False
但是,如果我替换此子表达式而不询问它是否在表达式中,Sympy会毫无问题地执行此操作,例如。
print(expr.subs(d0*u0,x0))
b0*x0 - b0*d1*u1 - b1*d0*u1 - b1*d1*u0 + d0*b0*u0 - d0*b1*u1 - d1*b0*u1 - d1*b1*u0
那么,我怎么知道我想要找到的子表达式是否在表达式中?
答案 0 :(得分:0)
这似乎是非交换符号的问题,否则expr.has(d0*u0)
将返回True。
只要subs
可以识别子表达式,就会发生以下情况:
dummy = Dummy()
print(expr.subs(d0*u0, dummy).has(dummy))
即,用虚拟变量替换子表达式,并测试该虚拟变量的存在。
但是,当修复此错误时,SymPy(1.2+)的未来版本将不再需要此解决方法。