From 99a85a92ed375722e51f7842dcc8d370b134629b Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 14 Jun 2019 10:20:05 -0400 Subject: [PATCH] eja: begin draft implementation of euclidean jordan algebras. --- mjo/eja/euclidean_jordan_algebra.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 mjo/eja/euclidean_jordan_algebra.py diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py new file mode 100644 index 0000000..5ccf2f2 --- /dev/null +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -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) -- 2.44.2