Hi all, I don't understand the behavior of method 'subs()' in the following case:
subs(a^x*b^x, $1^$2*$3^$2==($1*$3)^$2); (a*b)^x subs(a^5*b^5, $1^$2*$3^$2==($1*$3)^$2); b^5*a^5
I also check it with a little program, that I attach, and the output is Expression 1: b^x*a^x List of match: {$1==b,$2==x,$3==a} Expression 1 after subs: (b*a)^x Expression 2: b^5*a^5 List of match: {$1==b,$2==5,$3==a} Expression 2 after subs: b^5*a^5 Why is different the behavior of subs() when it is applied on b^x*a^x or on b^5*a^5? Best regards Tatiana Zolo #include <iostream> #include <ginac/ginac.h> using namespace std; using namespace GiNaC; typedef GiNaC::ex GExpr; typedef GiNaC::symbol GSymbol; typedef GiNaC::numeric GNumber; typedef GiNaC::lst GList; int main() { GSymbol x("x"); GSymbol a("a"); GSymbol b("b"); GList l_1, l_2; GExpr p = pow(a, x) * pow(b, x); cout << endl << "Expression 1: " << p << endl; match(p, pow(wild(1), wild(2)) * pow(wild(3), wild(2)), l_1); cout << "List of match: " << l_1 << endl; p = p.subs(pow(wild(1), wild(2)) * pow(wild(3), wild(2)) == pow(wild(1)*wild(3), wild(2))); cout << "Expression 1 after subs: " << p << endl << endl; GExpr q = pow(a, 5) * pow(b, 5); cout << "Expression 2: " << q << endl; match(q, pow(wild(1), wild(2)) * pow(wild(3), wild(2)), l_2); cout << "List of match: " << l_2 << endl; q = q.subs(pow(wild(1), wild(2)) * pow(wild(3), wild(2)) == pow(wild(1)*wild(3), wild(2))); cout << "Expression 2 after subs: " << q << endl << endl; return 0; }
Hi! On Wed, May 08, 2002 at 12:23:05PM +0200, Tatiana Zolo wrote:
Why is different the behavior of subs() when it is applied on b^x*a^x or on b^5*a^5?
There's no difference in the behvaior of subs(), but GiNaC automatically decomposes (a*b)^5:
(a*b)^5; a^5*b^5
Bye, Christian -- / Coding on PowerPC and proud of it \/ http://www.uni-mainz.de/~bauec002/
participants (2)
-
Christian Bauer
-
Tatiana Zolo