Thanks to all for your interesting answers, I'm digging now into Vladimir answer. So I'll come back when I undertand it. Thanks Javier On Fri, 2005-06-17 at 10:10 +0100, Vladimir V. Kisil wrote:
Hi,
"JRG" == Javier Ros Ganuza <jros@unavarra.es> writes: JRG> I want to do algebra with cartesian (3x1) "vectors". Cartesian JRG> "vector"s are to be represented by a 3x1 Ginac vector (3-tuple) JRG> and a reference to a basis that tell us in which base the JRG> components have physical sense.
Extension of GiNaC classes is not very difficult and you may implement from scratch. However it may be better to do this through the Clifford algebras in GiNaC. There are many references (e.g. books of Hestenes) on doing geometry with Clifford algebras.
JRG> for example (in my particular jargon): JRG> vector1.expresion=matrix(3,1,lst(a1,b1,c1)); JRG> vector1.basis=basis_k; JRG> vector2.expresion=matrix(3,1,lst(a2,b2,c2)); JRG> vector1.basis=basis_l;
This can be implemented as follows:
varidx nu(symbol("nu", "\\nu"), 3), mu(symbol("mu", "\\mu"), 3); xi(symbol("xi", "\\xi"), 3), rho(symbol("rho", "\\rho"),3); basis1 = clifford_unit(mu, diag_matrix(lst(1, 1, 1))); basis2 = clifford_unit(nu, diag_matrix(lst(1, 1, 1)));
vector1 = lst_to_clifford(lst(a1,b1,c1), xi, basis1); vector2 = lst_to_clifford(lst(a1,b1,c1), rho, basis2);
Then the expression
JRG> result=2*vector1+vector2;
will be well defined and behave as expected even without reduction to the single basis. The reduction is needed only if someone try to extract its components in either basis1, basis2, or even another basis3. To this end values of all products like basis1[i]*basis2[j] (i.e. transition matrix) should be defined.
Best wishes, Vladimir