我有一个函数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?
采取行动答案 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)
等等。