manifolds-0.3.0.0: Data/Manifold/Types/Stiefel.hs
-- |
-- Module : Data.Manifold.Types.Stiefel
-- Copyright : (c) Justus Sagemüller 2015
-- License : GPL v3
--
-- Maintainer : (@) sagemueller $ geo.uni-koeln.de
-- Stability : experimental
-- Portability : portable
--
-- Stiefel manifolds are a generalisation of the concept of the 'UnitSphere'
-- in real vector spaces.
-- The /n/-th Stiefel manifold is the space of all possible configurations of
-- /n/ orthonormal vectors. In the case /n/ = 1, simply a single normalised vector,
-- i.e. a vector on the unit sphere.
--
-- Alternatively, the stiefel manifolds can be defined as quotient spaces under
-- scalings, and we prefer that definition since it doesn't require a notion of
-- unit length (which is only defined in inner-product spaces).
module Data.Manifold.Types.Stiefel where
import Data.Maybe
import qualified Data.Vector as Arr
import Data.Semigroup
import Data.VectorSpace
import Data.AffineSpace
import Math.LinearMap.Category
import Data.Manifold.Types.Primitive ((^), empty, embed, coEmbed)
import Data.Manifold.PseudoAffine
import qualified Prelude as Hask hiding(foldl, sum, sequence)
import qualified Control.Applicative as Hask
import qualified Control.Monad as Hask hiding(forM_, sequence)
import Control.Category.Constrained.Prelude hiding
((^), all, elem, sum, forM, Foldable(..), Traversable)
import Control.Arrow.Constrained
import Control.Monad.Constrained hiding (forM)
import Data.Foldable.Constrained
newtype Stiefel1 v = Stiefel1 { getStiefel1N :: DualVector v }