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

如何用NumPy/SciPy求两不同矩阵零空间交/并的张成维度

计算零空间交与并的张成空间维度

核心原理

  • 零空间的交(H∩G):向量x同时属于矩阵A和B的零空间,当且仅当满足Ax=0且Bx=0。这等价于x是**垂直堆叠矩阵[A; B]**的零空间向量。由于H∩G本身是子空间,其张成空间就是自身,因此dim(span(H∩G))等于该堆叠矩阵的零空间维度。
  • 零空间的并的张成(span(H∪G)):这等价于子空间H与G的和空间H+G。利用子空间维度公式:dim(H+G) = dim(H) + dim(G) - dim(H∩G),其中dim(H)是A的零空间维度,dim(G)是B的零空间维度。

修正后的代码实现

使用SymPy进行精确线性代数计算(避免浮点数精度误差):

import sympy as sp

# 定义矩阵A和B
A = sp.Matrix([
    [2, 0, 3, -1, 2, -1, 6, -4, 7, 8, -1, -4, 7, 0, 0, 0, 0, 7],
    [-6, -7, -9, 10, 1, 10, -4, 12, -7, 4, -4, 5, -7, 0, 0, 0, 7, 0],
    [10, 0, 8, -12, -4, -5, -5, -13, 0, 5, 2, 1, 0, 0, 0, 7, 0, 0],
    [8, 0, 5, -4, 1, -4, 3, -9, 7, 11, 3, -2, 7, 0, 7, 0, 0, 0],
    [-9, -7, -3, 8, 5, 8, 1, 11, 0, -1, 1, -3, 0, 7, 0, 0, 0, 0]
])

B = sp.Matrix([
    [3, 2, 3, -1, 5, -5, 2, 0, -3, 5, 0, 0, 0, 0, 0, 0, 0, 2],
    [39, 26, 27, -13, 29, -25, -4, -2, -7, 21, 0, 0, 0, 0, 0, 0, 32, 0],
    [-5, 18, 31, -9, 25, -5, 12, -26, 5, 17, 0, 0, 0, 0, 0, 32, 0, 0],
    [25, 6, 21, -3, 19, -23, 4, -14, -9, 27, 0, 0, 0, 0, 16, 0, 0, 0],
    [-3, -6, -3, 1, -5, 1, -4, 2, 3, -1, 0, 0, 0, 4, 0, 0, 0, 0],
    [-47, -10, -35, 5, -53, 17, 4, -14, 79, -13, 0, 0, 32, 0, 0, 0, 0, 0],
    [67, 66, 71, -33, 81, -61, 76, -10, -67, 41, 0, 32, 0, 0, 0, 0, 0, 0],
    [59, 18, 31, -41, 57, -37, 12, 6, -59, 49, 32, 0, 0, 0, 0, 0, 0, 0]
])

# 计算各矩阵的秩
rank_A = A.rank()
rank_B = B.rank()
# 垂直堆叠A和B
combined_matrix = A.col_join(B)
rank_combined = combined_matrix.rank()

# 计算目标维度
dim_H = 18 - rank_A
dim_G = 18 - rank_B
dim_HcapG = 18 - rank_combined
dim_spanHcupG = dim_H + dim_G - dim_HcapG

print(f"dim(span(H∩G)) = {dim_HcapG}")
print(f"dim(span(H∪G)) = {dim_spanHcupG}")

原代码失败原因

scipy.linalg.null_space返回的是零空间的一组基向量,但两个零空间的基向量并不一定直接重叠。直接通过元素相等判断An==Bn没有意义——不同的基可以张成重叠的子空间,且交空间的基并非两个基的公共向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:37:09