C++ C/C+中奇异复方阵的伪逆(SVD)+;

C++ C/C+中奇异复方阵的伪逆(SVD)+;,c++,c,svd,matrix-inverse,singular,C++,C,Svd,Matrix Inverse,Singular,奇异复矩阵为2nx2n,其中n为3;4或5。如何在C/C++中计算奇异值分解 输入矩阵R的形式为Y*Y',其中()'是transjugate 以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) 决心有帮助。上半

奇异复矩阵为2nx2n,其中n为3;4或5。如何在C/C++中计算奇异值分解

输入矩阵R的形式为Y*Y',其中()'是transjugate

以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。 由于数值方法是这里的关键,许多人建议犰狳和特征值,而不是实现一个自定义的容易出错的解决方案


你觉得怎么样?哪个是一个好的选择,为什么?

a
是一个矩阵,而
a*
是它的共轭转置。那么矩阵A.A*就是厄米特矩阵。它甚至是半正定的

在这种情况下,奇异值分解和特征值分解之间没有根本区别

因此,可以证明有用的Lapack例程是和

由于接口,您可以为C调用这些函数。这些函数被库和C++所封装。p>
请看我的回答,了解如何使用Lapacke调用这些函数的示例:.

“在C/C++中”这样的语言并不存在。选一个,由你决定。这是一个算法,而不是一个设计模式。使用LAPACK:@renonsz然后用
算法
标记替换
C
C++
标记。我投票结束这个问题,因为它是关于数值方法,而不是编程。