【发布时间】:2011-08-19 16:35:57
【问题描述】:
我希望创建一个秩为 k 的矩阵。
矩阵的维度是m x n。输入 k 满足 k < min(m,n) 的条件。
【问题讨论】:
标签: matlab matrix linear-algebra
我希望创建一个秩为 k 的矩阵。
矩阵的维度是m x n。输入 k 满足 k < min(m,n) 的条件。
【问题讨论】:
标签: matlab matrix linear-algebra
你的目标不是很清楚。
但是为了从矩阵A(至少rank至少k)创建一个具有特定秩k的矩阵B,您可能希望使用svd并继续:
>>> A= rand(7, 5);
>>> rank(A)
ans = 5
>>> [U, S, V]= svd(A);
>>> k= 3;
>>> B= U(:, 1: k)* S(1: k, 1: k)* V(:, 1: k)';
>>> rank(B)
ans = 3
【讨论】:
好吧,一个简单的方法是生成一个如下所示的矩阵:
1 0 0 0 0
0 1 0 0 0
0 0 1 1 1
0 0 0 0 0
即k 列单位矩阵,然后重复最后一列 n-k 次(或 m-k 次,具体取决于方向)。
【讨论】:
秩为 1 的矩阵可以由两个向量的外积创建,例如:
A = randn(10,1) * randn(1,10);
将其中的 k 个加在一起,您将得到一个秩为 k 的矩阵。像这样:
>> A = zeros(10);
>> for i = 1:4, A = A + randn(10,1) * randn(1,10); end
>> rank(A)
ans = 4
【讨论】:
A = rand(m, k)*rand(k,n); rank(A)