2013-04-27 77 views
1

我试图在Mathematica中实现我自己的Coefficient函数版本,用于学习目的。这是我写到目前为止:从MatchQ提取匹配对象

myCoefficient[fun_,var_,pow_] := Module[ {f,coeff}, 
    f[var] = Expand[fun]; 

    Map[ If[ MatchQ[#, a_ Power[var,pow] ], coeff=a] &, f[var]]; 
    Map[ If[ MatchQ[#, Power[var,pow] ], coeff=1] &, f[var]]; 

    Return[coeff]; 
] 

我的问题是If[ MatchQ[#, a_ Power[var,pow] ], coeff=a]不回什么a_比赛中MatchQ但返回文字“A”代替。

我该如何参考MatchQ匹配的内容?

+2

如果你正在学习Mathematica,我会建议http://mathematica.stackexchange.com而不是这个网站 – 2013-04-27 18:37:26

+1

我第二个议案。绝大多数的数学家专家搬到那里。一对夫妇仍然困扰着stackoverflow,但他们非常罕见。 – rcollyer 2013-04-28 03:27:27

+0

感谢您的建议 – blue 2013-04-28 10:46:56

回答

0

我找到解决这个问题的方法是使用一个替代规则If语句中,就像这样:

Map[ If[ MatchQ[ #, a_. Power[var,pow] ], coeff = (# /. b_. Power[var,pow] -> b);] &, myexpr]; 
0

办法做到那种你想要的东西是使用类似

If[ Length[matchedparts = Cases[ expr , pattern :> result]]>0 , use(matchedparts), do something else ]