From: Michael Orlitzky Date: Fri, 14 Jun 2019 14:20:05 +0000 (-0400) Subject: WIP: euclidean jordan algebras. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=1067cbcb46e31220c619ff61e66c3b1c3386b86b;p=sage.d.git WIP: euclidean jordan algebras. --- 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)