diff options
Diffstat (limited to 'packages/base/src/Numeric')
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/Static.hs | 27 |
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 | ||
421 | instance Domain ℝ R L | 424 | instance 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 | ||
429 | instance Domain ℂ C M | 435 | instance 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 | ||
484 | outerR :: R n -> R m -> L n m | ||
485 | outerR (R (Dim x)) (R (Dim y)) = mkL (LA.outer x y) | ||
486 | |||
487 | mapR :: (ℝ -> ℝ) -> R n -> R n | ||
488 | mapR f (R (Dim v)) = R (Dim (LA.cmap f v)) | ||
489 | |||
490 | mapM' :: (ℂ -> ℂ) -> M n m -> M n m | ||
491 | mapM' f (M (Dim (Dim m))) = M (Dim (Dim (LA.cmap f m))) | ||
492 | |||
475 | -------------------------------------------------------------------------------- | 493 | -------------------------------------------------------------------------------- |
476 | 494 | ||
477 | mulC :: forall m k n. (KnownNat m, KnownNat k, KnownNat n) => M m k -> M k n -> M m n | 495 | mulC :: 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 | ||
531 | outerC :: C n -> C m -> M n m | ||
532 | outerC (C (Dim x)) (C (Dim y)) = mkM (LA.outer x y) | ||
533 | |||
534 | mapC :: (ℂ -> ℂ) -> C n -> C n | ||
535 | mapC f (C (Dim v)) = C (Dim (LA.cmap f v)) | ||
536 | |||
537 | mapL :: (ℝ -> ℝ) -> L n m -> L n m | ||
538 | mapL f (L (Dim (Dim m))) = L (Dim (Dim (LA.cmap f m))) | ||
539 | |||
513 | -------------------------------------------------------------------------------- | 540 | -------------------------------------------------------------------------------- |
514 | 541 | ||
515 | diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n | 542 | diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n |