Подтвердить что ты не робот

Рассчитать разложение Холецкого с использованием Eigen

Я пытаюсь вычислить фактор Холецкого матрицы в С++ (для данной матрицы P найдем L такой, что LL ^ T = P). Моя цель состоит не в том, чтобы решить линейную систему P * x = b, так как такие матричные разложения часто используются, но для того, чтобы фактически получить матрицу L. (я пытаюсь вычислить "сигма-точки", как это делается в нечувствительном преобразовании.)

Библиотека Eigen предположительно вычисляет разложения Cholesky, но я не могу понять, как заставить ее дать мне значения в матрице 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?

4b9b3361

Ответ 1

Вы можете посмотреть, что представляет собой Trait в заголовочном файле 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;

предоставит вам то, что вы хотите.