Thread: rotation matrix View Single Post 2022-09-19, 21:56   #11
Dr Sardonicus

Feb 2017
Nowhere

23·283 Posts Quote:
 Originally Posted by bhelmes Every matrix M of the form (x -y) (y x) with determinant (M)=x²+y² can be transformed by a scalar multiplication of the matrix by the inverse of the determinant into a rotation matrix with determinant 1
No, sir. If M is a 2x2 matrix, scalar multiplication of M by k produces a matrix with determinant k^2*det(M). Thus, if M is a nonsingular 2x2 matrix, det((1/det(M))M) is 1/det(M).

If M is 2x2 and det(M) is not a square, no scalar multiple of M will have determinant 1.

Meanwhile, I have devised a proof that the group of 2x2 rotation matrices (mod p), AKA the "special orthogonal group" SO(2) over Fp is cyclic.

The order of the group is n = p+1 when p == 3 (mod 4) and n = p-1 when p == 1 (mod 4).

Note that if a^2 + b^2 == 1 (mod p), the characteristic polynomial of the rotation matrix M = [Mod(a,p), Mod(b,p);Mod(-b,p),Mod(a,p)] is x^2 - 2*a*x + 1 (mod p). The multiplicative order of M is n when the characteristic polynomial divides the cyclotomic polynomial of primitive nth roots of unity (mod p).

Note that, if p == 3 (mod 4) we have p = n-1, so the cyclotomic polynomial splits into quadratic factors. Calling one of these x^2 - 2*a*x + 1 (mod p) we see that the discriminant 4*a^2 - 4 is not a square (mod p). Since p == 3 (mod 4), we have that 4 - 4*a^2 is a square (mod p), so that 1 - a^2 is a square (mod p). If p == 1 (mod 4) we have p = n+1 so the cyclotomic polynomial splits into linear factors (mod p). Forming a quadratic using two reciprocal roots, we again have a quadratic x^2 - 2*a*x + 1. Because the quadratic is the product of two linear factors, the discriminant 4*a^2 - 4 is a square (mod p). Since here p == 1 (mod 4), -1 is a square (mod p), so that 4 - 4*a^2 is also a square (mod p), and so 1 - a^2 is a square (mod p).

Thus, in either case an a and b to form a rotation matrix of multiplicative order n can always be found. The following simple Pari-GP script produces cyclic generators M for odd primes less than 100.

Code:
{
forprime(p=3,100,
if(p%4==3,
n=p+1;
F=factormod(polcyclo(n),p);
a=-polcoeff(F[1,1],1,x)/2;
N=factor(x^2-1+a^2);
b=polcoeff(N[1,1],0,x);
M=[a,b;-b,a];
print(p" "M)
,
n=p-1;
F=factormod(polcyclo(n),p);
r=-polcoeff(F[1,1],0,x);
a=(r+1/r)/2;
N=factor(x^2-1+a^2);
b=polcoeff(N[1,1],0,x);
M=[a,b;-b,a];
print(p" "M)
);
)
}
3 [Mod(0, 3), Mod(1, 3); Mod(2, 3), Mod(0, 3)]
5 [Mod(0, 5), Mod(1, 5); Mod(4, 5), Mod(0, 5)]
7 [Mod(2, 7), Mod(2, 7); Mod(5, 7), Mod(2, 7)]
11 [Mod(3, 11), Mod(5, 11); Mod(6, 11), Mod(3, 11)]
13 [Mod(2, 13), Mod(6, 13); Mod(7, 13), Mod(2, 13)]
17 [Mod(4, 17), Mod(6, 17); Mod(11, 17), Mod(4, 17)]
19 [Mod(16, 19), Mod(7, 19); Mod(12, 19), Mod(16, 19)]
23 [Mod(10, 23), Mod(4, 23); Mod(19, 23), Mod(10, 23)]
29 [Mod(6, 29), Mod(9, 29); Mod(20, 29), Mod(6, 29)]
31 [Mod(29, 31), Mod(11, 31); Mod(20, 31), Mod(29, 31)]
37 [Mod(8, 37), Mod(14, 37); Mod(23, 37), Mod(8, 37)]
41 [Mod(14, 41), Mod(16, 41); Mod(25, 41), Mod(14, 41)]
43 [Mod(20, 43), Mod(17, 43); Mod(26, 43), Mod(20, 43)]
47 [Mod(43, 47), Mod(19, 47); Mod(28, 47), Mod(43, 47)]
53 [Mod(12, 53), Mod(4, 53); Mod(49, 53), Mod(12, 53)]
59 [Mod(25, 59), Mod(5, 59); Mod(54, 59), Mod(25, 59)]
61 [Mod(14, 61), Mod(7, 61); Mod(54, 61), Mod(14, 61)]
67 [Mod(32, 67), Mod(7, 67); Mod(60, 67), Mod(32, 67)]
71 [Mod(33, 71), Mod(30, 71); Mod(41, 71), Mod(33, 71)]
73 [Mod(12, 73), Mod(21, 73); Mod(52, 73), Mod(12, 73)]
79 [Mod(77, 79), Mod(32, 79); Mod(47, 79), Mod(77, 79)]
83 [Mod(40, 83), Mod(12, 83); Mod(71, 83), Mod(40, 83)]
89 [Mod(28, 89), Mod(14, 89); Mod(75, 89), Mod(28, 89)]
97 [Mod(75, 97), Mod(14, 97); Mod(83, 97), Mod(75, 97)]
?  