Copyright | (c) Esa Pulkkinen 2018 |
---|---|
License | LGPL |
Maintainer | esa.pulkkinen@iki.fi |
Safe Haskell | Safe |
Language | Haskell2010 |
For background material, see K. Chandrasekhara Rao: Functional Analysis.
See also: http://theoreticalminimum.com/courses/advanced-quantum-mechanics/2013/fall/lecture-1
Synopsis
- contract :: (Scalar (v a) ~ a, LinearTransform v Vector1 a) => (Dual :*: v) a -> (Vector1 :*: v) a -> Scalar (v a)
- dual_apply :: LinearTransform v Vector1 a => Dual (v a) -> v a -> a
- (*><) :: a ~ Scalar (v a) => Dual (v a) -> v a :-> Vector1 a
- x2_op :: (Num s, ConjugateSymmetric s) => Dual (Vector2 s)
- y2_op :: (Num s, ConjugateSymmetric s) => Dual (Vector2 s)
- (∇) :: VectorDerivative v d arr => d v -> arr v v
- (∇·) :: VectorDerivative v d arr => arr v v -> d v
- (·∇) :: (VectorDerivative v d arr, InnerProductSpace v) => v -> d v -> d v
- (∇×) :: VectorCrossProduct v arr => arr v v -> arr v v
- (∇·∇) :: VectorDerivative v d arr => d v -> d v
- (∇×∇×) :: VectorCrossProduct v arr => arr v v -> arr v v
- directional_derivative_endo :: (VectorDerivative v Dual LinearMap, InnerProductSpace v) => v -> Endo (Dual v)
- dconst :: (Scalar (f v) ~ v, Dualizable (f v) d, Linearizable LinearMap (:*:) f Vector1 v, Diagonalizable f v) => v -> d (f v)
- outer_vector :: (Linearizable LinearMap (:*:) f g w, DualNum f w, DualNum g w) => Dual (f w) -> g w -> f w :-> g w
- conjugate_transpose :: (Diagonalizable m a, Linearizable LinearMap (:*:) m m a, Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Diagonalizable n a, LinearIso n m a, Transposable m n a, ConjugateSymmetric (m a)) => (m a :-> n a) -> n a :-> m a
- (⊹) :: (Linearizable LinearMap (:*:) m m a, Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Diagonalizable m a, Diagonalizable n a, LinearIso n m a, Transposable m n a, ConjugateSymmetric (m a)) => (m a :-> n a) -> n a :-> m a
- is_hermitian :: (Eq (m (m a)), ConjugateSymmetric (m a), Linearizable LinearMap (:*:) m m a, Transposable m m a, Diagonalizable m a, LinearTransform m m a, Applicative m, Foldable m) => (m a :-> m a) -> Bool
- is_skew_hermitian :: (Num (Scalar (m a)), Eq (m (m a)), ConjugateSymmetric (m a), Applicative m, Linearizable LinearMap (:*:) m m a, VectorSpace (m a), Diagonalizable m a, LinearTransform m m a, Transposable m m a, Foldable m) => (m a :-> m a) -> Bool
- is_normal :: (Eq (m (m a)), Diagonalizable m a, LinearTransform m m a, Linearizable LinearMap (:*:) m m a, ConjugateSymmetric (m a)) => (m a :-> m a) -> Bool
- bravector :: (DualNum f v, InnerProductSpace (f v)) => f v -> Dual (f v)
- ketvector :: (DualNum f v, InnerProductSpace (f v)) => f v -> Dual (f v)
- kronecker :: (Eq i, Functor n, Functor m, Num c) => m i -> n i -> (m :*: n) c
- dual_bilinear :: DualNum f v => (f v -> f v -> v) -> f v -> Dual (f v)
- kronecker_dual :: (DualNum f a, Eq (f a), Num a) => f a -> Dual (f a)
- covector_kernel :: (DualNum f v, Num v, Eq v) => Dual (f v) -> f v -> Bool
- adjoint :: (f a :-> f a) -> Dual (f a) -> Dual (f a)
- scalar_map :: a ~ Scalar (f a) => (Vector1 a :-> Vector1 a) -> Dual (f a) -> Dual (f a)
- operator_map :: (Scalar (w a) ~ a, Dualizable (w a) Dual, Dualizable (v a) Dual, Diagonalizable w a, LinearTransform v Vector1 a, Linearizable LinearMap (:*:) w Vector1 a) => ((v a -> a) -> w a -> a) -> Dual (v a) -> Dual (w a)
- type DualNum f v = (LinearTransform f Vector1 v, Dualizable (f v) Dual, ConjugateSymmetric v, Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, VectorSpace (f v))
- dual_derivative :: (VectorDerivative v Dual LinearMap, VectorDerivative w Dual LinearMap, InnerProductSpace v, InnerProductSpace w) => (Dual v -> Dual w -> c) -> v -> w -> Dual v -> Dual w -> c
- dual_differential_outer_product :: (Dualizable (f v) Dual, LinearTransform f Vector1 v, ConjugateSymmetric v, Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, VectorDerivative (f v) Dual LinearMap, InnerProductSpace (f v)) => f v -> f v -> Dual (f v) -> Dual (f v) -> Dual (f v)
- dual_differential_dot_product :: (DualNum f v, VectorDerivative (f v) Dual LinearMap, InnerProductSpace (f v), StandardBasis (f v)) => f v -> f v -> Dual (f v) -> Dual (f v) -> Scalar (Dual (f v))
- norm_covector :: (Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, Dualizable (f v) d, NormedSpace (f v)) => d (f v)
- del2 :: (ConjugateSymmetric v, Closed v) => Vector2 (Dual (Vector2 v) -> Dual (Vector2 v))
- hessian2 :: (ConjugateSymmetric a, Closed a) => Dual (Vector2 a) -> (Vector2 :*: Vector2) (Dual (Vector2 a))
Documentation
contract :: (Scalar (v a) ~ a, LinearTransform v Vector1 a) => (Dual :*: v) a -> (Vector1 :*: v) a -> Scalar (v a) Source #
dual_apply :: LinearTransform v Vector1 a => Dual (v a) -> v a -> a Source #
(∇) :: VectorDerivative v d arr => d v -> arr v v Source #
unicode support for gradient. Use with parenthesis.
(∇·) :: VectorDerivative v d arr => arr v v -> d v Source #
unicode support for divergence. Use with parenthesis.
(·∇) :: (VectorDerivative v d arr, InnerProductSpace v) => v -> d v -> d v Source #
unicode support for directional derivative. Binary operator.
(∇×) :: VectorCrossProduct v arr => arr v v -> arr v v Source #
unicode support for curl. Use with parenthesis.
(∇·∇) :: VectorDerivative v d arr => d v -> d v Source #
unicode support for laplace. Use with parenthesis.
(∇×∇×) :: VectorCrossProduct v arr => arr v v -> arr v v Source #
directional_derivative_endo :: (VectorDerivative v Dual LinearMap, InnerProductSpace v) => v -> Endo (Dual v) Source #
dconst :: (Scalar (f v) ~ v, Dualizable (f v) d, Linearizable LinearMap (:*:) f Vector1 v, Diagonalizable f v) => v -> d (f v) Source #
outer_vector :: (Linearizable LinearMap (:*:) f g w, DualNum f w, DualNum g w) => Dual (f w) -> g w -> f w :-> g w Source #
conjugate_transpose :: (Diagonalizable m a, Linearizable LinearMap (:*:) m m a, Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Diagonalizable n a, LinearIso n m a, Transposable m n a, ConjugateSymmetric (m a)) => (m a :-> n a) -> n a :-> m a Source #
(⊹) :: (Linearizable LinearMap (:*:) m m a, Linearizable LinearMap (:*:) m n a, Linearizable LinearMap (:*:) n m a, Diagonalizable m a, Diagonalizable n a, LinearIso n m a, Transposable m n a, ConjugateSymmetric (m a)) => (m a :-> n a) -> n a :-> m a Source #
unicode alias (unicode HERMITIAN CONJUGATE MATRIX character)
is_hermitian :: (Eq (m (m a)), ConjugateSymmetric (m a), Linearizable LinearMap (:*:) m m a, Transposable m m a, Diagonalizable m a, LinearTransform m m a, Applicative m, Foldable m) => (m a :-> m a) -> Bool Source #
is_skew_hermitian :: (Num (Scalar (m a)), Eq (m (m a)), ConjugateSymmetric (m a), Applicative m, Linearizable LinearMap (:*:) m m a, VectorSpace (m a), Diagonalizable m a, LinearTransform m m a, Transposable m m a, Foldable m) => (m a :-> m a) -> Bool Source #
is_normal :: (Eq (m (m a)), Diagonalizable m a, LinearTransform m m a, Linearizable LinearMap (:*:) m m a, ConjugateSymmetric (m a)) => (m a :-> m a) -> Bool Source #
bravector :: (DualNum f v, InnerProductSpace (f v)) => f v -> Dual (f v) Source #
partial application of dot product on second argument (- %. v)
.
ketvector :: (DualNum f v, InnerProductSpace (f v)) => f v -> Dual (f v) Source #
partial application of dot product on first argument: (v %. -)
.
dual_bilinear :: DualNum f v => (f v -> f v -> v) -> f v -> Dual (f v) Source #
adjoint :: (f a :-> f a) -> Dual (f a) -> Dual (f a) Source #
would like to make adjoint
as instance of CoFunctor,
but the constraint prevents. Instead we declare LinearMap.
operator_map :: (Scalar (w a) ~ a, Dualizable (w a) Dual, Dualizable (v a) Dual, Diagonalizable w a, LinearTransform v Vector1 a, Linearizable LinearMap (:*:) w Vector1 a) => ((v a -> a) -> w a -> a) -> Dual (v a) -> Dual (w a) Source #
type DualNum f v = (LinearTransform f Vector1 v, Dualizable (f v) Dual, ConjugateSymmetric v, Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, VectorSpace (f v)) Source #
dual_derivative :: (VectorDerivative v Dual LinearMap, VectorDerivative w Dual LinearMap, InnerProductSpace v, InnerProductSpace w) => (Dual v -> Dual w -> c) -> v -> w -> Dual v -> Dual w -> c Source #
This computes \(DDM(\otimes,{\bar{x}},{\bar{y}}) = [({\bar{x}} \cdot \nabla) \times ({\bar{y}} \cdot \nabla)]\) where \(\times\) is the outer product for linear operators derived from product of dual spaces \(\otimes\). Notice \({\bar{x}} \cdot \nabla\) is normally called the directional derivative, so this is really a two dimensional version of directional derivative with some possibility to choose how two dual vectors are combined.
dual_differential_outer_product :: (Dualizable (f v) Dual, LinearTransform f Vector1 v, ConjugateSymmetric v, Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, VectorDerivative (f v) Dual LinearMap, InnerProductSpace (f v)) => f v -> f v -> Dual (f v) -> Dual (f v) -> Dual (f v) Source #
dual_differential_dot_product :: (DualNum f v, VectorDerivative (f v) Dual LinearMap, InnerProductSpace (f v), StandardBasis (f v)) => f v -> f v -> Dual (f v) -> Dual (f v) -> Scalar (Dual (f v)) Source #
norm_covector :: (Diagonalizable f v, Linearizable LinearMap (:*:) f Vector1 v, Dualizable (f v) d, NormedSpace (f v)) => d (f v) Source #
hessian2 :: (ConjugateSymmetric a, Closed a) => Dual (Vector2 a) -> (Vector2 :*: Vector2) (Dual (Vector2 a)) Source #