You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sage中通过修改子空间基定义向量子空间出现异常结果的问题

问题:GF(2)上矩阵作用子空间后判断不变性不符合预期

我在写代码判断有限域GF(2)上的向量子空间在矩阵作用下是否不变,步骤是定义子空间、用矩阵作用子空间、检查新子空间是否与原空间相等,但结果和预期不符。

以下是我的Sage代码:

F = GF(2)
V = VectorSpace(F,2)
u = matrix(F, [[1, 1], [0, 1]])
v1 = vector(F, [0,1])
V1 = V.subspace([v1])
uV1 = V.subspace([u*v for v in V1.basis()])
print(uV1.basis(), uV1 == V1)

我预期输出是[(1,1)] False——因为矩阵u作用在V1的基向量(0,1)上应该得到(1,1),所以uV1的基应该是[(1,1)],且和V1不相等。

实际测试时,单独打印[u*v for v in V1.basis()]确实输出[(1,1)],但执行原代码时,Sage输出[(0,1)] True。手动定义uV1 = V.subspace([(1,1)])时,结果符合预期:uV1.basis()为[(1,1)]且uV1 == V1为False。

为什么uV1没有被正确定义?该怎么修改代码解决这个问题?


原因分析与解决方案

问题根源

Sage中默认是行向量右乘矩阵,但你的矩阵u是按列向量左乘的逻辑构建的,这导致计算错配:

  • 你预期的是列向量左乘矩阵:u * [0;1] = [1;1]
  • 但实际Sage执行的是行向量右乘:[0,1] * u = [0*1 + 1*0, 0*1 + 1*1] = [0,1],得到的还是原向量,所以uV1和V1是同一个子空间。

解决方法

有两种方式修正这个问题:

  1. 转置矩阵,适配行向量右乘逻辑
    修改矩阵u的定义,转置原矩阵后用行向量右乘:

    F = GF(2)
    V = VectorSpace(F,2)
    # 转置原矩阵,适配行向量右乘
    u = matrix(F, [[1, 0], [1, 1]])
    v1 = vector(F, [0,1])
    V1 = V.subspace([v1])
    uV1 = V.subspace([v*u for v in V1.basis()])
    print(uV1.basis(), uV1 == V1)
    

    输出:[(1,1)] False,符合预期。

  2. 明确使用列向量左乘矩阵
    将向量转换为列矩阵,左乘原矩阵后再转回行向量:

    F = GF(2)
    V = VectorSpace(F,2)
    u = matrix(F, [[1, 1], [0, 1]])
    v1 = vector(F, [0,1])
    V1 = V.subspace([v1])
    # 向量转列矩阵→左乘原矩阵→转回行向量
    uV1 = V.subspace([(u * v.column()).row(0) for v in V1.basis()])
    print(uV1.basis(), uV1 == V1)
    

    输出同样是[(1,1)] False。

验证说明

两种方法都能正确计算矩阵对向量的作用,确保uV1是原空间V1在矩阵u作用下的像空间,从而正确判断子空间是否在矩阵作用下不变。

内容的提问来源于stack exchange,提问作者Kenanski Bowspleefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 13:03:24