Safe Haskell | None |
---|---|
Language | Haskell2010 |
Determinants.
TODO: specialized prime fields; fast C implementation; pivoting for Bareiss
- type Matrix a = Array (Int, Int) a
- printMatrix :: Show a => Matrix a -> IO ()
- showMatrix :: Show a => Matrix a -> String
- showMatrix' :: Show a => Matrix a -> [String]
- class (Eq a, Num a, Show a) => Determinant a where
- c_inv_modp :: Int64 -> Int64 -> Int64
- c_det_modp :: Int64 -> CInt -> Ptr Int64 -> IO Int64
- fastDetModP :: Int64 -> Matrix Int64 -> Int64
- ioFastDetModP :: Int64 -> Matrix Int64 -> IO Int64
- gaussElimDeterminantInt64 :: Matrix Zp -> Zp
- type STMatrix s a = STArray s (Int, Int) a
- bareissDeterminantFullRank :: forall a. Integral a => Matrix a -> a
- gaussElimDeterminant :: forall a. (Eq a, Show a, Fractional a) => Matrix a -> a
- naiveDeterminant :: forall a. Num a => Matrix a -> a
- mkSquareMatrix :: (Int -> Int -> a) -> Int -> Matrix a
- testMatrix :: Num a => Int -> Matrix a
- randomMatrix :: (Random a, Num a) => Int -> IO (Matrix a)
- randomMatrix' :: (Random a, Num a) => a -> Int -> IO (Matrix a)
- printST :: Show a => a -> ST s ()
- test :: IO ()
matrices
a type class for determinants
class (Eq a, Num a, Show a) => Determinant a where Source #
determinant :: Matrix a -> a Source #
C implementation of determinant in a prime field (gaussian elimination, fitting into 64 bit)
Bareiss determinant algorithm
bareissDeterminantFullRank :: forall a. Integral a => Matrix a -> a Source #
Works only if the top-left minors all have nonzero determinants
Gaussian elimination
gaussElimDeterminant :: forall a. (Eq a, Show a, Fractional a) => Matrix a -> a Source #
naive determinant algorithm (for testing purposes)
naiveDeterminant :: forall a. Num a => Matrix a -> a Source #