[GiNaC-list] Don't do mix tensors and matrices (Was: How to convert epsilon_tensor in a matrix?)

Marco André Ferreira Dias mdias at ift.unesp.br
Sun Feb 26 22:31:24 CET 2012


Hi Alexei,

thanks for your advice. I've changed my code, implementing all in the
scalar products, instead using matrices explicitly. But epsilon tensor
fully contracted with vectors still being a problem, since its isn't
transformable in the ordinary product of this vectors.
My problem is after compute a expression use it to do a Monte Carlo
integration of this values.
Regards,

Marco

On Sun, Feb 26, 2012 at 1:54 PM, Alexei Sheplyakov <
alexei.sheplyakov at gmail.com> wrote:

> Hello,
>
> On Sun, Feb 26, 2012 at 12:06:37PM -0300, Marco André Ferreira Dias wrote:
>
> > I have a very naive question: my program compute some dirac_traces, and
> > some epsilon_tensors arises in this process. I have to convert the
> > tensorial structure to matricial
>
> I don't think it's a good idea (see
> http://www.ginac.de/FAQ.html#matrix_indexed)
>
> > to compute it numerically
>
> And I don't think it's necessary for numeric computation.
>
> > but until now I don't figure out how to manipulate expressions like this
> > =============
> > [[31],[0.0],[0.0],[-31]]~sigma*[[6.3],[0.0],[0.0],[6.30]]~alpha*
> > [[19.33],[-1.108],[-5.4],[18.6]].gamma*eps.delta.sigma~gamma.alpha*
> > [[16.781197650788506337],[4.96],[11.38],[11.2]]~gamma
> > =============
>
> Don't convert tensor expressions to matrices, instead express them via
> invariant quantities, like this:
>
> #include <iostream>
> #include <ginac/ginac.h>
> using namespace std;
> using namespace GiNaC;
>
> int main()
> {
>        symbol q("q"), l("l"), m("m"), ldotq("ldotq"), D("D");
>        varidx mu(symbol("mu"), D), nu(symbol("nu"), D);
>
>        scalar_products sp;
>        sp.add(l, l, pow(l, 2));
>        sp.add(l, q, ldotq);
>
>        ex e = dirac_gamma(mu)*
>                (dirac_slash(l, D) + dirac_slash(q, D) + m*dirac_ONE())*
>                dirac_gamma(mu.toggle_variance())*
>                (dirac_slash(l, D) + m*dirac_ONE());
>        e = dirac_trace(e).simplify_indexed(sp);
>        e = e.collect(lst(l, ldotq, m));
>        cout << e << endl;
>        // -> (8-4*D)*l^2+(8-4*D)*ldotq+4*D*m^2
>        return 0;
> }
>
>
> See the fine manual (specifically, the paragraph 4.15.1.1, titled as
> `Dirac gamma matrices') for more details.
>
> Hope this helps,
>        Alexei
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20120226/064cb25e/attachment.html>


More information about the GiNaC-list mailing list