-- | -- Module : Matriz_Toeplitz -- Description : Determinación de matrices de Toepliz -- Copyright : Exercitium (01-07-14) -- License : GPL-3 -- Maintainer : JoseA.Alonso@gmail.com -- -- Una matriz de Toeplitz es una matriz cuadrada que es constante a lo -- largo de las diagonales paralelas a la diagonal principal. Por -- ejemplo, -- -- > |2 5 1 6| |2 5 1 6| -- > |4 2 5 1| |4 2 6 1| -- > |7 4 2 5| |7 4 2 5| -- > |9 7 4 2| |9 7 4 2| -- -- la primera es una matriz de Toeplitz y la segunda no lo es. -- -- Las anteriores matrices se pueden definir por -- -- > ej1, ej2 :: Array (Int,Int) Int -- > ej1 = listArray ((1,1),(4,4)) [2,5,1,6,4,2,5,1,7,4,2,5,9,7,4,2] -- > ej2 = listArray ((1,1),(4,4)) [2,5,1,6,4,2,6,1,7,4,2,5,9,7,4,2] -- -- Definir la función -- -- > esToeplitz :: Eq a => Array (Int,Int) a -> Bool -- -- tal que __(esToeplitz p)__ se verifica si la matriz p es de Toeplitz. Por -- ejemplo, -- -- >>> esToeplitz ej1 -- True -- >>> esToeplitz ej2 -- False module Matriz_Toeplitz where import Data.Array -- | Ejemplos de matrices ej1, ej2 :: Array (Int,Int) Int ej1 = listArray ((1,1),(4,4)) [2,5,1,6,4,2,5,1,7,4,2,5,9,7,4,2] ej2 = listArray ((1,1),(4,4)) [2,5,1,6,4,2,6,1,7,4,2,5,9,7,4,2] -- | Definición esToeplitz :: Eq a => Array (Int,Int) a -> Bool esToeplitz p = m == n && and [p!(i,j) == p!(i+1,j+1) | i <- [1..n-1], j <- [1..n-1]] where (_,(m,n)) = bounds p