圣人中的符号数学:(a * x * y + z).subs(x + y == b)

Symbolic math in sage: (a * x * y + z).subs(x + y == b)

给定一个简单的术语 a * x * y + b,我想用占位符 c 替换子术语,例如 x * y。我按以下方式执行此操作

sage: a,b,c,x,y = var('a,b,c,x,y')
sage: expr = a * x * y + c
sage: expr.subs(x * y == b)

据此,我预计 expra * b + c。相反,它仍然 相同。结果是:

a*x*y + c

我遇到了 wild 函数,但我还不清楚 它实际上做了什么。

我现在在 Python 3.6 中使用 sympy 而不是 Sage,但这应该是相似的。如果 Sage 的翻译效果不佳,请告诉我。

subs方法不改变它的对象;它 returns 替换后的表达式,但你必须存储结果。您的行 expr.subs(x * y == b) 可能会显示结果,但该结果随后会被丢弃,因为您没有将它存储到任何变量中。

from sympy import symbols
a,b,c,x,y = symbols('a,b,c,x,y')
expr = a * x * y + c
newexpr = expr.subs(x*y, b)
print(newexpr)

结果打印输出如您所料:

a*b + c

要确认 subs() 在 Sage 中的工作方式,请在 this Sage documentation page 中找到 subs( 并记下短语 "The polynomial itself is not affected."