module HaskellWorks.Playground.Linear where

import Numeric.LinearAlgebra
import Prelude               hiding ((<>))

variance :: Matrix Double -> Matrix Double
variance :: Matrix Double -> Matrix Double
variance Matrix Double
m = Matrix Double
x Matrix Double -> Matrix Double -> Matrix Double
forall t. Numeric t => Matrix t -> Matrix t -> Matrix t
<> ((Matrix Double
m Matrix Double -> Matrix Double -> Matrix Double
forall a. Num a => a -> a -> a
- Vector Double -> Matrix Double
forall a. Storable a => Vector a -> Matrix a
asRow Vector Double
rdMean) Matrix Double -> Matrix Double -> Matrix Double
forall a. Floating a => a -> a -> a
** Matrix Double
2)
  where (Vector Double
rdMean, Herm Double
_) = Matrix Double -> (Vector Double, Herm Double)
meanCov Matrix Double
m
        r :: Int
r = Matrix Double -> Int
forall t. Matrix t -> Int
rows Matrix Double
m
        x :: Matrix Double
x = Double -> (Int, Int) -> Matrix Double
forall e d (c :: * -> *). Konst e d c => e -> d -> c e
konst (Double
1 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Int -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
r) (Int
1, Int
r)