0

私は Eigen::SPQR を使用してスパース行列システムを解いています。実行時エラーが発生する最小限の例を次に示します。

# include <Eigen/Core>
# include <Eigen/Sparse>
# include <Eigen/SparseLU>
# include <Eigen/SparseQR>
///  test eigen SPQR
    Eigen::SparseMatrix < double > A(500, 400);
    Eigen::VectorXd b(500);
    std::vector < Eigen::Triplet < double > > triplet;
    for( int i = 0; i < 500; i++ )
    {
        int r = rand() % 500;
        int c = rand() % 400;
        triplet.push_back( Eigen::Triplet < double > ( r, c, static_cast<double>(rand())/(RAND_MAX+1.0) ) );

        b(i) = static_cast<double>(rand())/(RAND_MAX+1.0);
    }
    A.setFromTriplets(triplet.begin(), triplet.end());
    Eigen::SPQR< Eigen::SparseMatrix < double > > spqrsolver(A);

    std::cout << A.rows() << " " << A.cols() << " "
              << b.rows() << " " << b.cols() << " "
              << spqrsolver.rows() << " " << spqrsolver.cols() << std::endl;
    Eigen::VectorXd X = spqrsolver.solve(b);

出力は 500 400 500 1 400 400 です。エラーメッセージは「アサーション `this->rows()==B.rows() && "SPQR::solve(): 右側の行列 B の行数が無効です" です。 ' 失敗した。"

4

0 に答える 0