# [GiNaC-list] []!=1 ??

Sheplyakov Alexei varg at theor.jinr.ru
Sat Mar 18 10:05:31 CET 2006

```Hello!

On Fri, Mar 17, 2006 at 07:52:15PM +0100, Javier Ros Ganuza wrote:
>
> I suppose that it is a feature...

Exactly. Unit element of some algebra and number 1 are distinct objects,
so GiNaC _never_ performs implicit conversion of unit element of an
algebra to number 1 or vice a versa.

>  (matrix(3,1,lst(0,0,1)).transpose()*matrix(3,1,lst(0,0,1))).evalm()
>
> gives a 1,1 matrix [].

Yes, the product of matrices is a matrix of appropriate size.

> To convert it to a number or to a expression not containing a matrix, I
> have to take directly the 0,0 element of the matrix.
>
> Is there a more direct method?

You could try to rewrite your expression[s] in a tensor-like form, e.g.

#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;

int main(int argc, char** argv)
{
idx i(symbol("i"), 3);
idx j(symbol("j"), 1);

matrix A(1, 3);
A = 0, 0, 1;
ex e = indexed(A.transpose(), i, j)*indexed(A, j, i);
cout << e << " ==> ";
e = e.simplify_indexed();
cout << e << endl;
}

On my system, this gives:

[,,].i.j*[[0,0,1]].j.i ==> 1

> If not I'm facing errors like (in ginsh notation)
>
> > a=[[0,0,1]]*[,,];
> > a=evalm(a);
> []
> > 1+cos(a);
> add::eval(): sum of non-commutative objects has non-zero numeric term

Once again, GiNaC never performs implicit conversion of number 1 into
unit element of some algebra (in this case -- 1x1 matrices).

Best regards,
Alexei.

--
All science is either physics or stamp collecting.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20060318/d39631cb/attachment.pgp
```