summaryrefslogtreecommitdiff
path: root/packages/base/src/Numeric
diff options
context:
space:
mode:
authorJustin Le <justin@jle.im>2015-12-22 22:15:53 -0800
committerJustin Le <justin@jle.im>2015-12-22 22:15:53 -0800
commite97a22d5bbdde5b96d9401a7abb25534a2d45bd1 (patch)
tree92398355b123ff7acf1789b6b06efd33892280b9 /packages/base/src/Numeric
parent35a7f3355611cd20994f36b43acbd7413e09f558 (diff)
NFData instances for various Static types, and mapping and outer product methods to Domain
Diffstat (limited to 'packages/base/src/Numeric')
-rw-r--r--packages/base/src/Numeric/LinearAlgebra/Static.hs27
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/base/src/Numeric/LinearAlgebra/Static.hs b/packages/base/src/Numeric/LinearAlgebra/Static.hs
index 843c727..4de4d7a 100644
--- a/packages/base/src/Numeric/LinearAlgebra/Static.hs
+++ b/packages/base/src/Numeric/LinearAlgebra/Static.hs
@@ -416,6 +416,9 @@ class Domain field vec mat | mat -> vec field, vec -> mat field, field -> mat ve
416 dot :: forall n . (KnownNat n) => vec n -> vec n -> field 416 dot :: forall n . (KnownNat n) => vec n -> vec n -> field
417 cross :: vec 3 -> vec 3 -> vec 3 417 cross :: vec 3 -> vec 3 -> vec 3
418 diagR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => field -> vec k -> mat m n 418 diagR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => field -> vec k -> mat m n
419 dvmap :: forall n. (field -> field) -> vec n -> vec n
420 dmmap :: forall n m. (field -> field) -> mat n m -> mat n m
421 outer :: forall n m. vec n -> vec m -> mat n m
419 422
420 423
421instance Domain ℝ R L 424instance Domain ℝ R L
@@ -425,6 +428,9 @@ instance Domain ℝ R L
425 dot = dotR 428 dot = dotR
426 cross = crossR 429 cross = crossR
427 diagR = diagRectR 430 diagR = diagRectR
431 dvmap = mapR
432 dmmap = mapL
433 outer = outerR
428 434
429instance Domain ℂ C M 435instance Domain ℂ C M
430 where 436 where
@@ -433,6 +439,9 @@ instance Domain ℂ C M
433 dot = dotC 439 dot = dotC
434 cross = crossC 440 cross = crossC
435 diagR = diagRectC 441 diagR = diagRectC
442 dvmap = mapC
443 dmmap = mapM'
444 outer = outerC
436 445
437-------------------------------------------------------------------------------- 446--------------------------------------------------------------------------------
438 447
@@ -472,6 +481,15 @@ crossR (extract -> x) (extract -> y) = vec3 z1 z2 z3
472 z2 = x!2*y!0-x!0*y!2 481 z2 = x!2*y!0-x!0*y!2
473 z3 = x!0*y!1-x!1*y!0 482 z3 = x!0*y!1-x!1*y!0
474 483
484outerR :: R n -> R m -> L n m
485outerR (R (Dim x)) (R (Dim y)) = mkL (LA.outer x y)
486
487mapR :: (ℝ -> ℝ) -> R n -> R n
488mapR f (R (Dim v)) = R (Dim (LA.cmap f v))
489
490mapM' :: (ℂ -> ℂ) -> M n m -> M n m
491mapM' f (M (Dim (Dim m))) = M (Dim (Dim (LA.cmap f m)))
492
475-------------------------------------------------------------------------------- 493--------------------------------------------------------------------------------
476 494
477mulC :: forall m k n. (KnownNat m, KnownNat k, KnownNat n) => M m k -> M k n -> M m n 495mulC :: forall m k n. (KnownNat m, KnownNat k, KnownNat n) => M m k -> M k n -> M m n
@@ -510,6 +528,15 @@ crossC (extract -> x) (extract -> y) = mkC (LA.fromList [z1, z2, z3])
510 z2 = x!2*y!0-x!0*y!2 528 z2 = x!2*y!0-x!0*y!2
511 z3 = x!0*y!1-x!1*y!0 529 z3 = x!0*y!1-x!1*y!0
512 530
531outerC :: C n -> C m -> M n m
532outerC (C (Dim x)) (C (Dim y)) = mkM (LA.outer x y)
533
534mapC :: (ℂ -> ℂ) -> C n -> C n
535mapC f (C (Dim v)) = C (Dim (LA.cmap f v))
536
537mapL :: (ℝ -> ℝ) -> L n m -> L n m
538mapL f (L (Dim (Dim m))) = L (Dim (Dim (LA.cmap f m)))
539
513-------------------------------------------------------------------------------- 540--------------------------------------------------------------------------------
514 541
515diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n 542diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n