Как создать матрицу ранга K с помощью Matlab? - PullRequest
2 голосов
/ 19 августа 2011

Я собираюсь создать матрицу ранга k .Размер матрицы составляет mxn .Вход k удовлетворяет тому условию, что k .

Ответы [ 3 ]

4 голосов
/ 19 августа 2011

Не совсем понятно, к чему вы стремитесь.

Но чтобы создать матрицу B с определенным рангом k, из матрицы Arank не менее k), вы можете использовать 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
3 голосов
/ 19 августа 2011

Ну, тривиальный метод - создать матрицу, которая выглядит следующим образом:

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 голос
/ 16 декабря 2012

Матрица ранга 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...