c++ - 使用特征值的复矩阵矩阵乘法

标签 c++ matrix eigen matrix-multiplication complex-numbers

我正在做复杂的矩阵矩阵乘积,如代码所示。 Eigen * 运算符似乎没有给出正确的结果。为了验证我还编写了另一个例程来查找产品。由此可见,结果的虚部没问题,但实部不准确。有人可以告诉我为什么吗?

Eigen::MatrixXcd U2 = Eigen::MatrixXcd::Random(N1, computed_rank);
Eigen::MatrixXcd V2 = Eigen::MatrixXcd::Random(computed_rank, N2);
Eigen::MatrixXcd W2 = Mat::Zero(N1,N2);
for (size_t k = 0; k < computed_rank; k++) {
    W2 += U2.col(k)*V2.row(k);
}
Eigen::MatrixXcd Q = U2*V2;
Eigen::MatrixXcd E2 = Q-W2;
cout << "Err Total: " << E2.norm()/W2.norm() << endl;
cout << "Err Real: " << E2.real().norm()/W2.real().norm() << endl;
cout << "Err Imag: " << E2.imag().norm()/W2.imag().norm() << endl;

给出了结果:

Err Total: 0.84969
Err Real: 1.17859
Err Imag: 1.18274e-16

我发现,当这是项目中唯一的代码时,不会出现此问题。但我把它作为一个更大项目的一部分,但它似乎失败了。

最佳答案

事实证明,GNU 的 -ffast-math 优化标志并不兼容所有程序。我在编译更大的项目时使用了它,而不是在做孤立的项目时使用它。这就是失败的原因!更多详情请参阅https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html .

关于c++ - 使用特征值的复矩阵矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355414/

相关文章:

c++ - 模板元编程经验法则

c++ - [C++] 将一个字符串分割成由另一个字符串中给出的符号以外的任何分隔符分隔的字符串?

c# - 接口(interface)和 header

python - 在 numpy 矩阵中一次打乱一列的有效方法

python - 从 .txt 文件写入和读回

file - 使用 Lisp 从文件中读取矩阵

c++ - 如何使用 BCP 提取可以构建的 Boost 子集?

c++ - 如何在列中打印特征变量?

c++ - 如何在 C++ 中使用特征库导入矩阵市场文件

c++ - 带有 Eigen 的神秘 C++/CLI 托管/非托管错误