Я использую 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:
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), и у меня все еще есть проблема. У вас есть идеи, в чем может быть проблема?