# rank


矩阵的秩

函数库: TyMath

# 语法

k = rank(A)
k = rank(A,tol)
k = rank(A;atol)
k = rank(A;rtol)

# 说明

k = rank(A) 返回矩阵 A 的秩。示例


k = rank(A,tol) 指定在秩计算中使用相对容差。秩计算为 A 中大于 tol 的奇异值的个数。


k = rank(A;atol) 指定在秩计算中使用绝对容差。秩计算为 A 中大于 atol 的奇异值的个数。示例


k = rank(A;rtol) 指定在秩计算中使用相对容差。秩计算为 A 中大于 rtol 的奇异值的个数。

# 示例

矩阵的秩

确定矩阵是否满秩。

创建一个 3×3 矩阵。第三列中的值是第二列中的值的两倍。

using TyMath
A = [3 2 4; -1 1 2; 9 5 10]
3×3 Matrix{Int64}:
3   2   4
-1  1   2
9   5  10

计算矩阵的秩。如果矩阵满秩,则秩等于列数,size(A,2)。

rank(A)
ans = 2
size(A,2)
ans = 3

由于列是线性相关的,因此该矩阵秩亏。

指定秩绝对容差

使用相对容差计算矩阵的秩。

创建一个 4×4 对角矩阵。对角线上有一个等于 1e-15 的小值。

using TyMath
A = [10 0 0 0; 0 25 0 0; 0 0 34 0; 0 0 0 1e-15]
4×4 Matrix{Float64}:
10.0    0.0     0.0     0.0
0.0     25.0    0.0     0.0
0.0     0.0     34.0    0.0
0.0     0.0     0.0     1.0e-15

计算矩阵的秩。

rank(A)
ans = 3

由于默认算法计算大于 min(size(A)...)*eps(real(float(one(eltype(A))))) 的奇异值的个数,因此该矩阵不被视为满秩。对于此矩阵,对角线上的小值被排除,因为它小于容差。

再次计算矩阵的秩,但指定容差 1e-16。

rank(A,atol=1e-16)
ans = 4

# 输入参数

A - 输入矩阵
矩阵

输入矩阵。

数据类型: Integer | Float64 | Float32 | Float16

复数支持:

atol - 绝对容差
标量

绝对容差,指定为标量。

示例: rank(A,atol=1e-5)

rtol - 相对容差
标量

相对容差,指定为标量。

示例: rank(A,rtol=1e-5)

# 详细信息

矩阵中线性无关列的个数是矩阵的秩。一个矩阵的行秩和列秩始终相等。

如果一个矩阵的秩是具有相同大小的矩阵能达到的最高秩,则该矩阵为满秩;如果矩阵不具有满秩,则该矩阵为秩亏。秩用于度量矩阵的范围或列空间的维度,它是所有列的线性组合的集合。

# 算法

rank 使用基于奇异值分解 (SVD) 的方法。SVD 算法相比其他一些方法耗时更多,但它也是最可靠的。

# 另请参阅

cond | det | condskeel | norm