问题描述
|
我有一个Mathematica表达式,其中包含一个平方根
expr = a / (b + Sqrt[c]);
a
,b
,c
是大表达式。我想在sqrt下提取表达式,例如通过匹配一个模式,例如
Match[expr,Sqrt[x_]] // should return c
是否有捷径可寻?
解决方法
从理论上讲,这应该可以正常工作:
extractSqrt = Cases[ToBoxes@#,SqrtBox@x_ :> ToExpression@x,Infinity] &;
extractSqrt[expr]
,如果您愿意将分配更改为“ 6”,则可以执行以下操作:
expr = Hold[a / (b + Sqrt[c])];
Cases[expr,HoldPattern @ Sqrt[x_] :> x,Infinity]
赋值语句中的Hold
阻止Mathematica对表达式应用任何简化形式。在这种情况下,“ 9”将“简化”变成“ 10”。
ѭ11在表达式ѭ12中是必不可少的,以防止对匹配的模式进行相同的简化。
,我等待一些示例,但与此同时,请尝试:
Cases[expr,x_^(1/2 | -1/2) :> x,Infinity]
Sqrt(x)的标准内部格式为Power[x,1/2]
。