Wolfram mathematica 如何在mathematica中搜索和替换?

Wolfram mathematica 如何在mathematica中搜索和替换?,wolfram-mathematica,replaceall,mathematical-expressions,Wolfram Mathematica,Replaceall,Mathematical Expressions,我想学习如何搜索一个多项式,并用(q+ab)等术语替换有限点列表{p[a,b],p[c,d],…,p[x,y]}中包含的所有点p[x,y],以及用不同的术语(w+cd)替换列表中不包含的所有点p[a,b] 这是我一直在尝试的一些代码 K[poly,pairs]:= poly/。如果[MemberQ[pairs,P[a_uu,b_u]],P[a_u,b_u]:>(q+xy), P[a,b]:>(w+cd)] where/。是通过所有对进行替换,如果有条件,则用适当的术语替换对,MemberQ检查对

我想学习如何搜索一个多项式,并用(q+ab)等术语替换有限点列表{p[a,b],p[c,d],…,p[x,y]}中包含的所有点p[x,y],以及用不同的术语(w+cd)替换列表中不包含的所有点p[a,b]

这是我一直在尝试的一些代码

K[poly,pairs]:=
poly/。如果[MemberQ[pairs,P[a_uu,b_u]],P[a_u,b_u]:>(q+xy),
P[a,b]:>(w+cd)]

where/。是通过所有对进行替换,如果有条件,则用适当的术语替换对,MemberQ检查对P[a,b]是否在给定的列表“对”中

要验证任何建议,请输入

K[ -q P[1,3] P[4,6] , {P[1,3], P[2,7]}] 
应该输出

-ab cd q - cd q^2 - ab q w - q^2 w

提前感谢您的帮助

试试这样的东西

K[poly_, pairs_] := poly /. ( #-> q+ab & /@ pairs ) /. P[__,__]-> w + cd
或者,更接近您的方法:

K[poly_, pairs_] := poly /. P[a_,b_] :> If[MemberQ[pairs,P[a,b]], q+ab, w +cd ]
注意:您需要展开以获得所需的表单

Expand[K[-q P[1, 3] P[4, 6], {P[1, 3], P[2, 7]}]]

(*  -ab cd q - cd q^2 - ab q w - q^2 w *)

伟大的非常感谢你,乔治。