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@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