我有一个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的特征向量张成的特征空间。
我们有一个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
1 3
4 6
无论H
的大小如何(它不需要是正方形),并且H
的秩事先不需要知道,都将遵循相同的过程。
使用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,所以如果你不想将其作为依赖项添加,甚至可以复制代码。
[ [1 0] [0 9] ]
。 - btilly