# Generate matrices for various angular momentum values L & test their rank?

Posted 8 months ago
712 Views
|
4 Replies
|
1 Total Likes
|
 The attached notebook generates matrices for various angular momentum values L and tests their rank. It does fine from L=1 to 90, and then hangs at L=91. Why? I tried to "Halt" in the debugger to diagnose the problem, but nothing happened. Memory usage is not high. On[Assert]; c = {1/3, 0, Sqrt[2/3], 0, 1/3}; bME[Lmp_, Lm_] := Module[{J3 = Lmp[[1]], m3 = -Lmp[[2]], J2 = Lm[[1]], m2 = Lm[[2]], M = Lmp[[2]] - Lm[[2]]}, If[Abs[M] > 2, 0, -(-1)^m3 (Sqrt[(2 J3 + 1) (2 J2 + 1)/6]) ThreeJSymbol[{2, 0}, {J2, 0}, {J3, 0}] c[[M + 3]] ThreeJSymbol[{2, M}, Lm, {J3, m3}]]]; bMatrix[L_] := Module[{LM = Table[{L, m}, {m, -L, L}]}, Outer[bME, LM, LM, 1]]; bRank[L_] := MatrixRank[bMatrix[L]]; (Debug) In[6]:= ranks = Monitor[Table[Module[{rnk = bRank[L]}, Assert[rnk == 2 L]; rnk], {L, 1, 100}], {L}]; (Debug) Out[6]= $Aborted (Debug) In[7]:= bRank[91] (Debug) Out[7]=$Aborted  Attachments:
4 Replies
Sort By:
Posted 8 months ago
 Remarkable.I am not sure, but in your matrices terms containing square roots appear.  In[33]:= Take[#, 10] & /@ Take[bMatrix[91], 3] Out[33]= {{91/555, 0, Sqrt[91/181]/555, 0, 0, 0, 0, 0, 0, 0}, {0, 88/555, 0, Sqrt[6/905]/37, 0, 0, 0, 0, 0, 0}, {Sqrt[91/181]/555, 0,15391/100455, 0, (2 Sqrt[537/5])/6697, 0, 0, 0, 0, 0}} And this in case of n = 91 may give rise to rather lengthy (exact Integer Arithmetic) simplification procedures. Try it with machine precision reals:While bRank[91] doesn't com back in a reasonable amount of time (you say it "hangs") bRank[91.] does. As well as In[28]:= {#, bRank[#]} & /@ N[Range[88, 93]] Out[28]= {{88., 176}, {89., 178}, {90., 180}, {91., 182}, {92.,184}, {93., 186}} Furthermore it seems that the rank of bMatrix[ L ] is 2 L In[32]:= {#, bRank[#]} & /@ Range[15] Out[32]= {{1, 2}, {2, 4}, {3, 6}, {4, 8}, {5, 10}, {6, 12}, {7,14}, {8, 16}, {9, 18}, {10, 20}, {11, 22}, {12, 24}, {13, 26}, {14, 28}, {15, 30}} Perhaps there is a proof for this?
Posted 8 months ago
 A proof that the bRank[L] == 2L may exist, but in the absence of that, I wanted to check specific values of L with exact arithmetic. Numerical approximations are a step down in rigor. The rank test is just a way to check that there is a zero eigenvalue (matrix size is a 2L+1 square). Maybe a different function than MatrixRank can do better? Thanks for the comment.