从大表达式中提取与模式匹配的表达式

时间:2011-04-15 22:30:19

标签: wolfram-mathematica

我有一个包含单个平方根的Mathematica表达式,示意性地

expr = a / (b + Sqrt[c]);

其中abc是大型表达式。我想在sqrt下提取表达式,例如通过匹配模式,如

Match[expr,Sqrt[x_]] // should return c

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:12)

理论上,这应该可以正常工作:

extractSqrt = Cases[ToBoxes@#, SqrtBox@x_ :> ToExpression@x, Infinity] &;

extractSqrt[expr]

答案 1 :(得分:5)

如果您愿意将作业更改为expr,则可以执行以下操作:

expr = Hold[a / (b + Sqrt[c])];

Cases[expr, HoldPattern @ Sqrt[x_] :> x, Infinity]

赋值语句中的Hold会阻止Mathematica对表达式应用任何简化。在这种情况下,Sqrt[c]会“简化”为Power[c,Rational[1,2]]

HoldPatternCases表达式中必不可少,以防止相同的简化发生在匹配的模式中。

答案 2 :(得分:3)

我等待几个例子,但在此期间,请尝试:

Cases[expr, x_^(1/2 | -1/2) :> x, Infinity]

Sqrt(x)的标准内部形式为Power[x, 1/2]