GAP (RepnDecomp) - Chapter 3: Algorithms for unitary representations

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

[MathJax off]

3 Algorithms for unitary representations
3.1 Unitarising representations
3.1-1 UnitaryRepresentation
3.1-2 IsUnitaryRepresentation
3.1-3 LDLDecomposition
3.2 Decomposing unitary representations
3.2-1 IrreducibleDecompositionDixon

### 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