File size: 1,845 Bytes
b196139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import numpy as np
import itertools

def signed_perm_mats_det_plus_1():
    """生成所有 3x3 的 ±1 置换矩阵,且 det=+1(24 个)"""
    mats = []
    for perm in itertools.permutations(range(3)):  # 6 种列置换
        P = np.zeros((3,3), int)
        for r, c in enumerate(perm):
            P[r, c] = 1
        for signs in itertools.product([1, -1], repeat=3):  # 行符号
            R = P * np.array(signs)[:, None]               # 每行乘 ±1
            if int(round(np.linalg.det(R))) == 1:
                mats.append(R)
    # 去重(以 tuple 做 key)
    uniq = {}
    for R in mats:
        key = tuple(R.reshape(-1))
        uniq[key] = R
    return list(uniq.values())

def check_transformation_invariance():
    """严格验证变换后的矩阵仍在群中"""
    R24 = signed_perm_mats_det_plus_1()  # 使用您的可靠生成器
    R_z180 = np.array([[-1, 0, 0],
                       [0, -1, 0],
                       [0, 0, 1]], dtype=int)  # 确保整数类型
    
    failed_cases = []
    for i, R in enumerate(R24):
        transformed = R_z180 @ R
        # 精确匹配(因所有矩阵均为整数)
        found = any(np.array_equal(transformed, M) for M in R24)
        if not found:
            failed_cases.append((i, R, transformed))
    
    if not failed_cases:
        print("✅ 所有24个矩阵经过变换后仍在集合中")
        return True
    else:
        print(f"❌ 发现{len(failed_cases)}个不符合的案例:")
        for idx, orig, trans in failed_cases:
            print(f"\n案例 {idx}:")
            print("原矩阵(行列式={}):\n{}".format(int(np.linalg.det(orig)), orig))
            print("变换后(行列式={}):\n{}".format(int(np.linalg.det(transformed)), trans))
        return False

# 执行验证
check_transformation_invariance()