我有一个包含单个平方根的Mathematica表达式,示意性地
expr = a / (b + Sqrt[c]);
其中a
,b
,c
是大型表达式。我想在sqrt下提取表达式,例如通过匹配模式,如
Match[expr,Sqrt[x_]] // should return c
有一种简单的方法吗?
答案 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]]
。
HoldPattern
在Cases
表达式中必不可少,以防止相同的简化发生在匹配的模式中。
答案 2 :(得分:3)
我等待几个例子,但在此期间,请尝试:
Cases[expr, x_^(1/2 | -1/2) :> x, Infinity]
Sqrt(x)的标准内部形式为Power[x, 1/2]
。