在Mathematica中计算表达式数量

4

如果我想要计算表达式 x 中符号 ^ 出现的次数,那很简单:

Count[x, _Power, {0, Infinity}]

假设我只想计算-1的某个次方的实例。我该怎么做呢?
我曾尝试过:
Count[(-1)^n + 2^n, _Power[-1, _], {0, Infinity}]

甚至

Count[Plus[Power[-1, n], Power[2, n]], _Power[-1, _], {0, Infinity}]

但是两者都返回了0。

问题的起源:我正在构建一个ComplexityFunction,它允许某些表达式,如Power[-1, anyComplicatedExpressionHere]Sqrt[5](与我的问题相关),但会严重惩罚其他使用PowerSqrt的情况。


代码应该是 Count[x, _Power, {0, Infinity}] - Sasha
1
只是一个小提示,Power 并不总是对应于表达式中的 ^,例如 1/xFullForm 中是 Power[x,-1]。请注意,如果这与您的问题相关,则有一些类似这样的怪癖。 - Szabolcs
3个回答

6
你需要执行 Count[x,Power[-1,_], {0, Infinity}]
In[4]:= RandomInteger[{-1, 1}, 10]^RandomChoice[{x, y, z}, 10]

Out[4]= {(-1)^x, (-1)^x, 0^y, 0^z, (-1)^z, 1, 1, 1, (-1)^y, 0^x}

In[5]:= Count[%, (-1)^_, {0, Infinity}]

Out[5]= 4

1
有趣。在发布之前,我尝试了Count[(-1)^n + 2^n, _Power[-1, _], {0, \[Infinity]}]并得到了0。 - Charles
3
这是因为_Power匹配Power[___],所以您的模式正在寻找Power[___][-1,_],但并不存在这样的表达式。您的模式会匹配(a^b)[-1,n],它的完整形式为Power[a,b][-1,n]。正确的模式应该是Power[-1,_] - Sasha

4

关于什么?

Count[expr, Power[-1, _], {0, Infinity}]

补充一下,问题中的示例不正确。我认为你可能是指

Count[x, _Power, {0, Infinity}]

3
也许
Count[x, Power[-1, _], Infinity]
  • Infinity 的级别规范包括从1到无穷的所有级别。
  • Power[-1, _] 模式只会匹配基数为 -1Power 实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接