我在C++编程中使用Eigen来实现高效的Tensor-Storage,遇到了一个错误。
如果我使用BDCSVD模块来计算一个(非常简单的)奇异值分解,一切都会崩溃。当我试图计算时,
int n = 512;
Eigen::MatrixXd A = n * Eigen::MatrixXd::Ones(n, n);
Eigen::BDCSVD<Eigen::MatrixXd> SVD(A, Eigen::ComputeThinU | Eigen::ComputeThinV);
这应该给予我奇异值和薄U和V矩阵。由于矩阵由512个大束组成,因此矩阵的秩为1。JacobiSVD模块给出了正确的结果,BDCSVD给了我一堆nan值。他们从哪里来?
我使用Visual Studio 15的版本14.0.25431.01,并根据Eigen IDE页面设置了所有内容,这发生在32位或64位的版本或发布模式下。
在更多的“随机”-类似大小的例子中,BCD比Jacobi的性能高出30倍或更多,所以我真的很想使用BCD。
1条答案
按热度按时间qlckcl4x1#
近年来,一些if bug修复已经进入了这个实现。请给予另一个尝试与当前版本在https://gitlab.com/libeigen/eigen。在3.4版本https://gitlab.com/libeigen/eigen/-/releases/3.4.0中也提供了许多这样的修复。