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:
- Conj is an affine transformation matrix, whose linear part, conj[[1;;3,1;;3]], is an integer matrix.
- 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.
- 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