This project has moved. For the latest updates, please go here.

Thin QR API

Oct 23, 2012 at 10:47 AM

I need to implemment "thin" QR (full QR returns Q as m-by-m and R as m-by-n and thin QR return Q as m-by-n and R as n-by-n, see http://en.wikipedia.org/wiki/QR_decomposition) and it looks like it will be trivial to tweak the current QR factorization code to do both.

How should it be handled in the API?

1) as a new set of classes: ThinQR, DenseThinQR, UserThinQR, etc.
2) add a boolean parameter to the QR constructors and extension methods (Matrix.QR())  - true for thin and default to false (so we don't break existing code).
3) a better idea

Thanks,
Marcus 

Coordinator
Oct 24, 2012 at 11:25 PM

Hi Marcus,

In the past, I've also had a need for unique QR decompositions (positive diagonal elements in R - no priotity on this at all though). If we'd want to support that at some point in the future as well and we go for 1), we might end up with QR, ThinQR, UniqueQR and UniqueThinQR, each with Dense, User, etc. To avoid further type explosion I'd suggest to go for 2), but use a simple enum instead of a boolean parameter for clarity.

Thanks,
Christoph

Oct 31, 2012 at 9:52 AM

Hi Chris,

I started making the changes (lots of little changes over quite a few classes), but I got sidetracked onto something else. I'll try to finish it next week.

Regards,
Marcus 

Nov 13, 2012 at 2:10 PM

Hey Chris,

I checked in a thin qr implementation into my fork. - https://github.com/cuda/mathnet-numerics/tree/thinqr

Let me know if you have any comments.

I dropped ACML and GotoBlas from the native wrappers. ACML no longer supports 32bit systems and GotoBlas is basically dead. It has been forked into OpenBLAS but I haven't gotten it to build on Windows.

ATLAS now builds easily on Windows. However, I've ran into a glitch building the full LAPACK library with it. Once I can do that, I'll add an ATLAS provider.

Regards,
Marcus 

 

Coordinator
Nov 23, 2012 at 9:15 PM

Hi Marcus,

I've just merged your branch to mainline, thanks a lot!

Thanks,
Christoph