* clifford_moebius_map: honor representation label (Vladimir Kisil).
authorRichard Kreckel <Richard.Kreckel@uni-mainz.de>
Thu, 10 Feb 2005 02:59:58 +0000 (02:59 +0000)
committerRichard Kreckel <Richard.Kreckel@uni-mainz.de>
Thu, 10 Feb 2005 02:59:58 +0000 (02:59 +0000)
doc/tutorial/ginac.texi
ginac/clifford.cpp
ginac/clifford.h

index 347c20d..d2fa84e 100644 (file)
@@ -3176,8 +3176,9 @@ $2^n$
 @end tex
 dimensional algebra with
 generators @samp{e~k} satisfying the identities 
-@samp{e~i e~j + e~j e~i = B(i, j)} for some symmetric matrix (@code{metric})
-@math{B(i, j)}. Such generators are created by the function
+@samp{e~i e~j + e~j e~i = B(i, j)} for some matrix (@code{metric})
+@math{B(i, j)}, which may be non-symmetric. Such generators are created
+by the function
 
 @example
     ex clifford_unit(const ex & mu, const ex & metr, unsigned char rl = 0);
@@ -3192,6 +3193,15 @@ Clifford algebras (which will commute with each other). Note that the call
 @code{dirac_gamma(mu)}. The method @code{clifford::get_metric()} returns a
 metric defining this Clifford number.
 
+If the matrix @math{B(i, j)} is in fact symmetric you may prefer to create
+the Clifford algebra units with a call like that
+
+@example
+    ex e = clifford_unit(mu, indexed(B, sy_symm(), i, j));
+@end example
+
+since this may yield some further automatic simplifications.
+
 Individual generators of a Clifford algebra can be accessed in several
 ways. For example 
 
@@ -3333,12 +3343,13 @@ The last provided function is
 @cindex @code{clifford_moebius_map()}
 @example
     ex clifford_moebius_map(const ex & a, const ex & b, const ex & c,
-                            const ex & d, const ex & v, const ex & G);
+                            const ex & d, const ex & v, const ex & G, unsigned char rl = 0);
+    ex clifford_moebius_map(const ex & M, const ex & v, const ex & G, unsigned char rl = 0);
 @end example 
 
 It takes a list or vector @code{v} and makes the Moebius
 (conformal or linear-fractional) transformation @samp{v ->
-(av+b)/(cv+d)} defined by the matrix @samp{[[a, b], [c, d]]}. The last
+(av+b)/(cv+d)} defined by the matrix @samp{M = [[a, b], [c, d]]}. The
 parameter @code{G} defines the metric of the surrounding
 (pseudo-)Euclidean space. The returned value of this function is a list
 of components of the resulting vector.
index f0f7bd1..66a490d 100644 (file)
@@ -1160,7 +1160,7 @@ lst clifford_to_lst (const ex & e, const ex & c, bool algebraic)
 }
 
 
-ex clifford_moebius_map(const ex & a, const ex & b, const ex & c, const ex & d, const ex & v, const ex & G)
+ex clifford_moebius_map(const ex & a, const ex & b, const ex & c, const ex & d, const ex & v, const ex & G, unsigned char rl)
 {
        ex x, D;
        if (is_a<indexed>(G)) 
@@ -1175,17 +1175,17 @@ ex clifford_moebius_map(const ex & a, const ex & b, const ex & c, const ex & d,
        if (! is_a<matrix>(v) && ! is_a<lst>(v))
                throw(std::invalid_argument("parameter v should be either vector or list"));
 
-       x = lst_to_clifford(v, mu, G);
+       x = lst_to_clifford(v, mu, G, rl);
        ex e = simplify_indexed(canonicalize_clifford((a * x + b) * clifford_inverse(c * x + d)));
        ex cu = clifford_unit(mu, G);
        return clifford_to_lst(e, cu, false);
 }
 
-ex clifford_moebius_map(const ex & M, const ex & v, const ex & G
+ex clifford_moebius_map(const ex & M, const ex & v, const ex & G, unsigned char rl)
 {
        if (is_a<matrix>(M)) 
                return clifford_moebius_map(ex_to<matrix>(M)(0,0), ex_to<matrix>(M)(0,1), 
-                                               ex_to<matrix>(M)(1,0), ex_to<matrix>(M)(1,1), v, G);
+                                               ex_to<matrix>(M)(1,0), ex_to<matrix>(M)(1,1), v, G, rl);
        else
                throw(std::invalid_argument("parameter M should be a matrix"));
 }
index 17c70e1..50f2998 100644 (file)
@@ -315,16 +315,18 @@ lst clifford_to_lst(const ex & e, const ex & c, bool algebraic=true);
  *  @param c (2,1) entry of the defining matrix
  *  @param d (2,2) entry of the defining matrix
  *  @param v Vector to be transformed
- *  @param G Metric of the surrounding space */
-ex clifford_moebius_map(const ex & a, const ex & b, const ex & c, const ex & d, const ex & v, const ex & G);
+ *  @param G Metric of the surrounding space
+ *  @param rl Representation label */
+ex clifford_moebius_map(const ex & a, const ex & b, const ex & c, const ex & d, const ex & v, const ex & G, unsigned char rl = 0);
 
 /** The second form of Moebius transformations defined by a 2x2 Clifford matrix M
  *  This function takes the transformation matrix M as a single entity.
  * 
  *  @param M the defining matrix
  *  @param v Vector to be transformed
- *  @param G Metric of the surrounding space */
-ex clifford_moebius_map(const ex & M, const ex & v, const ex & G);
+ *  @param G Metric of the surrounding space
+ *  @param rl Representation label */
+ex clifford_moebius_map(const ex & M, const ex & v, const ex & G, unsigned char rl = 0);
 
 } // namespace GiNaC