eigen-3.3.4.2: test/regression.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
import Control.Applicative (liftA2)
import Eigen.Matrix as M
import Eigen.Solver.LA
import Data.List as List
import Control.Monad
import Data.Maybe (fromMaybe)
a :: Maybe (MatrixXd 5 3)
a = fromList
[ [1,3.02, 6.89]
, [1,2.01, 5.39]
, [1,2.41, 6.01]
, [1,2.09, 5.55]
, [1,2.58, 6.32]
]
b :: Maybe (MatrixXd 5 1)
b = fromList $ List.map return [-4.32,-3.79,-4.01,-3.86,-4.10]
main :: IO ()
main = do
print a
print b
forM_ [FullPivLU, HouseholderQR, ColPivHouseholderQR, FullPivHouseholderQR, JacobiSVD] $ \d -> do
let x :: Maybe (MatrixXd 3 1)
x = liftA2 (solve d) a b
let e :: Maybe Double
e = relativeError <$> x <*> a <*> b
e' :: Maybe Double
e' = liftA2 (/) (norm <$> (sub <$> (liftA2 mul a x) <*> b)) (norm <$> b)
putStrLn $ replicate 20 '*'
--print d
print x
print e
print e'
putStrLn "\n-2.34666 - 0.25349 x1 - 0.174965 x2"
putStrLn "done"
print $ (identity :: MatrixXd 4 4)
print $ M.normalize <$> a
print $ M.transpose <$> a
let _a :: Maybe (MatrixXd 3 3)
_a = M.fromList
[ [ 0.680, 0.597, -0.330]
, [-0.211, 0.823, 0.536]
, [ 0.566, -0.605, -0.444]
]
_b = M.inverse <$> _a
print _a
print _b
print $ liftA2 M.mul _a _b
print $ linearRegression (M.Row @5)
[ [-4.32, 3.02, 6.89]
, [-3.79, 2.01, 5.39]
, [-4.01, 2.41, 6.01]
, [-3.86, 2.09, 5.55]
, [-4.10, 2.58, 6.32]
]