Message Boards Message Boards

GROUPS:

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

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.

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

Posted 8 months 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?

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract