5.3 Representation manipulation

In the explanations below, we use the standard representation of \(S_3\), which corresponds to the 2D representation of \(S_3\) permuting the vertices of a triangle.

S3 = replab.S(3);
rep = S3.irrep([2 1], 'seminormal');

Change of basis

From a representation, one can return another representation similar under a change of basis: \(\rho_g \to T \rho_g T^{-1}\)

T = [1 0; 0 -1];
sim = rep.similarRep(T)
sim =

Real subrepresentation
       dimension: 2
           field: 'R'
           group: Symmetric group acting on 3 elements
       isUnitary: false
          parent: Real representation
basis(1,'exact'): [1; 0]
basis(2,'exact'): [0; -1]

The original representation is called the parent, and the change of basis matrix is available through the basis method.

At construction, one can provide the inverse of the basis change, if known, so it does not need to be recomputed.

T = [1 0; 0 -1];
rep.similarRep(T, 'inverse', inv(T))
ans =

Real subrepresentation
       dimension: 2
           field: 'R'
           group: Symmetric group acting on 3 elements
       isUnitary: false
          parent: Real representation
basis(1,'exact'): [1; 0]
basis(2,'exact'): [0; -1]

Unitarize a representation

Given a non-unitary representation, we can automatically construct a unitary similar representation. The method unitarize computes this similar representation.

uni = rep.unitarize;
basis = uni.basis
uni.isUnitary
basis =

   0.9258        0
        0   1.0690

ans = 1

Complexified representation

Given a representation over \(\mathbb{R}\), one can easily construct a representation over \(\mathbb{C}\) by extending the field of scalars through the complexification method.

rep.complexification
ans =

Encoding of representation: R^d -> C^d
dimension: 2
    field: 'C'
    group: Symmetric group acting on 3 elements
isUnitary: false
   parent: Real representation
     type: 'R^d -> C^d'

Conjugate representation

Given a representation, one can compute the conjugate representation; of course this has an effect only on complex-valued representations. The standard conj syntax is available for that purpose.

C4 = replab.C(4);
repC4 = C4.repByImages('C', 1, 'preimages', {[2 3 4 1]}, 'images', {[1i]});
img = repC4.image([2 3 4 1])
conjRep = conj(repC4);
conjImg = conjRep.image([2 3 4 1])
img =  0 + 1i
conjImg =  0 - 1i

Dual representation

The dual representation has images that are the transpose of the inverse of the original images; it is computed through the dual method.

img = rep.image([2 3 1]);
img1 = inv(img).'
dualRep = dual(rep);
img2 = dualRep.image([2 3 1])
img1 =

  -0.5000   1.0000
  -0.7500  -0.5000

img2 =

  -0.5000   1.0000
  -0.7500  -0.5000

Tensor product and powers

Given two (or more!) representations of the same group, one can compute their tensor product. For that purpose, we provide an overload of the standard kron MATLAB/Octave syntax.

rep2 = kron(rep, rep)
rep2.image([2 3 1])
rep2 =

Real tensor representation
dimension: 4
    field: 'R'
    group: Symmetric group acting on 3 elements
isUnitary: false
factor(1): Real representation
factor(2): Real representation

ans =

   0.2500  -0.3750  -0.3750   0.5625
   0.5000   0.2500  -0.7500  -0.3750
   0.5000  -0.7500   0.2500  -0.3750
   1.0000   0.5000   0.5000   0.2500

We have a dedicated method tensorPower to computing the tensor product of several identical representations.

rep2 = rep.tensorPower(2);
rep2.image([2 3 1])
ans =

   0.2500  -0.3750  -0.3750   0.5625
   0.5000   0.2500  -0.7500  -0.3750
   0.5000  -0.7500   0.2500  -0.3750
   1.0000   0.5000   0.5000   0.2500

Direct sum

Given two (or more) representations, one can compute their direct sum, whose images are block-diagonal matrices; this is provided through the overload of the standard blkdiag syntax.

rep2 = blkdiag(rep, rep)
rep2.image([2 3 1])
rep2 =

Real direct sum representation
dimension: 4
    field: 'R'
    group: Symmetric group acting on 3 elements
isUnitary: false
factor(1): Real representation
factor(2): Real representation

ans =

  -0.5000   0.7500        0        0
  -1.0000  -0.5000        0        0
        0        0  -0.5000   0.7500
        0        0  -1.0000  -0.5000