]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: begin draft implementation of euclidean jordan algebras.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 14 Jun 2019 14:20:05 +0000 (10:20 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 29 Jul 2019 03:10:48 +0000 (23:10 -0400)
mjo/eja/euclidean_jordan_algebra.py [new file with mode: 0644]

diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py
new file mode 100644 (file)
index 0000000..5ccf2f2
--- /dev/null
@@ -0,0 +1,23 @@
+"""
+Euclidean Jordan Algebras. These are formally-real Jordan Algebras;
+specifically those where u^2 + v^2 = 0 implies that u = v = 0. They
+are used in optimization, and have some additional nice methods beyond
+what can be supported in a general Jordan Algebra.
+"""
+
+from sage.all import *
+
+def eja_rn(dimension, field=QQ):
+    """
+    Return the Euclidean Jordan Algebra corresponding to the set
+    `R^n` under the Hadamard product.
+    """
+    # The FiniteDimensionalAlgebra constructor takes a list of
+    # matrices, the ith representing right multiplication by the ith
+    # basis element in the vector space. So if e_1 = (1,0,0), then
+    # right (Hadamard) multiplication of x by e_1 picks out the first
+    # component of x; and likewise for the ith basis element e_i.
+    Qs = [ matrix(field, dimension, dimension, lambda k,j: 1*(k == j == i))
+           for i in xrange(dimension) ]
+    A = FiniteDimensionalAlgebra(QQ,Qs,assume_associative=True)
+    return JordanAlgebra(A)