Message Boards Message Boards

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

Find the similarity/conjugation transformation between affine matrices set

Posted 1 year ago

In my following example, conj converts the affine transformation matrices set SGITA141O1 to SGITA141O2:

In[13]:= 
AffModOneMatrixPowerOnLeft//ClearAll;
AffModOneMatrixPowerOnLeft[m_?MatrixQ,n_?IntegerQ]:=Module[{dim},
dim=Dimensions[m,1][[1]]-1;
TransformationMatrix[
    AffineTransform[{#[[1 ;; dim, 1 ;; dim]], 
        Mod[#[[1 ;; dim, dim + 1]], 1]}] &@MatrixPower[m,n]] // Expand // 
  Together // FullSimplify
]

AffModOneMatrixOnLeft//ClearAll;
AffModOneMatrixOnLeft[m_?MatrixQ]:=AffModOneMatrixPowerOnLeft[m,1]

AffModOneDotOnLeft // ClearAll;
AffModOneDotOnLeft[{x__?MatrixQ} | x__?MatrixQ] := Module[{dim,elms},
elms={x};
dim=Dimensions[{x}[[1]]][[1]]-1;

If[Length[elms]==1, 
AffModOneMatrixOnLeft@@elms
,
  TransformationMatrix[
    AffineTransform[{#[[1 ;; dim, 1 ;; dim]], 
        Mod[#[[1 ;; dim, dim + 1]], 1]}] &@(Dot@@elms)] // Expand // 
  Together // FullSimplify
  ]
]

SetEquality[s1_,s2_]:=SubsetQ[s1,s2] && SubsetQ[s2,s1];

conj={{1, 0, 0, 0}, {0, 1, 0, 1/4}, {0, 0, 1, 7/8}, {0, 0, 0, 1}};
SGITA141O1={{{-1,0,0,0},{0,-1,0,0},{0,0,1,0},{0,0,0,1}},{{-1,0,0,0},{0,-1,0,1/2},{0,0,-1,1/4},{0,0,0,1}},{{-1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},{{-1,0,0,0},{0,1,0,1/2},{0,0,-1,1/4},{0,0,0,1}},{{-1,0,0,1/2},{0,-1,0,0},{0,0,-1,3/4},{0,0,0,1}},{{-1,0,0,1/2},{0,-1,0,1/2},{0,0,1,1/2},{0,0,0,1}},{{-1,0,0,1/2},{0,1,0,0},{0,0,-1,3/4},{0,0,0,1}},{{-1,0,0,1/2},{0,1,0,1/2},{0,0,1,1/2},{0,0,0,1}},{{0,-1,0,0},{-1,0,0,0},{0,0,-1,0},{0,0,0,1}},{{0,-1,0,0},{-1,0,0,1/2},{0,0,1,1/4},{0,0,0,1}},{{0,-1,0,0},{1,0,0,0},{0,0,-1,0},{0,0,0,1}},{{0,-1,0,0},{1,0,0,1/2},{0,0,1,1/4},{0,0,0,1}},{{0,-1,0,1/2},{-1,0,0,0},{0,0,1,3/4},{0,0,0,1}},{{0,-1,0,1/2},{-1,0,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{0,-1,0,1/2},{1,0,0,0},{0,0,1,3/4},{0,0,0,1}},{{0,-1,0,1/2},{1,0,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{0,1,0,0},{-1,0,0,0},{0,0,-1,0},{0,0,0,1}},{{0,1,0,0},{-1,0,0,1/2},{0,0,1,1/4},{0,0,0,1}},{{0,1,0,0},{1,0,0,0},{0,0,-1,0},{0,0,0,1}},{{0,1,0,0},{1,0,0,1/2},{0,0,1,1/4},{0,0,0,1}},{{0,1,0,1/2},{-1,0,0,0},{0,0,1,3/4},{0,0,0,1}},{{0,1,0,1/2},{-1,0,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{0,1,0,1/2},{1,0,0,0},{0,0,1,3/4},{0,0,0,1}},{{0,1,0,1/2},{1,0,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{1,0,0,0},{0,-1,0,0},{0,0,1,0},{0,0,0,1}},{{1,0,0,0},{0,-1,0,1/2},{0,0,-1,1/4},{0,0,0,1}},{{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},{{1,0,0,0},{0,1,0,1/2},{0,0,-1,1/4},{0,0,0,1}},{{1,0,0,1/2},{0,-1,0,0},{0,0,-1,3/4},{0,0,0,1}},{{1,0,0,1/2},{0,-1,0,1/2},{0,0,1,1/2},{0,0,0,1}},{{1,0,0,1/2},{0,1,0,0},{0,0,-1,3/4},{0,0,0,1}},{{1,0,0,1/2},{0,1,0,1/2},{0,0,1,1/2},{0,0,0,1}}};
SGITA141O2={{{-1,0,0,0},{0,-1,0,0},{0,0,-1,0},{0,0,0,1}},{{-1,0,0,0},{0,-1,0,1/2},{0,0,1,0},{0,0,0,1}},{{-1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},{{-1,0,0,0},{0,1,0,1/2},{0,0,-1,0},{0,0,0,1}},{{-1,0,0,1/2},{0,-1,0,0},{0,0,1,1/2},{0,0,0,1}},{{-1,0,0,1/2},{0,-1,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{-1,0,0,1/2},{0,1,0,0},{0,0,-1,1/2},{0,0,0,1}},{{-1,0,0,1/2},{0,1,0,1/2},{0,0,1,1/2},{0,0,0,1}},{{0,-1,0,1/4},{-1,0,0,1/4},{0,0,-1,3/4},{0,0,0,1}},{{0,-1,0,1/4},{-1,0,0,3/4},{0,0,1,1/4},{0,0,0,1}},{{0,-1,0,1/4},{1,0,0,1/4},{0,0,-1,3/4},{0,0,0,1}},{{0,-1,0,1/4},{1,0,0,3/4},{0,0,1,1/4},{0,0,0,1}},{{0,-1,0,3/4},{-1,0,0,1/4},{0,0,1,3/4},{0,0,0,1}},{{0,-1,0,3/4},{-1,0,0,3/4},{0,0,-1,1/4},{0,0,0,1}},{{0,-1,0,3/4},{1,0,0,1/4},{0,0,1,3/4},{0,0,0,1}},{{0,-1,0,3/4},{1,0,0,3/4},{0,0,-1,1/4},{0,0,0,1}},{{0,1,0,1/4},{-1,0,0,1/4},{0,0,1,3/4},{0,0,0,1}},{{0,1,0,1/4},{-1,0,0,3/4},{0,0,-1,1/4},{0,0,0,1}},{{0,1,0,1/4},{1,0,0,1/4},{0,0,1,3/4},{0,0,0,1}},{{0,1,0,1/4},{1,0,0,3/4},{0,0,-1,1/4},{0,0,0,1}},{{0,1,0,3/4},{-1,0,0,1/4},{0,0,-1,3/4},{0,0,0,1}},{{0,1,0,3/4},{-1,0,0,3/4},{0,0,1,1/4},{0,0,0,1}},{{0,1,0,3/4},{1,0,0,1/4},{0,0,-1,3/4},{0,0,0,1}},{{0,1,0,3/4},{1,0,0,3/4},{0,0,1,1/4},{0,0,0,1}},{{1,0,0,0},{0,-1,0,0},{0,0,-1,0},{0,0,0,1}},{{1,0,0,0},{0,-1,0,1/2},{0,0,1,0},{0,0,0,1}},{{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},{{1,0,0,0},{0,1,0,1/2},{0,0,-1,0},{0,0,0,1}},{{1,0,0,1/2},{0,-1,0,0},{0,0,1,1/2},{0,0,0,1}},{{1,0,0,1/2},{0,-1,0,1/2},{0,0,-1,1/2},{0,0,0,1}},{{1,0,0,1/2},{0,1,0,0},{0,0,-1,1/2},{0,0,0,1}},{{1,0,0,1/2},{0,1,0,1/2},{0,0,1,1/2},{0,0,0,1}}};

In[23]:= 
ConjSGITA141O1 = 
  AffModOneDotOnLeft[conj . # . Inverse[conj]] & /@ SGITA141O1;
SetEquality[ConjSGITA141O1, SGITA141O2]

Out[24]= True

I want to find an algorithm to determine such a conj, which meet the following conditions:

  1. Conj is an affine transformation matrix, whose linear part, conj[[1;;3,1;;3]], is an integer matrix.
  2. The value of the determinant conj[[1;;3,1;;3]] is equivalent to the ratio of the determinants of the basis of the matrices of the corresponding linear part of two corresponding matrix sets, i.e., SGITA141O1 and SGITA141O2.
  3. The elements of the translation part of conj, i.e., conj[[1;;3,4]], are all rational numbers.

Any hints for solving 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