I have a Mathematica expression that contains a single square root, schematically
expr = a / (b + Sqrt[c]);
where a
,b
,c
are large expressions. I would like to extract the expression under the sqrt, for instance by matching to a pattern, something like
Match[expr,Sqrt[x_]] // should return c
Is there an easy way to do this?
Theoretically, this should work correctly:
extractSqrt = Cases[ToBoxes@#, SqrtBox@x_ :> ToExpression@x, Infinity] &;
extractSqrt[expr]
If you are willing to change the assignment to expr
, you can do this:
expr = Hold[a / (b + Sqrt[c])];
Cases[expr, HoldPattern @ Sqrt[x_] :> x, Infinity]
The Hold
in the assignment statement prevents Mathematica from applying any simplifications to the expression. In this case, Sqrt[c]
gets "simplified" into Power[c,Rational[1,2]]
.
The HoldPattern
is essential in the Cases
expression to prevent the same simplification from happening to the pattern being matched.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With