r = self.rank()
n = self.dimension()
- # First, compute the basis B...
- x0 = self.zero()
- c = 1
- for g in self.gens():
- x0 += c*g
- c +=1
- if not x0.is_regular():
- raise ValueError("don't know a regular element")
-
- V = x0.vector().parent().ambient_vector_space()
- V1 = V.span_of_basis( (x0**k).vector() for k in range(self.rank()) )
- B = (V1.basis() + V1.complement().basis())
-
# Now switch to the polynomial rings.
-
names = ['X' + str(i) for i in range(1,n+1)]
R = PolynomialRing(self.base_ring(), names)
J = FiniteDimensionalEuclideanJordanAlgebra(R,
self._multiplication_table,
rank=r)
- B = [ b.change_ring(R.fraction_field()) for b in B ]
- # Get the vector space (as opposed to module) so that
- # span_of_basis() works.
- V = J.zero().vector().parent().ambient_vector_space()
- W = V.span_of_basis(B)
def e(k):
# The coordinates of e_k with respect to the basis B.
# A matrix implementation 1
x = J(vector(R, R.gens()))
- l1 = [column_matrix(W.coordinates((x**k).vector())) for k in range(r)]
+ l1 = [column_matrix((x**k).vector()) for k in range(r)]
l2 = [e(k) for k in range(r+1, n+1)]
A_of_x = block_matrix(1, n, (l1 + l2))
- xr = W.coordinates((x**r).vector())
+ xr = (x**r).vector()
a = []
denominator = A_of_x.det() # This is constant
for i in range(n):