From: Michael Orlitzky Date: Wed, 4 Nov 2020 23:24:49 +0000 (-0500) Subject: eja: fix the fast matrix _charpoly_coefficients() method. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=4d0f89a814fe6ab91a17af023c35caefaada2893;p=sage.d.git eja: fix the fast matrix _charpoly_coefficients() method. --- diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index bcafe57..4091d03 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -993,7 +993,24 @@ class MatrixEuclideanJordanAlgebra(FiniteDimensionalEuclideanJordanAlgebra): J = MatrixEuclideanJordanAlgebra(QQ, basis, normalize_basis=False) - return J._charpoly_coefficients() + a = J._charpoly_coefficients() + + # Unfortunately, changing the basis does change the + # coefficients of the characteristic polynomial, but since + # these are really the coefficients of the "characteristic + # polynomial of" function, everything is still nice and + # unevaluated. It's therefore "obvious" how scaling the + # basis affects the coordinate variables X1, X2, et + # cetera. Scaling the first basis vector up by "n" adds a + # factor of 1/n into every "X1" term, for example. So here + # we simply undo the basis_normalizer scaling that we + # performed earlier. + # + # TODO: make this access safe. + XS = a[0].variables() + subs_dict = { XS[i]: self._basis_normalizers[i]*XS[i] + for i in range(len(XS)) } + return tuple( a_i.subs(subs_dict) for a_i in a ) @staticmethod