2

我正在寻找学习如何搜索多项式并替换包含在有限点列表 {P[a,b], P[c,d],... 中的所有点 P[x,y]将 P[x,y]} 替换为 (q+ab) 等项,并将列表中未包含的所有点 P[a,b] 替换为不同的项 (w+cd)。

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

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] 是否在给定列表中,'pairs'

为了验证任何建议,输入

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

预先感谢您的任何帮助!

4

1 回答 1

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 *)
于 2013-06-10T12:10:47.597 回答