0votos

Determinante de Matriz NxN en Haskell

por AverageUser hace 2 meses

Ni cerca de ser eficiente, pero bueno ... es corta. Y es básicamente una implementación recursiva del típico método para calcularlas a mano.

Algoritmo que resuelva una determinante de una matriz de NxN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
getIn :: Num a => (Int, Int) -> [[a]] -> a 
getIn (x,y) mat = (mat!!y)!!x 
 
erase :: Num a => (Int, Int) -> [[a]] -> [[a]] 
erase (x,y) = map nox . noy 
   where nox xs = map fst $ filter (\(_, k) -> k /= x) (zip xs [0..]) 
         noy xs = map fst $ filter (\(_, k) -> k /= y) (zip xs [0..]) 
 
det :: Num a => [[a]] -> a 
det [x] = head x 
det xs  = sum [if c then (getIn coor xs)            * (det (erase coor xs)) 
                    else (negate $ getIn coor xs)   * (det (erase coor xs)) 
               | (coor, c) <- top] 
   where top = zip (zip [0..(length xs)-1] (repeat 0)) (cycle [True, False]) 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.