[eigen] how to create a "virtual" array or matrix?
• To: eigen@xxxxxxxxxxxxxxxxxxx
• Subject: [eigen] how to create a "virtual" array or matrix?
• From: David Roundy <roundyd@xxxxxxxxxxxxxxxxxxxxxxx>
• Date: Mon, 7 Jun 2010 12:20:09 -0700
• Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; b=mZdHK7SI6UfSicyhYjb5WdWtV5XCiHy7oaxLtTAblH8P7WwRygBtsP4KwftLMPrwfv ddfyPLyI6tDIFJu8De+O6DS/hhGkDLLQtphETwQGve+2O0kmztgDp0nF4TQAe/zXKdxC jP8AJBpepzdIWUg94L/+xyHsqqN+ziIlyEbUc=

Hi all,

I'd like to create an object that describes an easily-computable
array.  In particular, I want to work with some vectors describing
functions of position.  In order to easily manipulate these, I'd like
to create an object containing the value $|\vec{r}|^2$.  I could, of
course, fill a vector with this value, but that would be a waste of
memory, since it's really cheap to compute.  And these vectors will
eventually end up being quite large (maybe a GB or so), so I'd prefer
not to allocate the memory.  In the past, I'd have just written a loop
to sum over all positions, but that leads to ugly and hard-to-maintain
code, since a non-trivial loop then shows up many times in the code
(there's a bit of trickiness involving finding the Wigner-Seitz cell).
And it seems that template expressions provide almost precisely what
I want.

Is there a class that does this, e.g. something like

class VirtualMatrix<...? {
VirtualMatrix(double (*func)(int, int));
}

which could just take a function of indices and turns it into a matrix?

If there isn't something like this built into eigen, would it be easy
to create? I've tried (briefly) to create a new class deriving
MatrixBase, but immediately ran into trouble.  Perhaps I just know too
little about C++ templates to use eigen effectively.  :(

David Roundy



 Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/