Julia中对于秩不满的矩阵进行大小压缩

3

我有一个N×N的一般矩阵H,其秩为n(<N)。

有没有办法从H中得到一个秩为n且为n×n的矩阵?

例如:

      |1     2     3|
  H = |4     8     6|
      |0     0     1|

这个矩阵有三个特征值,分别是0、1和9,其秩为2。我想获取一个秩为2的2×2矩阵,以对应于由1和9的特征向量张成的特征空间


这是一个Julia问题还是线性代数问题?您已经知道算法,需要帮助在Julia中实现它吗?如果不是,也许math.stackexchange.com是更合适的地方来询问。 - DNF
特征向量有三个元素。也许你想要(紧凑的)奇异值分解? - David Eisenstat
你想要这个矩阵的基础是什么?如果以特征向量为基础,它将是 [ [1 0] [0 9] ] - btilly
2个回答

1

我们有一个3x3的矩阵H,已知其秩为r < 3:

1 2 3
4 8 6
0 0 1

一个由 H 的行和列交叉处组成的 nxn 矩阵可以通过计算 H简化行阶梯形式(RREF)(也称为 行规范形式)来获得,该矩阵的秩为 n
在这样做之后,对于每个 n 行索引 i,RREF 中将存在包含 i 行(即索引为 i 的行)中的 1 和所有其他行中的零的列。可以在此处看到 H 的 RREF 如下。
1 2 0
0 0 1
0 0 0

作为RREF中的第0列(即具有索引0的列),在第0行中有一个1,在所有其他行中都是零;而第2列在第1行中有一个1,在所有其他行中都是零,并且没有其他列在一行中有一个1,在所有其他行中都是零,因此我们得出以下结论:
- H的秩为2; - 由H中在行0和1以及列0和2中的元素组成的nxn矩阵的秩为n。
因此,这里找到了一个秩为n的nxn矩阵。
1 3
4 6

无论H的大小如何(它不需要是正方形),并且H的秩事先不需要知道,都将遵循相同的过程。


0

使用RowEchelon.jl包,我们可以很容易地应用@CarySwoveland答案中描述的方法。(虽然这不是我的专业领域,但对它的任何更正都欢迎;具体来说,选择行作为1到枢轴数的范围是基于一些试验的合理猜测。)

julia> H = [1 2 3 
            4 8 6
            0 0 1];

julia> using RowEchelon

julia> _, pivotcols = rref_with_pivots(H)
([1.0 2.0 0.0; 0.0 0.0 1.0; 0.0 0.0 0.0], [1, 3])

julia> result = H[1:length(pivotcols), pivotcols]
2×2 Matrix{Int64}:
 1  3
 4  6

这个包只是一个代码库,原本属于Base Julia,所以如果你不想将其作为依赖项添加,甚至可以复制代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接