如何在mathematica中搜索和替换?

时间:2013-06-09 22:26:32

标签: wolfram-mathematica replaceall mathematical-expressions

我正在研究如何搜索多项式并替换有限点列表中包含的所有点P [x,y] {P [a,b],P [c,d] ,. ..,P [x,y]},其项有(q + ab),并用不同的术语(w + cd)替换列表中未包含的所有点P [a,b],例。

以下是我一直在尝试的一些代码......

K[poly_, pairs_] := poly //. IF[MemberQ[pairs, P[a_, b_]], P[a_, b_] :> (q+xy), P[a_, b_] :> (w+cd)]

其中//。是通过所有对替换,IF有条件地用适当的术语替换对,而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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

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 *)