From: Michael Orlitzky Date: Fri, 5 Jul 2019 23:49:58 +0000 (-0400) Subject: eja: add a function to embed complex matrices in (bigger) real ones. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=cef21b24d30d942dbaa542a23aab642c884371f7;p=sage.d.git eja: add a function to embed complex matrices in (bigger) real ones. --- diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index 16ce256..fdaccba 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -727,6 +727,40 @@ def _multiplication_table_from_matrix_basis(basis): return Qs +def _embed_complex_matrix(M): + """ + Embed the n-by-n complex matrix ``M`` into the space of real + matrices of size 2n-by-2n via the map the sends each entry `z = a + + bi` to the block matrix ``[[a,b],[-b,a]]``. + + EXAMPLES:: + + sage: F = QuadraticField(-1,'i') + sage: x1 = F(4 - 2*i) + sage: x2 = F(1 + 2*i) + sage: x3 = F(-i) + sage: x4 = F(6) + sage: M = matrix(F,2,[x1,x2,x3,x4]) + sage: _embed_complex_matrix(M) + [ 4 2| 1 -2] + [-2 4| 2 1] + [-----+-----] + [ 0 1| 6 0] + [-1 0| 0 6] + + """ + n = M.nrows() + if M.ncols() != n: + raise ArgumentError("the matrix 'M' must be square") + field = M.base_ring() + blocks = [] + for z in M.list(): + a = z.real() + b = z.imag() + blocks.append(matrix(field, 2, [[a,-b],[b,a]])) + return block_matrix(field, n, blocks) + + def RealSymmetricSimpleEJA(n): """ The rank-n simple EJA consisting of real symmetric n-by-n