On Mon, 22 Aug 2005, Vera Louise Hauge wrote:
It is almost what I want to do. However, in my case also the symbols a0 and a1 are different objects with the same text:
int main(){
ex A = symbolic_matrix(1,2, "a"); ex B = symbolic_matrix(1,2, "a"); symbol x("x");
ex a, b; int n=0; for (const_iterator i = A.begin(); i != A.end(); ++i) { a += (*i)*pow(x,n); n++; } n=0; for (const_iterator i = B.begin(); i != B.end(); ++i) { b += (*i)*pow(x,n); n++; } cout << "a-b=" << (a-b).expand() << endl; return 0; }
Any suggestions when the expressions "a0+a1*x" are produced this way?
Maybe string comparison of the texts in the coefficient objects is a way to do it?
Of course, there are two symbols a0 and a1 each in your example above. They are different objects that just happen to share the same print-name. Why don't you assign the elements of B that are supposed to be equal to some previously used symbols to these symbols? Try initializing all of B as a copy of A ex B = A; and you'll see. If for some reason there is no way you can do this, a global symbol directory might be of help. See this FAQ: <http://www.ginac.de/FAQ.html#flyweightfactory>. Regards -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>