Как вычислить SVD (разложение по сингулярному значению) верхней треугольной матрицы - PullRequest
2 голосов
/ 19 февраля 2011

Знаете ли вы алгоритм, который рассчитывает SVD с использованием BLAS или LAPACK?

Допустим, у меня есть симметричная матрица A:

 1            22           13         14  
22             1           45         24   
13            45            1         34   
14            24           34          1 

После того, как я получу верхнюю треугольную Матрицу G от A:

 1            22           13         14  
 0             1           45         24   
 0             0            1         34   
 0             0            0          1
  • Как рассчитать SVD для A, но со значениями G?
  • Должен ли я пройти всю матрицу A или достаточно, чтобы пройти G (средняя матрица)?

Фактически, я получаю после обработки матрицы G, но как ее симметричную, как мне вычислить SVD симметричной A, имеющей только G (другими словами, только имеющую верхнюю треугольную матрицу A)?

1 Ответ

2 голосов
/ 19 февраля 2011

Вы не можете вычислить SVD матрицы, не имея доступа ко всем значениям в матрице (то есть вы не можете сделать это, основываясь только на верхнем треугольнике).

Чтобы увидеть это, посмотрите наSVD матриц:

A =  0  0     and G =  0  0
     1  0              0  0

Или, в более общем случае, взять SVD матрицы:

B =  0  0
     x  0

для различных значений x.Обратите внимание, что они разные, и заключите, что вы не можете вычислить SVD, основываясь исключительно на верхнем треугольнике.

Редактировать: Альберто правильно отмечает, что спрашивающий может работать с симметричнымэрмитовых) матриц, для которых абсолютно возможно вычислить SVD, основываясь исключительно на верхнем треугольнике.

Наконец-то был шанс вернуться к этому: обычно вообще не выполняют SVD для симметричных матриц, потому чтоСВД носит общий характер.Все собственные значения симметричной матрицы действительны, а собственные векторы образуют ортономальный базис, так что «SVD» на самом деле является просто обычным собственным разложением.Точные процедуры LAPACK, которые вы хотите использовать, несколько различаются в зависимости от особенностей хранения в матрице.Intel поддерживает хорошие ссылки на подпрограммы LAPACK;вы можете найти их дерево решений для подпрограмм LAPACK для симметричных собственных задач.

...