dsp 0.2.4.1 → 0.2.5
raw patch · 4 files changed
+37/−7 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Matrix.QR.Givens: detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Matrix i j a -> a
+ Matrix.QR.Householder: detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Array (i, j) a -> a
- DSP.Basic: delay :: (Num a) => Int -> [a] -> [a]
+ DSP.Basic: delay :: Num a => Int -> [a] -> [a]
- DSP.Basic: delay1 :: (Num a) => [a] -> [a]
+ DSP.Basic: delay1 :: Num a => [a] -> [a]
- DSP.Basic: upsample :: (Num a) => Int -> [a] -> [a]
+ DSP.Basic: upsample :: Num a => Int -> [a] -> [a]
- DSP.Basic: upsampleRec :: (Num a) => Int -> [a] -> [a]
+ DSP.Basic: upsampleRec :: Num a => Int -> [a] -> [a]
- DSP.FastConvolution: fast_conv :: (RealFloat b) => Array Int (Complex b) -> Array Int (Complex b) -> Array Int (Complex b)
+ DSP.FastConvolution: fast_conv :: RealFloat b => Array Int (Complex b) -> Array Int (Complex b) -> Array Int (Complex b)
- DSP.Filter.FIR.Sharpen: sharpen :: (Num a, Eq a) => Array Int a -> ([a] -> [a])
+ DSP.Filter.FIR.Sharpen: sharpen :: (Num a, Eq a) => Array Int a -> [a] -> [a]
- DSP.Filter.IIR.IIR: iir_df2 :: (Num a) => (Array Int a, Array Int a) -> [a] -> [a]
+ DSP.Filter.IIR.IIR: iir_df2 :: Num a => (Array Int a, Array Int a) -> [a] -> [a]
- DSP.Multirate.CIC: cic_decimate :: (Num a) => Int -> Int -> Int -> [a] -> [a]
+ DSP.Multirate.CIC: cic_decimate :: Num a => Int -> Int -> Int -> [a] -> [a]
- DSP.Multirate.CIC: cic_interpolate :: (Num a) => Int -> Int -> Int -> [a] -> [a]
+ DSP.Multirate.CIC: cic_interpolate :: Num a => Int -> Int -> Int -> [a] -> [a]
- DSP.Source.Basic: impulse :: (Num a) => [a]
+ DSP.Source.Basic: impulse :: Num a => [a]
- DSP.Source.Basic: ramp :: (Num a) => [a]
+ DSP.Source.Basic: ramp :: Num a => [a]
- DSP.Source.Basic: step :: (Num a) => [a]
+ DSP.Source.Basic: step :: Num a => [a]
- DSP.Source.Basic: zeros :: (Num a) => [a]
+ DSP.Source.Basic: zeros :: Num a => [a]
- Matrix.Matrix: fromColumns :: (Ix i) => (i, i) -> [Array i a] -> Array (i, Int) a
+ Matrix.Matrix: fromColumns :: Ix i => (i, i) -> [Array i a] -> Array (i, Int) a
- Matrix.Matrix: fromRows :: (Ix j) => (j, j) -> [Array j a] -> Array (Int, j) a
+ Matrix.Matrix: fromRows :: Ix j => (j, j) -> [Array j a] -> Array (Int, j) a
- Matrix.Vector: generate :: (Ix i) => (i, i) -> (i -> a) -> Array i a
+ Matrix.Vector: generate :: Ix i => (i, i) -> (i -> a) -> Array i a
- Matrix.Vector: lift2 :: (Ix i) => (a -> b -> c) -> Array i a -> Array i b -> Array i c
+ Matrix.Vector: lift2 :: Ix i => (a -> b -> c) -> Array i a -> Array i b -> Array i c
- Numeric.Statistics.Covariance: cov :: (Fractional a) => [a] -> [a] -> a
+ Numeric.Statistics.Covariance: cov :: Fractional a => [a] -> [a] -> a
- Numeric.Statistics.Moment: avgdev :: (RealFloat a) => [a] -> a
+ Numeric.Statistics.Moment: avgdev :: RealFloat a => [a] -> a
- Numeric.Statistics.Moment: kurtosis :: (RealFloat a) => [a] -> a
+ Numeric.Statistics.Moment: kurtosis :: RealFloat a => [a] -> a
- Numeric.Statistics.Moment: mean :: (Fractional a) => [a] -> a
+ Numeric.Statistics.Moment: mean :: Fractional a => [a] -> a
- Numeric.Statistics.Moment: skew :: (RealFloat a) => [a] -> a
+ Numeric.Statistics.Moment: skew :: RealFloat a => [a] -> a
- Numeric.Statistics.Moment: stddev :: (RealFloat a) => [a] -> a
+ Numeric.Statistics.Moment: stddev :: RealFloat a => [a] -> a
- Numeric.Statistics.Moment: var :: (Fractional a) => [a] -> a
+ Numeric.Statistics.Moment: var :: Fractional a => [a] -> a
Files
- Matrix/QR/Givens.hs +12/−1
- Matrix/QR/Householder.hs +17/−1
- dsp.cabal +2/−2
- test/Test/Matrix/QR.hs +6/−3
Matrix/QR/Givens.hs view
@@ -1,6 +1,6 @@ module Matrix.QR.Givens ( leastSquares,- decompose, solve, det,+ decompose, solve, det, detAbs, Rotation, rotateVector, Upper, solveUpper, detUpper, ) where@@ -156,5 +156,16 @@ then product $ map (snd . Map.findMin) $ Map.elems rows else 0 +{- |+Only sensible for square matrices,+but the function does not check whether the matrix is square.+-} det :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Sparse.Matrix i j a -> a det = detUpper . snd . decompose++{- |+Absolute value of the determinant.+This is also sound for non-square matrices.+-}+detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Sparse.Matrix i j a -> a+detAbs = abs . det
Matrix/QR/Householder.hs view
@@ -1,6 +1,6 @@ module Matrix.QR.Householder ( leastSquares,- decompose, solve, det,+ decompose, solve, det, detAbs, Reflection, reflectMatrix, reflectVector, Upper, matrixFromUpper, solveUpper, detUpper, ) where@@ -146,7 +146,23 @@ then product $ map (head . elems) rs else 0 +{- |+Only sensible for square matrices,+but the function does not check whether the matrix is square.++For non-square matrices the sign is not of much use.+It depends on the implementation.+It is not uniquely defined by requiring+that the determinant of the orthogonal transformation has positive sign.+-} det :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Array (i,j) a -> a det a = let (qs,u) = decompose a in (if even (length qs) then 1 else -1) * detUpper u++{- |+Absolute value of the determinant.+This is also sound for non-square matrices.+-}+detAbs :: (Ix i, Enum i, Ix j, Enum j, RealFloat a) => Array (i,j) a -> a+detAbs = abs . detUpper . snd . decompose
dsp.cabal view
@@ -1,5 +1,5 @@ Name: dsp-Version: 0.2.4.1+Version: 0.2.5 License: GPL License-File: COPYING Copyright: Matt Donadio, 2003@@ -17,7 +17,7 @@ Build-Type: Simple Source-Repository this- Tag: 0.2.4.1+ Tag: 0.2.5 Type: darcs Location: http://code.haskell.org/~thielema/dsp/
test/Test/Matrix/QR.hs view
@@ -88,8 +88,11 @@ approx :: (Fractional a, Ord a) => a -> a -> Bool approx x y = abs (x-y) <= 1e-5 * max 1 (abs x + abs y) +maxNorm :: (Num a, Ord a, Ix i) => Array i a -> a+maxNorm = Fold.foldl max 0 . fmap abs+ approxAbsVector :: (Fractional a, Ord a, Ix i) => Array i a -> Array i a -> Bool-approxAbsVector x y = (Fold.foldl max 0 $ fmap abs $ Vector.sub x y) < 1e-5+approxAbsVector x y = maxNorm (Vector.sub x y) <= 1e-5 @@ -129,12 +132,12 @@ gramianHouseholder :: QC.Property gramianHouseholder = QC.forAll (fmap doubleArray genMatrix) $ \a ->- gramian a `approx` (Householder.det a ^! 2)+ gramian a `approx` (Householder.detAbs a ^! 2) gramianGivens :: QC.Property gramianGivens = QC.forAll (fmap fromIntegral <$> genSparse) $ \a ->- gramian (Sparse.toDense a) `approx` (Givens.det a ^! 2)+ gramian (Sparse.toDense a) `approx` (Givens.detAbs a ^! 2) detHouseholder :: QC.Property detHouseholder =