как получить максимально независимые векторы с учетом набора векторов в MATLAB? - PullRequest
3 голосов
/ 19 апреля 2011

Если мне дан набор векторов (они могут быть представлены как векторы столбцов матрицы), и я хочу получить максимально независимые векторы, как лучше всего это сделать?

Я мог бы добавить один вектор к результирующему набору за раз, чтобы увидеть, увеличен ли ранг вновь сформированной матрицы или нет.Но я чувствую, что это не очень эффективно.Конечно, я мог бы вернуться к устранению Гаусса, чтобы решить это.Но мне просто интересно, есть ли лучший (эффективный, численно устойчивый и надежный) подход к этой проблеме.

Спасибо.

Редактировать

Почувствуйте сложение, наблюдая за повышением ранга, вероятно, недействительным.Мы можем сделать удаление, наблюдая, если ранг уменьшается, хотя.

Ответы [ 4 ]

2 голосов
/ 28 декабря 2011
[U,S,V]=svd(vectors);
U(1:size(vectors,1),1:size(vectors,2))=vectors;

U теперь содержит исходные векторы плюс оптимально ортогональное множество.

2 голосов
/ 09 мая 2011

Этот код поможет.Он немного грязный, потому что он растет rInd на лету, что не является самым эффективным, но идея важнее.Он использует QR-разложение, которое в основном является ортогонализацией Грамма-Шмидта.После этого он проходит через строки r, пока не найдет следующий вектор в A, который добавляет что-то линейно независимое к известному в настоящее время базису.векторы вашей матрицы A без их изменения.svd не даст вам это напрямую.

1 голос
/ 19 апреля 2011

Лучше всего делать RREF и искать столбцы с ведущими нулями:

matr(:,logical(sum(rref(matr)==1)))

Это даст вам основу для пространства столбцов матрицы.

0 голосов
/ 09 мая 2011

SVD ваш ответ.

Ссылка MATLAB для SVD .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...