Проблема сопоставления типов переменных с Eigen - PullRequest
0 голосов
/ 03 февраля 2020

Я использую Eigen на облачной платформе Google на машине с Ubuntu. Я установил g cc -7 и пытаюсь запустить код C ++, содержащий огромную матрицу (1000X1000) двойных чисел. Код работает нормально на Xcode 11.3 с clang, но на машине с Ubuntu у меня проблема с преобразованием типов переменных. Часть кода, которая вызывает проблемы:

Matrix<double, Dynamic, Dynamic> Mat(double x, double y, double En, int Np, double Kmax){
Matrix<double, Dynamic, Dynamic> M(Np, Np);
double eps = (double)Kmax / (double)Np;
double result, error;
struct params ps;
ps.x = x;
ps.y = y;
ps.En = En;
gsl_set_error_handler_off();
gsl_integration_workspace * w = gsl_integration_workspace_alloc (iters);
gsl_function F;
F.function = &intDeltFunc;
F.params = &ps;
gsl_integration_qags (&F, 0, y, 0, prec, iters, w, &result, &error);
gsl_integration_workspace_free (w);
for ( int i = 0; i < Np  ; i++){
    for ( int j = 0; j < Np ; j++){
        double p = eps * i + y;
        double q = eps * j + y;
        if ( (j == 0) || (j == Np - 1) ){
            M(i , j) =  Diag(p, q, x, y, En) + eps * Integral(p, q, x, y, En, result) / 2.0;
        }
        else{
            M(i , j) = Diag(p, q, x, y, En) + eps * Integral(p, q, x, y, En, result);
        }
    }
}
return M;}

Здесь Np = 1000.

Проблема, возникшая с Ubuntu:

Screenshot

main.cpp:247:26: error: no viable overloaded '='
            M(i , j) = DiagTerm + 0.5 * eps * IntegralTerm;
            ~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/Eigen/src/Core/MatrixBase.h:139:14: note: candidate function not viable: no known conversion
      from 'double' to 'const Eigen::MatrixBase<Eigen::IndexedView<Eigen::Matrix<double, -1, -1, 0, -1, -1>,
      double, double> >' for 1st argument
    Derived& operator=(const MatrixBase& other);

Я пытался загрузить Eigen несколько раз, чтобы указать компилятору его точное местоположение при компиляции, а также использовать clang (который использует Xcode), и у меня все еще есть проблема. У вас есть идеи, в чем может быть проблема?

...