[Rcpp-devel] C++ design for least squares solvers
Douglas Bates
bates at stat.wisc.edu
Mon Mar 22 17:50:05 CET 2010
A fundamental operation in the work that I do is to solve least
squares problems in various configurations. The simplest case is to
solve a least squares problem with a dense model matrix and a numeric
response, but there are many other cases based on properties of the
model matrices.
For the model matrices I can have one or two matrices and the matrices
can be sparse or dense. For the types of problems I may want to
incorporate weights and/or a penalty term. These properties are
somewhat orthogonal.
The underlying code for the solution is very different for the
different classes but the types of operations (solve the system for a
given response, evaluate the fitted values, ...) are common.
Coming from the C/R programming world I initially approached this by
defining a base class and defining classes that specialized this
class. The functions to do the actual operations were virtual
functions but that approach seems to get very complicated, perhaps
because I haven't thought it through completely yet. It seems that
templates would be a more effective way of approaching this but I am
still feeling my way around the corners of the template idiom.
So I am trying to decide how best to express such ideas in C++ code.
Ultimately I want to combine various forms of least squares solvers
with the idea of a generalized linear model family so that I can write
an iteratively reweighted least squares algorithm at a high level and
have the classes take care of the fussy details.
I realize that this may not be enough information to offer an opinion.
If desired I can make things more explicit by describing exactly
which operations should be incorporated in a least squares solver and
some of the possible combinations.
More information about the Rcpp-devel
mailing list