[GiNaC-list] A.i B~i != A.0 B~0 + A.1 B~1 + ... [WAS: Bug or feature?]

Sheplyakov Alexei varg at theor.jinr.ru
Wed Jul 13 12:59:57 CEST 2005


On Tue, Jul 12, 2005 at 10:35:22PM +0200, Richard B. Kreckel wrote:
> On Tue, 28 Jun 2005, Sheplyakov Alexei wrote:
> > On Tue, Jun 21, 2005 at 09:15:38PM +0200, Javier Ros Ganuza wrote:
> > > I think the following expressions are mathematically equivalent:
> > >
> > >  cout << (indexed(matrix(3,1, lst(a1,b1,c1)), mu.toggle_variance
> > > ())+indexed(matrix(3,1, lst(a2,b2,c2)), mu.toggle_variance
> > > ())).simplify_indexed()*basis1 << endl;
> > >
> > >  cout << ((indexed(matrix(3,1, lst(a1,b1,c1)), mu.toggle_variance
> > > ())+indexed(matrix(3,1, lst(a2,b2,c2)), mu.toggle_variance
> > > ()))*basis1).simplify_indexed() << endl;
> > >
> > >  cout << (indexed(matrix(3,1, lst(a1,b1,c1)), mu.toggle_variance
> > > ())*basis1+indexed(matrix(3,1, lst(a2,b2,c2)), mu.toggle_variance
> > > ())*basis1).simplify_indexed() << endl;
> > >
> > > Where
> > >
> > > varidx mu(symbol("mu", "\\mu"), 3);
> > > ex basis1 = clifford_unit(mu, diag_matrix(lst(1, 1, 1)),1);
> > >
> > >
> > > But output is different
> > >
> > > > [[a2+a1],[b1+b2],[c2+c1]].mu*e~mu
> > > > [[a2],[b2],[c2]].mu*e~mu+[[a1],[b1],[c1]].mu*e~mu
> > > > [[a2],[b2],[c2]].mu*e~mu+[[a1],[b1],[c1]].mu*e~mu
[snip]

> > This question tends to become a FAQ.
> 
> Can you suggest the wording for such a FAQ entry?

I will try.

---------------------------- cut here -------------------------------
Q1: I am wondering how to convince GiNaC that the following to
  expressions are equal:
  [[-1,0],[0,1]~mu~mu * a~mu
  [[-1,0],[0,1].nu~mu * a~nu

A: 
Declare `a' as a matrix. Otherwise, these expressions are meaningless.

The `indexed' class (and most of derived classes) is intended for tensor
manipulation without referring to a particular basis. Thus, the `indexed'
class is well suited for calculations involving (formally defined) 
tensor algebra of non-integer-dimensional space.  This is particularly 
useful for evaluation of Feynman integrals in the framework of
dimensional regularization.

On the other hand, the `matrix' class is _not_ treated as a tensor,
so mixing matrices with indexed objects typically gives meaningless
result.

Q2: I'd like to know if is it possible to unroll indexed
objects. As example, I would like to do something like this

 a_i a~i = (a_1)^2 + (a_2)^2 + (a_3)^2 + ...

A: You should use matrix instead of indexed. See also Q1.
---------------------------- cut here -------------------------------

I've also written a simple demo program, see attached file.


Best regards, 
   Alexei.


-- 
ROOT: an octopus made by nailing extra legs onto a cat.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: matr_demo.cpp
Type: text/x-c++src
Size: 2148 bytes
Desc: not available
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20050713/9a637da1/matr_demo.bin
-------------- 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/20050713/9a637da1/attachment.pgp


More information about the GiNaC-list mailing list