take_match
Select a subset of terms in a sum for further computations.
The take_match
and replace_match
algorithms enable you to temporarily work
only on a part of an expression. You select the terms that you want to work on with
take_match
. When you are done, put the result back into the larger expression
with replace_match
.
A simple example shows how this works:ex:=A C + B D G + C D A;
\(\displaystyle{}A C+B D G+C D A\)
take_match(_, $D Q??$);
\(\displaystyle{}B D G+C D A\)
substitute(_, $C -> Q$);
\(\displaystyle{}B D G+Q D A\)
replace_match(_);
\(\displaystyle{}A C+B D G+Q D A\)
As you can see here, the replacement $C\rightarrow Q$ was only done on the 2nd and 3rd term
of the original expression, to which we restricted all manipulations using the
take_match
command.
This of course also works with more complicated, tensorial expressions, as the example below shows.ex:= A_{m n} \chi B^{m}_{p} + \psi A_{n p};
\(\displaystyle{}A_{m n} \chi B^{m}\,_{p}+\psi A_{n p}\)
take_match(_, $\chi Q??$);
\(\displaystyle{}A_{m n} \chi B^{m}\,_{p}\)
substitute(_, $A_{m n} -> C_{m n}$);
\(\displaystyle{}C_{m n} \chi B^{m}\,_{p}\)
replace_match(_);
\(\displaystyle{}C_{m n} \chi B^{m}\,_{p}+\psi A_{n p}\)
When you are working on a part of an expression, you can restrict attention further by applying
take_match
again. The replace_match
then puts sub-expressions back into the larger expression in
reverse order:ex:=A B + C B + C D B;
\(\displaystyle{}A B+C B+C D B\)
take_match(_, $C Q??$);
\(\displaystyle{}C B+C D B\)
substitute(_, $C -> Q$);
\(\displaystyle{}Q B+Q D B\)
take_match(_, $D Q??$);
\(\displaystyle{}Q D B\)
substitute(_, $B -> R$);
\(\displaystyle{}Q D R\)
replace_match(_);
\(\displaystyle{}Q B\)
replace_match(_);
\(\displaystyle{}A B+Q B\)