Message Boards Message Boards

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

GROUPS:

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:
POSTED BY: Till Rosenband
Answer
18 days 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 BY: Hans Dolhaine
Answer
18 days 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.

POSTED BY: Till Rosenband
Answer
18 days ago

It appears to be hanging in some zero testing for candidate matrix pivots, after having gone through considerable intermediate swell in row reduction.

POSTED BY: Daniel Lichtblau
Answer
18 days ago

Further testing shows that changing the value of "/6" in Sqrt in the definition of bME (matrix elements) changes the maximum L where MatrixRank succeeds, even though this is just an overall scaling factor that doesn't affect the rank. I'm using MatrixRank to verify that there is a zero eigenvalue. Perhaps there is a different function for zero-eigenvalue testing that works for higher L?

POSTED BY: Till Rosenband
Answer
18 days ago

Group Abstract Group Abstract