【发布时间】:2015-12-18 03:41:41
【问题描述】:
奇异复数矩阵是 2n x 2n 其中 n 为 3; 4 or 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,而不是实施自定义的容易出错的解决方案。
你怎么看?哪个是不错的选择,为什么?
【问题讨论】:
-
" in C/C++" 这样的语言不存在。选择一个。
-
这取决于你。它是一种算法,而不是一种设计模式。
-
使用 LAPACK:netlib.org/lapack/lug/node32.html
-
@renonsz 然后用
algorithm标签替换C和C++标签。 -
我投票结束这个问题,因为它是关于数值方法,而不是编程。
标签: c++ c svd matrix-inverse singular