Message Boards Message Boards

0
|
937 Views
|
0 Replies
|
0 Total Likes
View groups...
Share
Share this post:

FindInstance got stuck when n = 1

Posted 1 year ago

I try to calculate the example represented here:

enter image description here

The following method works:

In[904]:= (*https://en.wikipedia.org/wiki/Crystallographic_restriction_theorem#Higher_dimensions*)
Clear[x];
rot1={
{0,0,0,-1},
{1,0,0,0},
{0,-1,0,0},
{0,0,-1,0}
};
{val1, vec1}=rot1//Eigensystem[#,Cubics -> True]&//ComplexExpand;

cval1=SortBy[Select[val1, Im[#] > 0 &],-Re[#]&];
cvalmat1={{Re[#],-Im[#]},{Im[#],Re[#]}}&/@cval1;
(*
https://mathematica.stackexchange.com/questions/19778/how-to-form-a-block-diagonal-matrix-from-a-list-of-matrices
*)
diagmat=DiagonalMatrix[Hold /@ cvalmat1] // ReleaseHold// ArrayFlatten;
conj=Array[x,{4,4}];

B={{-1/2,0,-1/2,Sqrt[2]/2},{1/2,Sqrt[2]/2,-1/2,0},{-1/2,0,-1/2,-Sqrt[2]/2},{-1/2,Sqrt[2]/2,1/2,0}};
sol=FindInstance[rot1 . conj==conj . diagmat && Det[conj]==Det[B], Flatten[conj],Reals,2];
conj=conj/.sol
rot1 . #==# . diagmat&/@conj

Out[913]= {{{0, -15, -(1/30), 0}, {15/Sqrt[2], -(15/Sqrt[2]), 1/(
   30 Sqrt[2]), -(1/(30 Sqrt[2]))}, {-15, 0, 0, -(1/30)}, {15/Sqrt[2],
    15/Sqrt[2], -(1/(30 Sqrt[2])), -(1/(30 Sqrt[2]))}}, {{0, 
   191, -(1/382), 0}, {-(191/Sqrt[2]), 191/Sqrt[2], 1/(
   382 Sqrt[2]), -(1/(382 Sqrt[2]))}, {191, 0, 
   0, -(1/382)}, {-(191/Sqrt[2]), -(191/Sqrt[2]), -(1/(
    382 Sqrt[2])), -(1/(382 Sqrt[2]))}}}

Out[914]= {True, True}

But when I try to find only one instance as follows, FindInstance got stuck:

In[926]:= (*https://en.wikipedia.org/wiki/Crystallographic_restriction_theorem#Higher_dimensions*)
Clear[x];
rot1={
{0,0,0,-1},
{1,0,0,0},
{0,-1,0,0},
{0,0,-1,0}
};
{val1, vec1}=rot1//Eigensystem[#,Cubics -> True]&//ComplexExpand;

cval1=SortBy[Select[val1, Im[#] > 0 &],-Re[#]&];
cvalmat1={{Re[#],-Im[#]},{Im[#],Re[#]}}&/@cval1;
(*
https://mathematica.stackexchange.com/questions/19778/how-to-form-a-block-diagonal-matrix-from-a-list-of-matrices
*)
diagmat=DiagonalMatrix[Hold /@ cvalmat1] // ReleaseHold// ArrayFlatten;
conj=Array[x,{4,4}];

B={{-1/2,0,-1/2,Sqrt[2]/2},{1/2,Sqrt[2]/2,-1/2,0},{-1/2,0,-1/2,-Sqrt[2]/2},{-1/2,Sqrt[2]/2,1/2,0}};
sol=FindInstance[rot1 . conj==conj . diagmat && Det[conj]==Det[B], Flatten[conj],Reals,1];
conj=conj/.sol
rot1 . #==# . diagmat&/@conj

Out[934]= $Aborted

Out[935]= {{{0, -15, -(1/30), 0}, {15/Sqrt[2], -(15/Sqrt[2]), 1/(
   30 Sqrt[2]), -(1/(30 Sqrt[2]))}, {-15, 0, 0, -(1/30)}, {15/Sqrt[2],
    15/Sqrt[2], -(1/(30 Sqrt[2])), -(1/(30 Sqrt[2]))}}, {{0, 
   191, -(1/382), 0}, {-(191/Sqrt[2]), 191/Sqrt[2], 1/(
   382 Sqrt[2]), -(1/(382 Sqrt[2]))}, {191, 0, 
   0, -(1/382)}, {-(191/Sqrt[2]), -(191/Sqrt[2]), -(1/(
    382 Sqrt[2])), -(1/(382 Sqrt[2]))}}}

Out[936]= {True, True}

Any tips for this problem?

Regards, Zhao

POSTED BY: Hongyi Zhao
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