X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=0953b2f27d67d059e88588fc9adb1f3081fdecc6;hb=ffabf130fc8fa05e68d9b3d55a1f3ccf89f5e390;hp=0f6a47cd4f10efbcb0298725c4ae26537eae6372;hpb=98da0ce1d1102057e34646889c10dfa01fa9faec;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index 0f6a47c..0953b2f 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -346,6 +346,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): SETUP:: sage: from mjo.eja.eja_algebra import (JordanSpinEJA, + ....: TrivialEJA, ....: random_eja) EXAMPLES:: @@ -364,6 +365,17 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: x.det() -1 + The determinant of the sole element in the rank-zero trivial + algebra is ``1``, by three paths of reasoning. First, its + characteristic polynomial is a constant ``1``, so the constant + term in that polynomial is ``1``. Second, the characteristic + polynomial evaluated at zero is again ``1``. And finally, the + (empty) product of its eigenvalues is likewise just unity:: + + sage: J = TrivialEJA() + sage: J.zero().det() + 1 + TESTS: An element is invertible if and only if its determinant is @@ -382,15 +394,21 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: x,y = J.random_elements(2) sage: (x*y).det() == x.det()*y.det() True - """ P = self.parent() r = P.rank() - p = P._charpoly_coeff(0) - # The _charpoly_coeff function already adds the factor of - # -1 to ensure that _charpoly_coeff(0) is really what - # appears in front of t^{0} in the charpoly. However, - # we want (-1)^r times THAT for the determinant. + + if r == 0: + # Special case, since we don't get the a0=1 + # coefficient when the rank of the algebra + # is zero. + return P.base_ring().one() + + p = P._charpoly_coefficients()[0] + # The _charpoly_coeff function already adds the factor of -1 + # to ensure that _charpoly_coefficients()[0] is really what + # appears in front of t^{0} in the charpoly. However, we want + # (-1)^r times THAT for the determinant. return ((-1)**r)*p(*self.to_vector()) @@ -1220,8 +1238,18 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): sage: l0*c0 + l1*c1 == x True + The spectral decomposition should work in subalgebras, too:: + + sage: J = RealSymmetricEJA(4) + sage: (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) = J.gens() + sage: A = 2*e5 - 2*e8 + sage: (lambda1, c1) = A.spectral_decomposition()[1] + sage: (J0, J5, J1) = J.peirce_decomposition(c1) + sage: (f0, f1, f2) = J1.gens() + sage: f0.spectral_decomposition() + [(0, 1.000000000000000?*f2), (1, 1.000000000000000?*f0)] + """ - P = self.parent() A = self.subalgebra_generated_by(orthonormalize_basis=True) result = [] for (evalue, proj) in A(self).operator().spectral_decomposition(): @@ -1390,7 +1418,7 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): # the trace is an empty sum. return P.base_ring().zero() - p = P._charpoly_coeff(r-1) + p = P._charpoly_coefficients()[r-1] # The _charpoly_coeff function already adds the factor of # -1 to ensure that _charpoly_coeff(r-1) is really what # appears in front of t^{r-1} in the charpoly. However,