[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
5.4.3 Substituting expressions
Probably the most useful application of patterns is to use them for
substituting expressions with the subs()
method. Wildcards can be
used in the search patterns as well as in the replacement expressions, where
they get replaced by the expressions matched by them. subs()
doesn't
know anything about algebra; it performs purely syntactic substitutions.
Some examples:
> subs(a^2+b^2+(x+y)^2,$1^2==$1^3); b^3+a^3+(x+y)^3 > subs(a^4+b^4+(x+y)^4,$1^2==$1^3); b^4+a^4+(x+y)^4 > subs((a+b+c)^2,a+b==x); (a+b+c)^2 > subs((a+b+c)^2,a+b+$1==x+$1); (x+c)^2 > subs(a+2*b,a+b==x); a+2*b > subs(4*x^3-2*x^2+5*x-1,x==a); -1+5*a-2*a^2+4*a^3 > subs(4*x^3-2*x^2+5*x-1,x^$0==a^$0); -1+5*x-2*a^2+4*a^3 > subs(sin(1+sin(x)),sin($1)==cos($1)); cos(1+cos(x)) > expand(subs(a*sin(x+y)^2+a*cos(x+y)^2+b,cos($1)^2==1-sin($1)^2)); a+b |
The last example would be written in C++ in this way:
{ symbol a("a"), b("b"), x("x"), y("y"); e = a*pow(sin(x+y), 2) + a*pow(cos(x+y), 2) + b; e = e.subs(pow(cos(wild()), 2) == 1-pow(sin(wild()), 2)); cout << e.expand() << endl; // -> a+b } |