Как исправить эту ошибку переполнения инверсии собственной матрицы? - PullRequest
0 голосов
/ 22 января 2020
#include "Eigen/Core"
#include <iostream>

using namespace std;
using namespace Eigen;

int main() {

    Matrix <float, 2, 2 > J;
    J << 0.0f, -1.0f, 1.0f, 0.0f;

    Matrix <float, 2, 2 > I;
    I << 1.0f, 0.0f, 0.0f, 1.0f;

    Matrix <float, 2, 2 > A;
    A = 20.0f * I + 30.0f * J;

    Matrix <float, 2, 2 > B;

    B = 10.0f * I + 25.0f * J;

    Matrix <float, 2, 2 > C;
    C = B;
    cout << C.inverse() << endl;

    return 0;
}

Выдает ошибку, которую я не могу исправить. Я не знаю, что здесь подразумевается под "неразрешенными внешними факторами", и если это ошибка переполнения, как это исправить ??

1 Ответ

2 голосов
/ 22 января 2020

Если вы посмотрите на документацию MatrixBase::inverse, вы увидите, что она требует от вас Eigen/LU. Демонстрация Godbolt: https://godbolt.org/z/ydfALn

Если вы просто включите Eigen/Core, вы получите только предварительное объявление inverse, компилятор предположит, что он будет реализован в другом месте, и компоновщик потерпит неудачу, потому что не может найти символ.

Включая Eigen/Dense также будет работать, поскольку он включает в себя, например, заголовок Eigen/LU.

...