Разное поведение каждый раз, когда я пытаюсь создать разреженную матрицу - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать разреженную матрицу из Триплетов.Каким-то образом приведенная ниже программа либо печатает матрицу, содержащую только нули, либо я получаю

^ [[Bterminate, вызываемый после бросания экземпляра 'std :: bad_alloc'
what (): std ::bad_alloc Прервано.

Когда я добавляю код к закомментированной кнопке, он иногда начинает работать, а иногда я снова получаю только нули.

Я не понимаю этого поведения.Кажется, это связано с памятью, но почему распечатка материала (после комментирования в нижнем коде) должна изменить то, что происходит с вершиной?

Что-то не так с моим подходом?Или что-то не так с моей настройкой?Я только что скачал последнюю стабильную версию с http://eigen.tuxfamily.org.

#include <iostream>
#include <Eigen/SparseCore>
#include <Eigen/Dense>
int main() 
{
    int n = 10; 
    std::vector<Eigen::Triplet<double> > ijv; 
    for(int i; i < n; i++)
    {
        ijv.push_back(Eigen::Triplet<double>(i,i,1));
        if(i < n-1)
        {
            ijv.push_back(Eigen::Triplet<double>(i+1,i,-0.9));
        }
    }

    Eigen::SparseMatrix<double> X(n,n);
    X.setFromTriplets(ijv.begin(), ijv.end());
    std::cout << Eigen::MatrixXd(X) << std::endl;

/*    std::cout << "Row\tCol\tVal" <<std::endl;
    for (int k=0; k < X.outerSize(); ++k)
    {
        for (Eigen::SparseMatrix<double>::InnerIterator it(X,k); it; ++it)
        {
         std::cout << it.row() << "\t"; // row index
         std::cout << it.col() << "\t"; // col index (here it is equal to k)
         std::cout << it.value() << std::endl;
        }
    }
*/


}
...