Sympy:用功能代替

时间:2015-11-29 13:43:49

标签: function operators sympy substitution

我有一个函数f: f = Function('f')(x,y)

我的程序的输出是一个大的多项式,其变量X和Y的项为XYf,Xf,Yf。我想定义替换,以便

  

X f(x,y)= f(x + 1,y)

     

Y f(x,y)= f(x,y + 1)

类似地,XY f(x,y)= f(x + 1,y + 1)。

我使用以下代码来定义X和Y的操作。

poly = poly.subs(X*f, f.subs(x,x+1)) poly = poly.subs(Y*f, f.subs(y,y+1))

虽然这适用于Xf和Yf的术语,但它不适用于XYf的术语。 XYf将输出设为Yf(x + 1,y)而不是f(x + 1,y + 1)。

如何强制Y对“新”f?

采取行动

1 个答案:

答案 0 :(得分:1)

XYf给出Yf(x + 1,y),因为它匹配Xf并且是你做的第一次替换。要以您想要的方式替换所有三个,您应该按顺序执行这些操作,以便您不会与以后的实例匹配,例如

poly = poly.subs(X*Y*f, f.subs(x,x+1).subs(y, y + 1))
poly = poly.subs(X*f, f.subs(x,x+1))
poly = poly.subs(Y*f, f.subs(y,y+1))

这样,您首先替换所有X*Y*f(x, y),因此当您替换X*f(x, y)Y*f(x, y)时,它无法替换X*Y*f(x, y)(因为它们已被替换)。

作为旁注,在代码清晰度方面,如果您只是定义

,它会变得更简单
f = Function('f')

然后明确地写f(x, y)f(x + 1, y)等等(而不是让f = f(x, y)并使用subs来创建f(x + 1, y)等等。