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

Я пытаюсь вычислить коэффициент Холецкого матрицы в 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?

10

Решение

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

получите то, что вы хотите.

11

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]