Ошибка определения вектора строки собственной разреженной матрицы

Ниже мой код, матрица заполнена 2 x 2 разреженная матрица:

int size = 2
std::vector<Eigen::VectorXd> eachRow(size);

for(unsigned int i = 0 ; i < size ; ++i) 
{
    Eigen::VectorXd Row(2);
    Row = matrix.row(i);
    eachRow.emplace_back(Row);
}

Но когда я вызвал функцию mosek, чтобы поместить линейные члены в оптимизатор, я получил ошибку утверждения

int row_index = 0;
for(int j=0 ; j < size ; ++j)
    r = MSK_putcj(task, j, eachRow[row_index][j]); // MSK_putcj(task, int, double)

Сообщение об ошибке:

Eigen:: DenseCoeffsBase:: Scalar & Eigen:: DenseCoeffsBase:: operator () (Eigen:: Index) [с Derived = Eigen::Matrix; Eigen::DenseCoeffsBase::Scalar = double; Eigen::Index = long int]: утверждение `index >= 0 && index

int row_index = 0; 
Eigen::VectorXd Vec = eachRow[row_index]; 
for(int j=0 ; j < size ; ++j) r = MSK_putcj(task, j, Vec[j]); // MSK_putcj(task, int, double) 

Не будет ошибок при запуске такого кода, но я не знаю почему.

Моя матрица построена по коду ниже, это обратная матрица

Eigen::SparseMatrix<double> Mat(2, 2), matrix(2, 2), I(2, 2);
I.setIdentity(); 
std::vector<triplet> tripletList; 
tripletList.emplace_back(triplet(0, 0, 1)); 
tripletList.emplace_back(triplet(0, 1, 2)); 
tripletList.emplace_back(triplet(1, 0, 2)); 
tripletList.emplace_back(triplet(1, 1, 5)); 
Mat.setFromTriplets(tripletList.begin(), tripletList.end()); 
Eigen::SimplicialLLT < Eigen::SparseMatrix<double> > 

решатель;

solver.compute (Мат);

matrix = solver.solve(I); // I is the identity matrix with the same dimension

0 ответов

Другие вопросы по тегам