Вы не можете вычислить 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 для симметричных собственных задач.