Мне нужно переписать код MatLab с использованием C ++.
Внутри кода Matlab мы вызываем функцию chol
для вычисления верхней матрицы tri angular.
Для части C ++ я начинаю смотреть на Eigen. Однако я изо всех сил пытаюсь получить эквивалент функции Matlab chol
.
Я пытался использовать класс Eigen LDLT
:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main() {
MatrixXd matA(2, 2);
matA << 1, 2, 3, 4;
MatrixXd matB(4, 4);
matB << matA, matA/10, matA/10, matA;
matB = matB*matB.transpose();
Eigen::LDLT<MatrixXd> tmp(matB);
MatrixXd U = tmp.matrixU();
cout << U << endl;
}
, но результат отличается от кода Matlab:
matB = [ 1 2 0.1 0.2
3 4 0.3 0.4
0.1 0.2 1 2
0.3 0.4 3 4];
matB = matB*matB';
D = chol(matB);