Sign up ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

According to theory of angular momentum here must equal one. What's wrong?

If[-5 <= (m1 + m2) <= 5, 
ClebschGordan[{3, m1}, {4, m2}, {5, m1 + m2}] ClebschGordan[{3, 
m1}, {4, m2}, {5, m1 + m2}], 0], {m1, -3, 3}, {m2, -4, 4}]] 

Or one more example. It should coincide with null after after launching. I am exausted to rack my brains what's gonna wrong?!

    << Notation`

RowBox[{"j1_", ",", 
RowBox[{"m1_", ";", "j2_"}], ",", "m2_"}], 
RowBox[{"j3_", ",", "m3_"}]]] \[DoubleLongLeftRightArrow] 
RowBox[{"ClebschGordan", "[", 
RowBox[{"j1_", ",", "m1_"}], "}"}], ",", 
RowBox[{"j2_", ",", "m2_"}], "}"}], ",", 
RowBox[{"j3_", ",", "m3_"}], "}"}]}], "]"}]]]

AddInputAlias[{"3j" -> ParsedBoxWrapper[
GridBox[{{"\[Placeholder]", "\[Placeholder]", "\[Placeholder]"}, {
"\[Placeholder]", "\[Placeholder]", "\[Placeholder]"}}], 
RowBox[{"3", "j"}]]], "Cl" -> ParsedBoxWrapper[
RowBox[{"j1", ",", 
RowBox[{"m1", ";", "j2"}], ",", "m2"}], 
RowBox[{"j3", ",", "m3"}]]]}]

sumf[j1_, j2_, M1_, M2_, m1_, m2_] := 
Assuming[{j1 >= 0, j1 >= m1 >= -j1, j2 >= 0, j2 >= m2 >= -j2}, 
Sum[If[j3 >= Abs[m1 + m2] && j3 >= Abs[M1 + M2], \!\(
\*SubsuperscriptBox[\(C\), \(j1, m1; j2, m2\), \(j3, m1 + m2\)] 
\*SubsuperscriptBox[\(C\), \(j1, M1; j2, M2\), \(j3, M1 + M2\)]\), 
0], {j3, Abs[j1 - j2], j1 + j2}]]

Timing[sumf[8, 4, 3, 2, 2, 1] // N]
share|improve this question
You can increase the readability by getting rid of the SubscriptBox & RowBoxs – Sektor Mar 30 '14 at 15:57

2 Answers 2

up vote 1 down vote accepted

You are not using the right formula, Mathematica has nothing to do with this. When you do the summation, you have to keep the z-projection of the angular momentum fixed for the total momenta (of both initial and final state). The meaning of getting one is that you have both the angular momentum conserved, and the decomposition of unity, when you sum over all possible ways of how the state of the system of two non-interacting sub-systems can be decomposed. So, this is basically just a completeness and orthogonality relation for a particular change of basis.

So, this works all right:

Quiet @ Outer[
    Function[{m, mp}, 
         If[-5 <= (m1 + m2) <= 5, 
            ClebschGordan[{3, m1}, {4, m2}, {5, m}] ClebschGordan[{3, m1}, {4, m2}, {5, mp}]
         {m1, -3, 3}, {m2, -4, 4}
    Range[-5, 5], Range[-5, 5]
] == IdentityMatrix[11]

(* True *)

In your case, you get 11 instead of 1, because you effectively contract the Kroneker delta - effectively you compute something like Trace[IdentityMatrix[11]]. Or at least so this looks to me upon a rather superficial look at it (has been almost 20 years since I've done anything with Clebsh - Gordan).

share|improve this answer

In addition to what Leonid wrote, here is the orthogonality relation that you may be looking for:

 {l = 4,
  s = 3},
 U = Flatten[Table[
      ClebschGordan[{l, ml}, {s, ms}, {j, m}],
      {ml, l, -l, -1}, {ms, s, -s, -1}]],
    {j, l + s, l - s, -1}, {m, j, -j, -1}], 1];
 Transpose[U].U == U.Transpose[U] == 
  IdentityMatrix[(2 l + 1) (2 s + 1)]


Here I defined angular momenta of the product states to be l and s with $l \ge s$, and calculate the matrix U that implements the basis transformation from the product states to the total-angular momentum states. To suppress the warnings about z components not adding up, I used the first line above instead of Quiet. This turns the warnings off for all subsequent calculations.

The result True says that the matrix U is unitary. In fact, it is real and therefore orthogonal.

In the Table, I went in descending order of the z quantum numbers (not required, just a common convention).

share|improve this answer
Thank you, guys. You are absolutely right. – David Mar 31 '14 at 13:25

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.