Goto Chapter: Top 1 2 3 4 5 6 Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

3 Algorithms for unitary representations
 3.1 Unitarising representations
 3.2 Decomposing unitary representations

3 Algorithms for unitary representations

3.1 Unitarising representations

3.1-1 UnitaryRepresentation
‣ UnitaryRepresentation( rho )( function )

Returns: A record with fields basis_change and unitary_rep such that rho is isomorphic to unitary_rep, differing by a change of basis basis_change. Meaning if L is basis_change and \rho_u is the unitarised rho, then \forall g \in G: \; L \rho_u(g) L^{-1} = \rho(g).

Unitarises the given representation quickly, summing over the group using a base and strong generating set and unitarising with LDLDecomposition (3.1-3).

gap> G := SymmetricGroup(3);;
gap> irreps := IrreducibleRepresentations(G);;
gap> # It happens that we are given unitary irreps, so
> # rho is also unitary (its blocks are unitary)
> rho := DirectSumOfRepresentations([irreps[1], irreps[2]]);;
gap> IsUnitaryRepresentation(rho);
true
gap> # Arbitrary change of basis
> A := [ [ -1, 1 ], [ -2, -1 ] ];;
gap> tau := ComposeHomFunction(rho, x -> A^-1 * x * A);;
gap> # Not unitary, but still isomorphic to rho
> IsUnitaryRepresentation(tau);
false
gap> AreRepsIsomorphic(rho, tau);
true
gap> # Now we unitarise tau
> tau_u := UnitaryRepresentation(tau);;
gap> # We get a record with the unitarised rep:
> AreRepsIsomorphic(tau, tau_u.unitary_rep);
true
gap> AreRepsIsomorphic(rho, tau_u.unitary_rep);
true
gap> # The basis change is also in the record:
> ForAll(G, g -> tau_u.basis_change * Image(tau_u.unitary_rep, g) = Image(tau, g) * tau_u.basis_change);
true

3.1-2 IsUnitaryRepresentation
‣ IsUnitaryRepresentation( rho )( function )

Returns: Whether rho is unitary, i.e. for all g \in G, \rho(g^{-1}) = \rho(g)^* (where ^* denotes the conjugate transpose).

gap> # TODO: this example

3.1-3 LDLDecomposition
‣ LDLDecomposition( A )( function )

Returns: a record with two fields, L and D such that A = L\mbox{diag}(D)L^*. D is the 1 \times n vector which gives the diagonal matrix \mbox{diag}(D) (where A is an n \times n matrix).

gap> A := [ [ 3, 2*E(3)+E(3)^2, -3 ], [ E(3)+2*E(3)^2, -3, 3 ], [ -3, 3, -6 ] ];;
gap> # A is a conjugate symmetric matrix
> A = ConjugateTranspose@RepnDecomp(A);
true
gap> # Note that A is not symmetric - the LDL decomposition works for any
> # conjugate symmetric matrix.
> A = TransposedMat(A);
false
gap> decomp := LDLDecomposition(A);;
gap> # The LDL decomposition is such that A = LDL^*, D diagonal, and L lower triangular.
> A = decomp.L * DiagonalMat(decomp.D) * ConjugateTranspose@RepnDecomp(decomp.L);
true
gap> decomp.L[1][2] = 0 and decomp.L[1][3] = 0 and decomp.L[2][3] = 0;
true

3.2 Decomposing unitary representations

3.2-1 IrreducibleDecompositionDixon
‣ IrreducibleDecompositionDixon( rho )( function )

Returns: a list of irreps in the decomposition of rho

NOTE: this is not implemented yet. Assumes that rho is unitary and uses an algorithm due to Dixon to decompose it into unitary irreps.

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 Ind

generated by GAPDoc2HTML