首页 > 解决方案 > 每次我尝试创建稀疏矩阵时的不同行为

问题描述

我正在尝试从 Triplets 创建一个稀疏矩阵。不知何故,下面的程序要么打印一个只包含零的矩阵,要么我得到


^[[在抛出 'std::bad_alloc' what()的实例后调用 Bterminate :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;
        }
    }
*/


}

标签: c++eigen

解决方案


推荐阅读