测试是否存在包含非对易符号的子表达式

2024-04-25 13:05:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的同情心表达

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

那么,我怎么知道我要找到的子表达式是否在表达式中呢?你知道吗


Tags: false产品表达式b0b1d1hasprint
1条回答
网友
1楼 · 发布于 2024-04-25 13:05:35

这似乎是当前非交换符号的问题,否则expr.has(d0*u0)返回True。你知道吗

只要subs可以识别一个子表达式,下面的方法就会起作用:

dummy = Dummy()
print(expr.subs(d0*u0, dummy).has(dummy))

即,用虚拟变量替换子表达式,并测试该虚拟变量的存在。你知道吗

但是,在SymPy(1.2+)的未来版本中,修复此错误后,此解决方法将变得不必要。你知道吗

相关问题 更多 >