From 42bec1ac9911131b552f66779203eb599a86563d Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Tue, 2 Oct 2007 18:59:50 +0000 Subject: lapack real and complex unpacked QR --- lib/Numeric/GSL/Matrix.hs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'lib/Numeric/GSL/Matrix.hs') diff --git a/lib/Numeric/GSL/Matrix.hs b/lib/Numeric/GSL/Matrix.hs index eb1931a..5a5c19e 100644 --- a/lib/Numeric/GSL/Matrix.hs +++ b/lib/Numeric/GSL/Matrix.hs @@ -16,7 +16,7 @@ module Numeric.GSL.Matrix( eigSg, eigHg, svdg, - qr, + qr, qrPacked, unpackQR, cholR, -- cholC, luSolveR, luSolveC, luR, luC @@ -149,6 +149,30 @@ qr x = unsafePerformIO $ do c = cols x foreign import ccall "gsl-aux.h QR" c_qr :: TMMM +qrPacked :: Matrix Double -> (Matrix Double, Vector Double) +qrPacked x = unsafePerformIO $ do + qr <- createMatrix RowMajor r c + tau <- createVector (min r c) + c_qrPacked // mat cdat x // mat dat qr // vec tau // check "qrUnpacked" [cdat x] + return (qr,tau) + where r = rows x + c = cols x +foreign import ccall "gsl-aux.h QRpacked" c_qrPacked :: TMMV + +unpackQR :: (Matrix Double, Vector Double) -> (Matrix Double, Matrix Double) +unpackQR (qr,tau) = unsafePerformIO $ do + q <- createMatrix RowMajor r r + rot <- createMatrix RowMajor r c + c_qrUnpack // mat cdat qr // vec tau // mat dat q // mat dat rot // check "qrUnpack" [cdat qr,tau] + return (q,rot) + where r = rows qr + c = cols qr +foreign import ccall "gsl-aux.h QRunpack" c_qrUnpack :: TMVMM + + +type TMMV = Int -> Int -> PD -> TMV +type TMVMM = Int -> Int -> PD -> Int -> PD -> TMM + {- | Cholesky decomposition of a symmetric positive definite real matrix using /gsl_linalg_cholesky_decomp/. @\> chol $ (2><2) [1,2, -- cgit v1.2.3