From: Michael Orlitzky Date: Sun, 18 Oct 2020 14:56:38 +0000 (-0400) Subject: eja: start experiment full_spectral_decomposition() method. X-Git-Url: http://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=6d32150d3f7c175473a1d590facce1ea7c5ca77a;p=sage.d.git eja: start experiment full_spectral_decomposition() method. --- diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index da4b123..2976a38 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -1238,6 +1238,37 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): result.append( (evalue, proj(A.one()).superalgebra_element()) ) return result + def full_spectral_decomposition(self): + if self.is_zero(): + # Following the convention that the empty sum is the + # algebra's additive identity. + return [] + + A = self.subalgebra_generated_by(orthonormalize_basis=True) + if A.dimension() == 1: + # I'm a scalar multiple of the identity element + s = self.norm() / A.one().norm() + return [(s, self * ~s)] + + result = [] + for (evalue, proj) in A(self).operator().spectral_decomposition(): + c = proj(A.one()).superalgebra_element() + + # We know that "c" here is idempotent, so the only question is + # whether or not it can be decomposed further. + if c.is_primitive_idempotent(): + result.append( (evalue, c) ) + else: + for b in A.gens(): + b_decomp = b.full_spectral_decomposition() + if len(b_decomp) > 1: + for (a,y) in b_decomp: + y_sup = y.superalgebra_element() + eigenvecs = [ r[1] for r in result ] + if not y_sup in eigenvecs: + result.append( ( evalue*a, y_sup) ) + return result + def subalgebra_generated_by(self, orthonormalize_basis=False): """ Return the associative subalgebra of the parent EJA generated