From d1dcad5765bcb166a8890d67da9f631632f43149 Mon Sep 17 00:00:00 2001 From: Justin Le Date: Wed, 1 Jun 2016 15:54:30 -0700 Subject: added matrix inverse to Domain --- packages/base/src/Numeric/LinearAlgebra/Static.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'packages/base/src/Numeric') diff --git a/packages/base/src/Numeric/LinearAlgebra/Static.hs b/packages/base/src/Numeric/LinearAlgebra/Static.hs index fafbf81..8175ff5 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Static.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Static.hs @@ -79,7 +79,7 @@ import Internal.Static import Control.Arrow((***)) import Text.Printf import Data.Type.Equality ((:~:)(Refl)) -import Data.Bifunctor (first) +import qualified Data.Bifunctor as BF (first) ud1 :: R n -> Vector ℝ ud1 (R (Dim v)) = v @@ -539,6 +539,7 @@ class Domain field vec mat | mat -> vec field, vec -> mat field, field -> mat ve invlndet :: forall n. KnownNat n => mat n n -> (mat n n, (field, field)) expm :: forall n. KnownNat n => mat n n -> mat n n sqrtm :: forall n. KnownNat n => mat n n -> mat n n + inv :: forall n. KnownNat n => mat n n -> mat n n instance Domain ℝ R L @@ -556,6 +557,7 @@ instance Domain ℝ R L invlndet = invlndetL expm = expmL sqrtm = sqrtmL + inv = invL instance Domain ℂ C M where @@ -572,6 +574,7 @@ instance Domain ℂ C M invlndet = invlndetM expm = expmM sqrtm = sqrtmM + inv = invM -------------------------------------------------------------------------------- @@ -627,7 +630,7 @@ detL :: KnownNat n => Sq n -> ℝ detL = LA.det . unwrap invlndetL :: KnownNat n => Sq n -> (L n n, (ℝ, ℝ)) -invlndetL = first mkL . LA.invlndet . unwrap +invlndetL = BF.first mkL . LA.invlndet . unwrap expmL :: KnownNat n => Sq n -> Sq n expmL = overMatL' LA.expm @@ -635,6 +638,9 @@ expmL = overMatL' LA.expm sqrtmL :: KnownNat n => Sq n -> Sq n sqrtmL = overMatL' LA.sqrtm +invL :: KnownNat n => Sq n -> Sq n +invL = overMatL' LA.inv + -------------------------------------------------------------------------------- mulC :: forall m k n. (KnownNat m, KnownNat k, KnownNat n) => M m k -> M k n -> M m n @@ -689,7 +695,7 @@ detM :: KnownNat n => M n n -> ℂ detM = LA.det . unwrap invlndetM :: KnownNat n => M n n -> (M n n, (ℂ, ℂ)) -invlndetM = first mkM . LA.invlndet . unwrap +invlndetM = BF.first mkM . LA.invlndet . unwrap expmM :: KnownNat n => M n n -> M n n expmM = overMatM' LA.expm @@ -697,6 +703,8 @@ expmM = overMatM' LA.expm sqrtmM :: KnownNat n => M n n -> M n n sqrtmM = overMatM' LA.sqrtm +invM :: KnownNat n => M n n -> M n n +invM = overMatM' LA.inv -------------------------------------------------------------------------------- -- cgit v1.2.3