我试着用
colPivHouseholderQr
,但接受了一些特定矩阵的nan/infs。
以下是示例:
Eigen::MatrixXd lhs {
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. },
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. },
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. },
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. },
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. },
{0.293596, 0.293596, 0.293596, 0.293596, 0.293596, 0. ,
0.31533 , 0.293596},
{0.32315 , 0.32315 , 0.32315 , 0.32315 , 0.32315 , 0.31533 ,
0. , 0.32315 },
{0. , 0. , 0. , 0. , 0. , 0.293596,
0.32315 , 0. }
};
Eigen::VectorXd rhs = Eigen::VectorXd::Ones(lhs.rows());
const Eigen::VectorXd solution = lhs.householderQr().solve(rhs);
std::cout << solution << std::endl;
此代码打印如下内容:
-nan
-nan
-nan
-nan
-nan
-nan
-nan
inf
如果我将求解器更改为,
colPiv住户Qr
我得到了有效的解决方案。我还尝试在我的原始矩阵上执行SVD,并运行
householderQr
仅在对角线上具有奇异值(包括零)的对角线系统上,以及
户主Qr
工作正常,所以至少它能够处理奇异矩阵。
根据
documentation
户主Qr
应与
任何
矩阵所以我的问题是——这是故意的行为,还是我在文档/实现中的错误或bug?
我的Eigen版本是
3.4.0
,我的编译器是GCC
11.2.0