packages feed

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 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 =