У меня прямоугольная матрица, X
размером 50×4000
, где m=50
а также n=4000
, Как можно заметить, m < n
, Мне нужно вычислить экономию размера разложения по сингулярным числам (SVD). MATLAB имеет встроенная функция Для выполнения этой задачи:
[ U, S, V ] = svd( X, 'econ' )
также производит разложение «экономичный размер». ЕслиX
являетсяm
-от-n
сm >= n
, то это эквивалентноsvd( X, 0 )
, Заm < n
только первыйm
столбцыV
вычисляются иS
являетсяm
-от-m
,
Я прочитал документация по LAPACK библиотека для xgesvd
и это говорит.
CALL SGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, LWORK, INFO )
Вход в
SGESVD
:
JOBU
: Определяет параметры для вычисления всех или части левых единичных векторовU
:знак равно
'A'
, всеM
столбцыU
возвращаются в массивU
:знак равно
'S'
, первыйmin(M,N)
столбцыU
возвращаются;знак равно
'O'
, первыйmin(M,N)
столбцыU
перезаписываются в массивеA
;знак равно
'N'
, левые особые векторы не вычисляются. Обратите внимание, чтоJOBVT
а такжеJOBU
не могут быть оба'O'
,
Могу ли я мягко спросить сообщество, JOBU = 'S'
или же JOBU = 'O'
в dgesvd
эквивалентно использованию MATLAB svd( X, 'econ')
? Если это так, иметь пример кода было бы здорово. Я хотел бы также отметить, что записи моей исходной матрицы, X
, больше не требуется после вычисления SVD и может быть заменен выходом функции. Большое спасибо.
Задача ещё не решена.
Других решений пока нет …