Сингулярная комплексная матрица равна 2n x 2n, где n равно 3; 4 или 5. Как рассчитать разложение по сингулярным значениям в C/C++?
Входная матрица R имеет вид Y*Y', где ()' трансъюгирует.
Собственные векторы в U являются основным выходом. Рассмотрим следующий код Matlab:
[U,D,V]=svd(R);
En=U(:,n+1:m); % first few eigenvectors out
EnEn = En*En';
Большинство библиотек C/C++ (например, OpenCV) поддерживают инверсию матриц и SVD только для реальных матриц. В неособом случае
R = Re(R) + j*Im(R)
разрешение помогает. Верхняя половина перевернутой
[Re(R) -Im(R);
Im(R) Re(R)]
дает R-1, когда он сложный. Поскольку численный метод здесь является ключевым, многие предлагали Armadillo и Eigen вместо реализации собственного решения, подверженного ошибкам.
Как вы думаете? Что было бы хорошим выбором и почему?
C
иC++
на тегalgorithm
. - person crashmstr   schedule 21.09.2015