奇异复数矩阵为 2 n x 2 n,其中 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,而不是实施自定义容易出错的解决方案。
你怎么看?哪个是一个不错的选择,为什么?