[Rcpp-devel] MappedSparseMatrix in RcppEigen package
    Shanika Wickramasuriya 
    shaniw_21 at yahoo.com
       
    Thu Oct  2 14:08:45 CEST 2014
    
    
  
Hi,
I want to post the following post to the list. 
I want to use conjugate gradient algorithm implemented in RcppEigen package for solving large sparse matrices. 
Since I am new to Rcpp and C++, I just started with the dense matrices.
// [[Rcpp::depends(RcppEigen)]]
#include <Rcpp.h>
#include <RcppEigen.h>
#include <Eigen/IterativeLinearSolvers>
using Eigen::SparseMatrix;
using Eigen::MappedSparseMatrix;
using Eigen::Map;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Rcpp::as;
using Eigen::ConjugateGradient;
typedef Eigen::MappedSparseMatrix<double> MSpMat;
// [[Rcpp::export]]
VectorXd getEigenValues(SEXP As, SEXP bs) {
  const Map<MatrixXd> A(as<Map<MatrixXd> > (As));
  const Map<VectorXd> b(as<Map<VectorXd> > (bs));
  ConjugateGradient<MatrixXd> cg;
  cg.compute(A);
  VectorXd x=cg.solve(b);
  return x;
}
This works as expected. Therefore, I thought to extend this to suit to sparse matrices.
// [[Rcpp::depends(RcppEigen)]]
#include <Rcpp.h>
#include <RcppEigen.h>
#include <Eigen/IterativeLinearSolvers>
using Eigen::SparseMatrix;
using Eigen::MappedSparseMatrix;
using Eigen::Map;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Rcpp::as;
using Eigen::ConjugateGradient;
typedef Eigen::MappedSparseMatrix<double> MSpMat;
// [[Rcpp::export]]
VectorXd getEigenValues(SEXP As, SEXP bs) {
  const MSpMat A = as<MSpMat>(As);
  const Map<VectorXd> b(as<Map<VectorXd> > (bs));
  ConjugateGradient<SparseMatrix<double> > cg;
  cg.compute(A);
  VectorXd x=cg.solve(b);
  return x;
}
However, this tends to give really strange results. The code in itself is also not giving any errors. Hope someone could help me to correct this error.
Thanks.
Regards,
 
Shanika Wickramasuriya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141002/398f64e4/attachment.html>
    
    
More information about the Rcpp-devel
mailing list