Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Math.Matrix.Matrix
Contents
Synopsis
- type family Transpose a
- transposeIso :: (Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Transposable n m a, Transposable m n a) => (m a :-> n a) :==: (n a :-> m a)
- vnegateIso :: VectorSpace v => v :==: v
- (!$!) :: (Linearizable LinearMap (:*:) f g b, Num b, Functor f, Functor g) => f (a -> b) -> g a -> f b :-> g b
- matrixBind :: Functor f => f a -> (a -> g b) -> (f :*: g) b
- matrix2d :: (Functor f, Functor g) => (a -> b -> c) -> f a -> g b -> (f :*: g) c
- matrix3d :: (Functor f, Functor g, Functor h) => (a -> b -> c -> d) -> f a -> g b -> h c -> (f :*: (g :*: h)) d
- matrix4d :: (Functor f, Functor g, Functor h, Functor i) => (a -> b -> c -> d -> e) -> f a -> g b -> h c -> i d -> (f :*: (g :*: (h :*: i))) e
- constantMatrix :: (Applicative m, Applicative n) => a -> (m :*: n) a
- applyCol :: Applicative f => (f :*: (->) a) b -> f a -> f b
- applyRow :: ((->) a :*: g) b -> a -> g b
- matrixA :: (ArrowApply arr, FunctorArrow f arr arr, FunctorArrow g arr arr) => arr (a, b) c -> arr (f a, g b) ((f :*: g) c)
- mod_linear_map :: (Num a, Linearizable LinearMap (:*:) f f a, Diagonalizable f a, Integral (f a)) => f a -> f a :-> f a
- modularExponentiation :: (SupportsMatrixMultiplication f f f (g b), Scalar (f (g b)) ~ g b, Linearizable LinearMap (:*:) f f (g b), Linearizable LinearMap (:*:) g g b, Diagonalizable g b, LinearTransform f f b, FunctorArrow f LinearMap LinearMap, Integral b) => (f (g b) :-> f (g b)) -> Integer -> b -> f (g b) :-> f (g b)
- isSymmetric :: (Eq (m (m a)), LinearTransform m m a, Linearizable LinearMap (:*:) m m a, Diagonalizable m a, Transposable m m a, Applicative m, Foldable m, Eq a) => (m a :-> m a) -> Bool
- applyVector :: (Num b, LinearTransform m m b, Linearizable LinearMap (:*:) m m b, Transposable m m b, Diagonalizable m b) => m (a -> b) -> m a -> m b
- applyColumns :: (Functor n, Functor m, Applicative f) => (m :*: f) (a -> b) -> (n :*: f) a -> (m :*: n) (f b)
- matrixAssoc :: Functor f => ((f :*: g) :*: h) a -> (f :*: (g :*: h)) a
- matrixUnassoc :: Functor f => (f :*: (g :*: h)) a -> ((f :*: g) :*: h) a
- matrixLeftId :: (I :*: f) a -> f a
- matrixRightId :: Functor f => (f :*: I) a -> f a
- (!*!) :: (Functor f, Functor g, Num a) => g a -> f a -> (g :*: f) a
- (<!!>) :: (Ix i, Ix j) => (Array i :*: Array j) a -> (i, j) -> a
- projectDown :: (Functor (m \\\ m'), ProjectionSpace m m', ProjectionSpace n Vector1) => (m :*: n) a -> (m \\\ m') a
- projectRight :: (ProjectionSpace m Vector1, ProjectionSpace n n') => (m :*: n) a -> (n \\\ n') a
- projectDiagonal :: (ProjectionSpace m m', ProjectionSpace n n') => (m :*: n) a -> (m' :*: (n \\\ n')) a
- matrixCommutator :: (VectorSpace ((f :*: f) a), InnerProductSpaceFunctor f a, ConjugateSymmetric a, Transposable f f a, Num a) => (f :*: f) a -> (f :*: f) a -> (f :*: f) a
- matrixAnticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, InnerProductSpaceFunctor g a, ConjugateSymmetric a, Transposable g g a, VectorSpace ((g :*: g) a), Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a
- normalizedAnticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpaceFunctor g a, ConjugateSymmetric a, Transposable g g a, Num a, VectorSpace ((g :*: g) a)) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a
- commute :: forall {f :: Type -> Type} {b}. (Scalar (f b) ~ b, Fractional (Scalar ((f :*: f) b)), InnerProductSpaceFunctor f b, ConjugateSymmetric b, Transposable f f b, VectorSpace ((f :*: f) b), Num b) => Complex ((f :*: f) b) -> Complex ((f :*: f) b) -> ((f :*: f) :*: (f :*: f)) (Complex b)
- bind_diagonal :: Monad m => (m :*: m) a -> (a -> m b) -> m b
- pairMatrix :: (Functor f, Functor g) => f a -> g b -> (f :*: g) (a, b)
- (!+!) :: (Functor f, Functor g, Num a) => g a -> f a -> (g :*: f) a
- cofunctorInverseImage :: (Functor f, CoFunctor g) => (a -> b) -> (g :*: f) b -> (g :*: f) a
- cofunctorMap :: (CoFunctor f, CoFunctor g) => (a -> b) -> (g :*: f) a -> (g :*: f) b
- inTranspose :: (Monad g, Indexable f b, Integral b) => (f :*: g) a -> (a -> (g :*: f) b) -> (f :*: g) b
- fmap_split :: (SplittableVector m n, AppendableVector m' n') => (m a -> m' a') -> (n a -> n' a') -> (m :+: n) a -> (m' :+: n') a'
- split_matrix :: (SplittableVector m n, SplittableVector f f', Functor (f :+: f'), Functor (m :+: n)) => ((f :+: f') :*: (m :+: n)) a -> (((f :*: m) a, (f :*: n) a), ((f' :*: m) a, (f' :*: n) a))
- append_matrix :: (AppendableVector m' n', AppendableVector m n) => (m :*: m') a -> (m :*: n') a -> (n :*: m') a -> (n :*: n') a -> ((m :+: n) :*: (m' :+: n')) a
- matrix_iso :: f (g a) :==: (f :*: g) a
- matrix_size :: (CoordinateSpace (g (f a)), CoordinateSpace (f (g a)), Transposable f g a) => (f :*: g) a -> (Int, Int)
- data Strassen_Split f g a where
- Strassen_Two :: (Vector2 :*: Vector2) a -> Strassen_Split Vector1 Vector1 a
- Strassen_PowerOfTwo :: Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_plus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_minus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a
- strassen_matrix_multiply :: (ConjugateSymmetric a, Num a) => Strassen_Split f g a -> Strassen_Split g h a -> Strassen_Split f h a
Documentation
transposeIso :: (Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Transposable n m a, Transposable m n a) => (m a :-> n a) :==: (n a :-> m a) Source #
vnegateIso :: VectorSpace v => v :==: v Source #
(!$!) :: (Linearizable LinearMap (:*:) f g b, Num b, Functor f, Functor g) => f (a -> b) -> g a -> f b :-> g b Source #
matrixBind :: Functor f => f a -> (a -> g b) -> (f :*: g) b Source #
matrix2d :: (Functor f, Functor g) => (a -> b -> c) -> f a -> g b -> (f :*: g) c Source #
this is same as Matrix.Interface.matrix
matrix3d :: (Functor f, Functor g, Functor h) => (a -> b -> c -> d) -> f a -> g b -> h c -> (f :*: (g :*: h)) d Source #
matrix4d :: (Functor f, Functor g, Functor h, Functor i) => (a -> b -> c -> d -> e) -> f a -> g b -> h c -> i d -> (f :*: (g :*: (h :*: i))) e Source #
constantMatrix :: (Applicative m, Applicative n) => a -> (m :*: n) a Source #
needs type annotation
applyCol :: Applicative f => (f :*: (->) a) b -> f a -> f b Source #
matrixA :: (ArrowApply arr, FunctorArrow f arr arr, FunctorArrow g arr arr) => arr (a, b) c -> arr (f a, g b) ((f :*: g) c) Source #
mod_linear_map :: (Num a, Linearizable LinearMap (:*:) f f a, Diagonalizable f a, Integral (f a)) => f a -> f a :-> f a Source #
https://en.wikipedia.org/wiki/Modular_exponentiation
modular_exponentiation m b c == m^b (mod c)
modularExponentiation :: (SupportsMatrixMultiplication f f f (g b), Scalar (f (g b)) ~ g b, Linearizable LinearMap (:*:) f f (g b), Linearizable LinearMap (:*:) g g b, Diagonalizable g b, LinearTransform f f b, FunctorArrow f LinearMap LinearMap, Integral b) => (f (g b) :-> f (g b)) -> Integer -> b -> f (g b) :-> f (g b) Source #
isSymmetric :: (Eq (m (m a)), LinearTransform m m a, Linearizable LinearMap (:*:) m m a, Diagonalizable m a, Transposable m m a, Applicative m, Foldable m, Eq a) => (m a :-> m a) -> Bool Source #
applyVector :: (Num b, LinearTransform m m b, Linearizable LinearMap (:*:) m m b, Transposable m m b, Diagonalizable m b) => m (a -> b) -> m a -> m b Source #
applyColumns :: (Functor n, Functor m, Applicative f) => (m :*: f) (a -> b) -> (n :*: f) a -> (m :*: n) (f b) Source #
matrixLeftId :: (I :*: f) a -> f a Source #
projectDown :: (Functor (m \\\ m'), ProjectionSpace m m', ProjectionSpace n Vector1) => (m :*: n) a -> (m \\\ m') a Source #
projectRight :: (ProjectionSpace m Vector1, ProjectionSpace n n') => (m :*: n) a -> (n \\\ n') a Source #
projectDiagonal :: (ProjectionSpace m m', ProjectionSpace n n') => (m :*: n) a -> (m' :*: (n \\\ n')) a Source #
matrixCommutator :: (VectorSpace ((f :*: f) a), InnerProductSpaceFunctor f a, ConjugateSymmetric a, Transposable f f a, Num a) => (f :*: f) a -> (f :*: f) a -> (f :*: f) a Source #
matrixAnticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, InnerProductSpaceFunctor g a, ConjugateSymmetric a, Transposable g g a, VectorSpace ((g :*: g) a), Num a) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a Source #
normalizedAnticommutator :: forall {g :: Type -> Type} {a}. (Scalar (g a) ~ a, Fractional (Scalar ((g :*: g) a)), InnerProductSpaceFunctor g a, ConjugateSymmetric a, Transposable g g a, Num a, VectorSpace ((g :*: g) a)) => (g :*: g) a -> (g :*: g) a -> (g :*: g) a Source #
commute :: forall {f :: Type -> Type} {b}. (Scalar (f b) ~ b, Fractional (Scalar ((f :*: f) b)), InnerProductSpaceFunctor f b, ConjugateSymmetric b, Transposable f f b, VectorSpace ((f :*: f) b), Num b) => Complex ((f :*: f) b) -> Complex ((f :*: f) b) -> ((f :*: f) :*: (f :*: f)) (Complex b) Source #
bind_diagonal :: Monad m => (m :*: m) a -> (a -> m b) -> m b Source #
cofunctorInverseImage :: (Functor f, CoFunctor g) => (a -> b) -> (g :*: f) b -> (g :*: f) a Source #
inTranspose :: (Monad g, Indexable f b, Integral b) => (f :*: g) a -> (a -> (g :*: f) b) -> (f :*: g) b Source #
fmap_split :: (SplittableVector m n, AppendableVector m' n') => (m a -> m' a') -> (n a -> n' a') -> (m :+: n) a -> (m' :+: n') a' Source #
split_matrix :: (SplittableVector m n, SplittableVector f f', Functor (f :+: f'), Functor (m :+: n)) => ((f :+: f') :*: (m :+: n)) a -> (((f :*: m) a, (f :*: n) a), ((f' :*: m) a, (f' :*: n) a)) Source #
append_matrix :: (AppendableVector m' n', AppendableVector m n) => (m :*: m') a -> (m :*: n') a -> (n :*: m') a -> (n :*: n') a -> ((m :+: n) :*: (m' :+: n')) a Source #
matrix_iso :: f (g a) :==: (f :*: g) a Source #
matrix_size :: (CoordinateSpace (g (f a)), CoordinateSpace (f (g a)), Transposable f g a) => (f :*: g) a -> (Int, Int) Source #
data Strassen_Split f g a where Source #
Constructors
Strassen_Two :: (Vector2 :*: Vector2) a -> Strassen_Split Vector1 Vector1 a | |
Strassen_PowerOfTwo :: Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a |
strassen_plus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a Source #
strassen_minus :: Num a => Strassen_Split f g a -> Strassen_Split f g a -> Strassen_Split f g a Source #
strassen_matrix_multiply :: (ConjugateSymmetric a, Num a) => Strassen_Split f g a -> Strassen_Split g h a -> Strassen_Split f h a Source #
Orphan instances
Ix i => PpShowF (Array i) Source # | |
Ix i => PpShowVerticalF (Array i) Source # | |
Methods ppfVertical :: PpShow a => Array i a -> Doc Source # | |
(MonadZip g, MonadZip f, forall b. Transposable f g b) => MonadZip (g :*: f) Source # | |
(Contravariant f, Functor g) => Contravariant (g :*: f) Source # | |
(MonadPlus g, MonadPlus f, forall b. Transposable f g b) => MonadPlus (g :*: f) Source # | |
(Comonad f, Comonad g, forall a. Transposable g f a, forall b. Transposable f g b, forall a. Diagonalizable f (f (g a)), forall a. LinearTransform g f (f (g a)), forall a. Diagonalizable g (g a), forall a. LinearTransform f g (g a)) => Comonad (f :*: g) Source # | See video by Bartosz Milewski ("Category theory II 7.2: Comonads categorically and examples") |
(Num a, ConjugateSymmetric a) => LieAlgebra ((Vector3 :*: Vector3) a) Source # | |
(Num a, ConjugateSymmetric a) => LieAlgebra ((Vector4 :*: Vector4) a) Source # | |
(Functor f, Functor g) => Builder ((g :*: f) a) Source # | |
(Eq a, Applicative f, Applicative g, Foldable f, Foldable g, Ord (f (g a))) => Ord ((f :*: g) a) Source # | |