c++ 本征BDCSVD中的NaN

hof1towb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(111)

我在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。

qlckcl4x

qlckcl4x1#

近年来,一些if bug修复已经进入了这个实现。请给予另一个尝试与当前版本在https://gitlab.com/libeigen/eigen。在3.4版本https://gitlab.com/libeigen/eigen/-/releases/3.4.0中也提供了许多这样的修复。

相关问题