Skip to content

Cpp Version of ARPACK and Integration with (Rcpp)Armadillo

Yixuan Qiu edited this page Mar 9, 2015 · 2 revisions

C++ Version of ARPACK and Integration with (Rcpp)Armadillo

Summary: Rewriting (a subset of) the ARPACK library in C++ and integrate it into Armadillo/RcppArmadillo.

Description: ARPACK is a FORTRAN library for solving large scale eigenvalue/eigenvector problems that has been widely used by many numerical computing languages and packages including R, Python, Octave, Julia, Armadillo etc. However, ARPACK was written in the antique FORTRAN 77 language, and has experienced an inactive development for a long time.

This project tries to revive the ARPACK library by reimplementing it in C++ with the help of Armadillo, a C++ linear algebra library. The C++ version of ARPACK would be in a header-only form and hence could possibly be merged into Armadillo in the future. Moreover, it could be used by Rcpp to work on R objects through the interfacing package RcppArmadillo.

Related work: The original version of ARPACK was released by Rice University in 1996 (http://www.caam.rice.edu/software/ARPACK/). When its development became inactive, Debian, Octave and Scilab jointly restarted the project and renamed it to arpack-ng (https://github.com/opencollab/arpack-ng), whose core part of code is cloned from ARPACK with a certain number of improvements. Armadillo also has an interface to ARPACK through functions eigs_sym() and eigs_gen() (http://arma.sourceforge.net/docs.html#eigs_sym). The R package rARPACK is an R wrapper of the ARPACK library (http://cran.r-project.org/web/packages/rARPACK/index.html).

All the software packages above are based on the FORTRAN 77 version of ARPACK. This projects tries to provide a better and easier-to-use interface of ARPACK for modern software design.

Potential tasks:

  • Writing C++ classes to reimplement the functionality of ARPACK
  • Preparing a test suite to prove the correctness of the newly written library
  • Benchmarking the C++ version of ARPACK, compared with the FORTRAN 77 one
  • Integrating the library into Armadillo/RcppArmadillo
  • R wrapper of the new implementation of ARPACK

Skills required: Knowledge in linear algebra and C++ programming

Test: A piece of C++ code to calculate the largest three eigenvalues of a 10x10 symmetric real matrix.

Mentor: Dirk Eddelbuettel ([@](mailto:edd {at} debian {dot} org)), Ryan Curtin ([@](mailto:ryan {at} ratml {dot} org)) and Drew Schmidt (as a backup mentor [@](mailto:wrathematics {at} gmail {dot} com))

A solution to the test: The arpack-arma repository by Yixuan Qiu provides a solution to the test.