]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/euclidean_jordan_algebra.py: add eja_ln() for the rank-two algebra.
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 19 Jun 2019 14:18:56 +0000 (10:18 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 19 Jun 2019 14:18:56 +0000 (10:18 -0400)
mjo/eja/euclidean_jordan_algebra.py

index e0a6f2da12982932838c2dbef2ae0e3d0fe8a1b0..7611fe7eef371058bd201dc5888fa63eb58881bd 100644 (file)
@@ -41,3 +41,54 @@ def eja_rn(dimension, field=QQ):
            for i in xrange(dimension) ]
     A = FiniteDimensionalAlgebra(QQ,Qs,assume_associative=True)
     return JordanAlgebra(A)
+
+
+def eja_ln(dimension, field=QQ):
+    """
+    Return the Jordan algebra corresponding to the Lorenzt "ice cream"
+    cone of the given ``dimension``.
+
+    EXAMPLES:
+
+    This multiplication table can be verified by hand::
+
+        sage: J = eja_ln(4)
+        sage: e0,e1,e2,e3 = J.gens()
+        sage: e0*e0
+        e0
+        sage: e0*e1
+        e1
+        sage: e0*e2
+        e2
+        sage: e0*e3
+        e3
+        sage: e1*e2
+        0
+        sage: e1*e3
+        0
+        sage: e2*e3
+        0
+
+    In one dimension, this is the reals under multiplication::
+
+      sage: J1 = eja_ln(1)
+      sage: J2 = eja_rn(1)
+      sage: J1 == J2
+      True
+
+    """
+    Qs = []
+    id_matrix = identity_matrix(field,dimension)
+    for i in xrange(dimension):
+        ei = id_matrix.column(i)
+        Qi = zero_matrix(field,dimension)
+        Qi.set_row(0, ei)
+        Qi.set_column(0, ei)
+        Qi += diagonal_matrix(dimension, [ei[0]]*dimension)
+        # The addition of the diagonal matrix adds an extra ei[0] in the
+        # upper-left corner of the matrix.
+        Qi[0,0] = Qi[0,0] * ~field(2)
+        Qs.append(Qi)
+
+    A = FiniteDimensionalAlgebra(QQ,Qs,assume_associative=True)
+    return JordanAlgebra(A)