3
如何在如下表达式中添加x的幂数?简单的电源计数
x^2f[x]g[x^3]
或
x^2g[x^4]
或
x^2g[x^2f[x^2]]
计数是这样的,所有这些例子必须返回6. 我在考虑使用计数的一些模式,但我没有”为此设法构建了一个模式。
如何在如下表达式中添加x的幂数?简单的电源计数
x^2f[x]g[x^3]
或
x^2g[x^4]
或
x^2g[x^2f[x^2]]
计数是这样的,所有这些例子必须返回6. 我在考虑使用计数的一些模式,但我没有”为此设法构建了一个模式。
这里是我快速的黑客 - 的一些行为(见最后一个例子)可能不会很你想要什么:
SetAttributes[countPowers, Listable]
countPowers[expr_, symb_] := Module[{a},
Cases[{expr} /. symb -> symb^a // PowerExpand, symb^n_ :> n,
Infinity] /. a -> 1 // Total]
然后
In[3]:= countPowers[{x^2 f[x] g[x^3], x^2 g[x^4], x^2 g[x^2 f[x^2]]}, x]
Out[3]= {6, 6, 6}
和
In[4]:= countPowers[{x^(2 I) g[x^3], g[x, x^4],
x^2 g[E^(2 Pi I x) , f[x]^x]}, x]
Out[4]= {3 + 2 I, 5, 5}
既然你想把x
作为1的隐式幂数,你可以使用这个:
powerCount[x_Symbol][expr_] :=
Tr @ Reap[PowerExpand[expr] /. {x^n_ :> Sow[n], x :> Sow[1]}][[2,1]]
powerCount[x] /@
{
x^2f[x]g[x^3],
x^2g[x^4],
x^2g[x^2f[x^2]]
}
{6, 6, 6}
或者,这可以在没有母猪写入和粒,如果这使得它更易于阅读:
powerCount[x_Symbol][expr_] :=
Module[{t = 0}, PowerExpand[expr] /. {x^n_ :> (t += n), x :> t++}; t]
两种形式可以更简洁的用消失图案,但可能需要清晰起见:
powerCount[x_Symbol][expr_] :=
Tr @ Reap[PowerExpand[expr] /. x^n_ | x :> Sow[1 n]][[2, 1]]
写一个解析器? – 2011-12-17 08:30:37
@MitchWheat我在Mathematica帮助和维基百科中查找解析器。此外,我在Stack Overflow中搜索了解析器+ Mathematica,但它对我来说似乎都是相当抽象或技术性的。你可以给我一个Mathematica解析器的简单例子吗? – sjdh 2011-12-17 08:44:11
'(x y)^ 2`应该返回1还是2?那么像`f [x,x^2]`这样的东西呢?它应该返回3吗? – Simon 2011-12-17 11:16:00