Function Repository Resource:

WignerMatrix

Source Notebook

Get the irreducible group representation of SU(2) for a given angular momentum

Contributed by: Bernd Günther

ResourceFunction["WignerMatrix"][j,a]

computes the Wigner matrix corresponding to the matrix a representing the irreducible Lie group representation corresponding to angular momentum j.

Details

The angular momentum j should be a non-negative integer or half-integer, while a should be a 2×2 matrix (the representation, though originally defined only on , extends over ).
ResourceFunction["WignerMatrix"] gives a matrix of dimension (2j+1)×(2j+1), whose entries are homogeneous polynomials of degree 2j in the entries of a.

Examples

Basic Examples (2) 

For j=1/2, WignerMatrix yields the fundamental representation (i.e. the identity function):

In[1]:=
ResourceFunction["WignerMatrix"][1/2, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
           0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)] // MatrixForm
Out[1]=

The matrix entries are homogeneous polynomial functions of the elements of the argument matrix :

In[2]:=
ResourceFunction["WignerMatrix"][3/2, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
           0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)] // MatrixForm
Out[2]=

Applications (2) 

Obtain the images of the infinitesimal generators using PauliMatrix:

In[3]:=
jtest = 3/2;
MatrixForm[
 Subscript[L, 1] = -(I/2) D[
     ResourceFunction["WignerMatrix"][jtest, IdentityMatrix[2] + t I PauliMatrix[1]], t] /. t -> 0]
Out[3]=
In[4]:=
MatrixForm[
 Subscript[L, 2] = -(I/2) D[
     ResourceFunction["WignerMatrix"][jtest, IdentityMatrix[2] + t I PauliMatrix[2]], t] /. t -> 0]
Out[4]=
In[5]:=
MatrixForm[
 Subscript[L, 3] = -(I/2) D[
     ResourceFunction["WignerMatrix"][jtest, IdentityMatrix[2] + t I PauliMatrix[3]], t] /. t -> 0]
Out[5]=

Verify an identity:

In[6]:=
Subscript[L, 1] . Subscript[L, 2] - Subscript[L, 2] . Subscript[L, 1] == I Subscript[L, 3]
Out[6]=

Properties and Relations (2) 

For j=1 and argument matrices expressed in terms of Euler angles, the result of WignerMatrix is related to EulerMatrix through a similarity transformation:

In[7]:=
arg = \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{
RowBox[{
SuperscriptBox["E", 
RowBox[{"-", 
FractionBox[
RowBox[{"I", " ", 
RowBox[{"(", 
RowBox[{"\[Alpha]", "+", "\[Gamma]"}], ")"}]}], "2"]}]], " ", 
RowBox[{"Cos", "[", 
FractionBox["\[Beta]", "2"], "]"}]}], 
RowBox[{
RowBox[{"-", 
SuperscriptBox["E", 
RowBox[{"-", 
FractionBox[
RowBox[{"I", " ", 
RowBox[{"(", 
RowBox[{"\[Alpha]", "-", "\[Gamma]"}], ")"}]}], "2"]}]]}], " ", 
RowBox[{"Sin", "[", 
FractionBox["\[Beta]", "2"], "]"}]}]},
{
RowBox[{
SuperscriptBox["E", 
FractionBox[
RowBox[{"I", " ", 
RowBox[{"(", 
RowBox[{"\[Alpha]", "-", "\[Gamma]"}], ")"}]}], "2"]], " ", 
RowBox[{"Sin", "[", 
FractionBox["\[Beta]", "2"], "]"}]}], 
RowBox[{
SuperscriptBox["E", 
FractionBox[
RowBox[{"I", " ", 
RowBox[{"(", 
RowBox[{"\[Alpha]", "+", "\[Gamma]"}], ")"}]}], "2"]], " ", 
RowBox[{"Cos", "[", 
FractionBox["\[Beta]", "2"], "]"}]}]}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
          0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\); trf = \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{
RowBox[{"-", 
FractionBox["1", 
SqrtBox["2"]]}], 
FractionBox["I", 
SqrtBox["2"]], "0"},
{"0", "0", "1"},
{
FractionBox["1", 
SqrtBox["2"]], 
FractionBox["I", 
SqrtBox["2"]], "0"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
          0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\);
ResourceFunction["WignerMatrix"][1, arg] == trf . EulerMatrix[{\[Alpha], \[Beta], \[Gamma]}] . ConjugateTranspose[trf] // FullSimplify
Out[7]=

For general angular momentum j, the entries of WignerMatrix are given by WignerD functions:

In[8]:=
jtest = 3/2;
ResourceFunction["WignerMatrix"][jtest, arg] == Array[WignerD[{jtest, #1 - jtest - 1, #2 - jtest - 1}, \[Alpha], \[Beta], \[Gamma]] &, {2 jtest + 1, 2 jtest + 1}] // Simplify
Out[8]=

Neat Examples (4) 

Check the multiplicative property of WignerMatrix:

In[9]:=
jtest = 3/2;
Simplify[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)] . ResourceFunction["WignerMatrix"][jtest, ({
      {u, v},
      {w, x}
     })] == ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\) . \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"u", "v"},
{"w", "x"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]]
Out[9]=

The determinant of WignerMatrix with angular momentum j is the j(2j+1)th power of the determinant of the argument matrix:

In[10]:=
jtest = 3/2;
Simplify[Det[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]] == Det[\!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
            0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]^(jtest (2 jtest + 1))]
Out[10]=

The character of the representation, i.e. the trace of WignerMatrix, is given by Tr[WignerMatrix[j,x]]=Det[x]jChebyshevU[2j,Tr[x]/(2Sqrt[Det[x]])]:

In[11]:=
jtest = 3/2; Simplify[Tr[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]] == Det[\!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]^jtest ChebyshevU[2 jtest, 1/2 Tr[\!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
                0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]/Sqrt[Det[\!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
                 0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]]]]
Out[11]=

As a matrix with homogeneous polynomial entries, WignerMatrix must satisfy Euler's homogeneity relation:

In[12]:=
jtest = 3/2; Simplify[
 a D[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
               0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)], a] + b D[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
               0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)], b] + c D[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
               0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)], c] + d D[ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
               0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)], d] == 2 jtest ResourceFunction["WignerMatrix"][jtest, \!\(\*
TagBox[
RowBox[{"(", "", GridBox[{
{"a", "b"},
{"c", "d"}
},
GridBoxAlignment->{"Columns" -> {{Center}}, "Rows" -> {{Baseline}}},
GridBoxSpacings->{"Columns" -> {
Offset[
             0.27999999999999997`], {
Offset[0.7]}, 
Offset[0.27999999999999997`]}, "Rows" -> {
Offset[0.2], {
Offset[0.4]}, 
Offset[0.2]}}], "", ")"}],
Function[BoxForm`e$, 
MatrixForm[BoxForm`e$]]]\)]]
Out[12]=

Publisher

bg4math

Version History

  • 1.1.0 – 28 June 2021

Source Metadata

Related Resources

Author Notes

Expressing the representation matrix in “Cartesian coordinates”, i.e. the elements of the argument matrix, rather than the more familiar Euler angles, simplifies certain computations (e.g. multiplication of representation matrices) significantly.

Unfortunately I don’t have a reference giving WignerMatrix directly in terms of the entries of the argument matrix. Costa’s and Fogli's expressions are in terms of the customary Euler angles. To derive our expression, one must resubstitute the Cayley-Klein rotation parameters from the Euler matrix in SU(2) , obtained from the fundamental representation j=1/2.

Euler angles, though useful in some contexts, are quite inapplicable in others. For instance, to check the multiplicative property of the representation, one would need an addition theorem for Euler angles. The ensuing complexity can be managed only for very low values of the angular momentum j, even by Mathematica.

License Information