[GiNaC-list] comparing ex

Vera Louise Hauge veralh at ifi.uio.no
Wed Aug 24 10:47:30 CEST 2005


Hi,

The example I listed was just a constructed example to illustrate what 
kind of comparison I want to do.

The point is exactly that there are two different sets of symbols, which 
share the same text/names.
In the actual case where I want to do this comparison, it is not 
really possible to set them equal (i.e ex B = A;).

Hopefully I have made my question clearer now.


--
Vera Louise Hauge



On Tue, 23 Aug 2005, John Pye wrote:

> Hi Vera
>
> Just noticing your lines:
>
>> ex A = symbolic_matrix(1,2, "a");
>> ex B = symbolic_matrix(1,2, "a");
>
> Are delibarately creating two different sets of symbols here with the
> same name? I don't know why you'd want to do that. This means that A and
> B will *look* the same but will not be treated by GiNaC as the same
> thing - different symbols, just happening to have the same labels.
>
> Is that any help?
>
> JP
>
> Vera Louise Hauge wrote:
>
>> Hi,
>>
>> Thank you for your suggestion!
>>
>> 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?
>>
>>
>> --
>> Vera Louise Hauge
>>
>>
>> On Thu, 18 Aug 2005, Markus Knodel wrote:
>>
>>> Hi,
>>>
>>> #include <ginac/ginac.h>
>>> #include <iostream>
>>>
>>> using namespace std;
>>> using namespace GiNaC;
>>>
>>> int main()
>>> {
>>>
>>> symbol a0("a0"), x("x"), a1("a1");
>>>
>>> ex a = a0 + x*a1;
>>> ex b = a0 + a1*x;
>>>
>>> ex diff = a - b;
>>>
>>> ex diff_expd = diff.expand();
>>>
>>> cout << "a-b = " << diff_expd << endl;
>>>
>>> // should give: a-b = 0
>>>
>>> return 0;
>>> }
>>>
>>>
>>>>
>>>> I want to compare (or test the equality of) two ex objects which
>>>> contain
>>>> symbols.
>>>> a = a0 + x*a1;
>>>> b = a0 + a1*x;
>>>>
>>>> If the ex objects are evaluated (symbolically), such that
>>>> a-b becomes 0, then the test would be finished.
>>>>
>>>> However, how do I evaluate such a expression as a-b symbolically?
>>>>
>>>
>>> is this what you wanted?
>>>
>>> Cheers
>>> Markus
>>>
>>>
>>>
>>> _______________________________________________
>>> GiNaC-list mailing list
>>> GiNaC-list at ginac.de
>>> http://thep.physik.uni-mainz.de/mailman/listinfo/ginac-list
>>>
>>
>> _______________________________________________
>> GiNaC-list mailing list
>> GiNaC-list at ginac.de
>> http://thep.physik.uni-mainz.de/mailman/listinfo/ginac-list
>>
>
> _______________________________________________
> GiNaC-list mailing list
> GiNaC-list at ginac.de
> http://thep.physik.uni-mainz.de/mailman/listinfo/ginac-list
>




More information about the GiNaC-list mailing list