代码之家  ›  专栏  ›  技术社区  ›  Daiver

特征持有者Qr在特定奇异矩阵上给出nan/infs

  •  0
  • Daiver  · 技术社区  · 3 年前

    我试着用 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

    0 回复  |  直到 3 年前