如何在matlab中创建具有特定秩的mxn矩阵?
我想创建一个秩为如何在matlab中创建具有特定秩的mxn矩阵?,matlab,matrix,linear-algebra,Matlab,Matrix,Linear Algebra,我想创建一个秩为k的m×n矩阵 像A是8×8等级5或B是4×6等级4 所以我尝试在MATLAB中编写一个函数,如下所示 我的想法是: 通过nzeros矩阵生成m 通过n矩阵生成m,并将其转换为精简的行梯队形式 将2'矩阵的秩分配给num 如果num=k,则将当前矩阵分配给输出 中断迭代 结果是一个无限循环,所有答案都是6x6zeros矩阵: 我也尝试过这种方法 它可以达到我的目标,但我不知道它是如何成功运作的 谢谢,@anonymous 如果要生成具有指定秩的随机矩阵,可以尝试构建如下所示的
k
的m×n
矩阵
像A
是8×8
等级5
或B
是4×6
等级4
所以我尝试在MATLAB中编写一个函数,如下所示
我的想法是:
n
zeros矩阵生成m
n
矩阵生成m
,并将其转换为精简的行梯队形式num=k
,则将当前矩阵分配给输出6x6
zeros矩阵:
我也尝试过这种方法 它可以达到我的目标,但我不知道它是如何成功运作的
谢谢,@anonymous 如果要生成具有指定秩的随机矩阵,可以尝试构建如下所示的用户函数
function [Y,rk] = fn(m,n,k)
P = orth(randn(m,k));
Q = orth(randn(n,k))';
Y = P*Q;
rk = rank(Y);
end
其中p
和Q
是酉矩阵Y
是生成的带有随机值的矩阵,rk
帮助您检查排名
示例
>> [Y,rk] = fn(8,6,5)
Y =
3.8613e-02 7.5837e-03 -7.1011e-02 -7.0392e-02 -3.8519e-02 1.6612e-01
-3.1381e-02 -3.6287e-02 1.4888e-01 -7.6202e-02 -3.7867e-02 3.2707e-01
-1.9689e-01 2.2684e-01 1.2606e-01 -1.2657e-03 1.9724e-01 7.2793e-02
-1.2652e-01 7.7531e-02 1.3906e-01 3.1568e-02 1.8327e-01 -1.3804e-01
-2.6604e-01 -1.4345e-01 1.6961e-03 -9.7833e-02 5.9299e-01 -1.5765e-01
1.7787e-01 -3.5007e-01 3.8482e-01 -6.0741e-02 -2.1415e-02 -2.4317e-01
8.9910e-02 -2.5538e-01 -1.8029e-01 -7.0032e-02 -1.0739e-01 2.2188e-01
-3.4824e-01 3.7603e-01 2.8561e-02 2.6553e-02 2.4871e-02 6.8021e-01
rk = 5
您可以轻松使用
eye
功能:
I = eye(k);
M = zeros(m,n);
M(1:k, 1:k) = I;
秩(M)
等于k
>> [Y,rk] = fn(8,6,5)
Y =
3.8613e-02 7.5837e-03 -7.1011e-02 -7.0392e-02 -3.8519e-02 1.6612e-01
-3.1381e-02 -3.6287e-02 1.4888e-01 -7.6202e-02 -3.7867e-02 3.2707e-01
-1.9689e-01 2.2684e-01 1.2606e-01 -1.2657e-03 1.9724e-01 7.2793e-02
-1.2652e-01 7.7531e-02 1.3906e-01 3.1568e-02 1.8327e-01 -1.3804e-01
-2.6604e-01 -1.4345e-01 1.6961e-03 -9.7833e-02 5.9299e-01 -1.5765e-01
1.7787e-01 -3.5007e-01 3.8482e-01 -6.0741e-02 -2.1415e-02 -2.4317e-01
8.9910e-02 -2.5538e-01 -1.8029e-01 -7.0032e-02 -1.0739e-01 2.2188e-01
-3.4824e-01 3.7603e-01 2.8561e-02 2.6553e-02 2.4871e-02 6.8021e-01
rk = 5
I = eye(k);
M = zeros(m,n);
M(1:k, 1:k) = I;