如何使用MATLAB创建秩k矩阵



我想创建一个秩k的矩阵。矩阵的维数是m x n。输入的k满足k < min(m,n) .

你的目标不是很明确。

但是为了从矩阵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

相关内容

  • 没有找到相关文章

最新更新