矩阵完全正交分解的范围

计算科学 线性代数 C++ 矩阵分解 本征
2021-12-16 07:16:12

这个 StackOverflow 答案中,@Gokul 展示了如何借助“特征”函数获得矩阵内核的基础 CompleteOrthogonalDecomposition矩阵的完全正交分解与该矩阵的所谓URV 分解有关。我不知道这个话题。我在某处读到 URV 分解还允许获取矩阵的图像(范围或跨度)。我想知道如何使用Eigen::CompleteOrthogonalDecomposition来获得矩阵图像的基础。

1个回答

我知道了。

template <typename Number> // e.g. double or complex
Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic> image_COD(
    const Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic>& M) {
  Eigen::CompleteOrthogonalDecomposition<
    Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic>> cod(M);
  const Eigen::Matrix<Number, Eigen::Dynamic, Eigen::Dynamic> Q =
    cod.householderQ();
  return Q.leftCols(cod.rank());
}

它比 QR 方法稍慢,但优点是可以从这种分解中获得内核和范围。LU 方法更快,但不返回正交基。