Я пытаюсь вычислить коэффициент Холецкого матрицы в C ++ (для заданной матрицы P найти L такой, что LL ^ T = P). Моя цель не в том, чтобы решить линейную систему P * x = b, так как часто используются такие разложения матриц, но в действительности получить матрицу L. (Я пытаюсь вычислить «точки сигмы», как это делается в преобразовании без запаха .)
Библиотека собственный предположительно вычисляет разложения Холецкого, но я не могу понять, как получить его, чтобы дать мне значения в матрице L. Когда я пытаюсь выполнить следующие строки кода
Eigen::MatrixXd P(3,3);
P << 6, 0, 0, 0, 4, 0, 0, 0, 7;
std::cout << P.llt().matrixL().col(0) << std::endl;
Я получаю ошибку компилятора
error: ‘Eigen::internal::LLT_Traits<Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001>, 1>::MatrixL’ has no member named ‘col’
документация говорит, что LLT.matrixL () возвращает тип Traits :: MatrixL. Что это такое и как я могу получить значения L?
Вы можете посмотреть, что это за черта, в заголовочном файле LLT.h. Это TriangularView как говорится в документации Треугольный вид не имеет col
член, так вот почему вы получаете ошибку. Копирование треугольного вида в плотную матрицу выглядит так:
Eigen::MatrixXd P(3,3);
P << 6, 0, 0, 0, 4, 0, 0, 0, 7;
Eigen::MatrixXd L( P.llt().matrixL() );
std::cout << L.col(0) << std::endl;
получите то, что вы хотите.
Других решений пока нет …