| Copyright | [2015..2020] The Accelerate Team |
|---|---|
| License | BSD3 |
| Maintainer | Trevor L. McDonell <trevor.mcdonell@gmail.com> |
| Stability | experimental |
| Portability | non-portable (GHC extensions) |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Array.Accelerate.Data.Complex
Description
Complex numbers, stored in the usual C-style array-of-struct representation, for easy interoperability.
Synopsis
- data Complex a = !a :+ !a
- pattern (::+) :: Elt a => Exp a -> Exp a -> Exp (Complex a)
- real :: Elt a => Exp (Complex a) -> Exp a
- imag :: Elt a => Exp (Complex a) -> Exp a
- mkPolar :: Floating a => Exp a -> Exp a -> Exp (Complex a)
- cis :: Floating a => Exp a -> Exp (Complex a)
- polar :: RealFloat a => Exp (Complex a) -> Exp (a, a)
- magnitude :: RealFloat a => Exp (Complex a) -> Exp a
- magnitude' :: RealFloat a => Exp (Complex a) -> Exp a
- phase :: RealFloat a => Exp (Complex a) -> Exp a
- conjugate :: Num a => Exp (Complex a) -> Exp (Complex a)
Rectangular from
A data type representing complex numbers.
You can read about complex numbers on wikipedia.
In haskell, complex numbers are represented as a :+ b which can be thought of
as representing \(a + bi\). For a complex number z, is a number with the abs zmagnitude of z,
but oriented in the positive real direction, whereas
has the signum zphase of z, but unit magnitude.
Apart from the loss of precision due to IEEE754 floating point numbers,
it holds that z == .abs z * signum z
Note that Complex's instances inherit the deficiencies from the type
parameter's. For example, Complex Float's Ord instance has similar
problems to Float's.
As can be seen in the examples, the Foldable
and Traversable instances traverse the real part first.
Examples
>>>(5.0 :+ 2.5) + 6.511.5 :+ 2.5
>>>abs (1.0 :+ 1.0) - sqrt 2.00.0 :+ 0.0
>>>abs (signum (4.0 :+ 3.0))1.0 :+ 0.0
>>>foldr (:) [] (1 :+ 2)[1,2]
>>>mapM print (1 :+ 2)1 2
Constructors
| !a :+ !a infix 6 | forms a complex number from its real and imaginary rectangular components. |
Instances
| Functor Complex Source # | Since: 1.2.0.0 | ||||
| MonadFix Complex | Since: base-4.15.0.0 | ||||
Defined in Data.Complex | |||||
| MonadZip Complex | Since: base-4.15.0.0 | ||||
| Foldable Complex | Since: base-4.9.0.0 | ||||
Defined in Data.Complex Methods fold :: Monoid m => Complex m -> m # foldMap :: Monoid m => (a -> m) -> Complex a -> m # foldMap' :: Monoid m => (a -> m) -> Complex a -> m # foldr :: (a -> b -> b) -> b -> Complex a -> b # foldr' :: (a -> b -> b) -> b -> Complex a -> b # foldl :: (b -> a -> b) -> b -> Complex a -> b # foldl' :: (b -> a -> b) -> b -> Complex a -> b # foldr1 :: (a -> a -> a) -> Complex a -> a # foldl1 :: (a -> a -> a) -> Complex a -> a # elem :: Eq a => a -> Complex a -> Bool # maximum :: Ord a => Complex a -> a # minimum :: Ord a => Complex a -> a # | |||||
| Foldable1 Complex | Since: base-4.18.0.0 | ||||
Defined in Data.Foldable1 Methods fold1 :: Semigroup m => Complex m -> m # foldMap1 :: Semigroup m => (a -> m) -> Complex a -> m # foldMap1' :: Semigroup m => (a -> m) -> Complex a -> m # toNonEmpty :: Complex a -> NonEmpty a # maximum :: Ord a => Complex a -> a # minimum :: Ord a => Complex a -> a # foldrMap1 :: (a -> b) -> (a -> b -> b) -> Complex a -> b # foldlMap1' :: (a -> b) -> (b -> a -> b) -> Complex a -> b # foldlMap1 :: (a -> b) -> (b -> a -> b) -> Complex a -> b # foldrMap1' :: (a -> b) -> (a -> b -> b) -> Complex a -> b # | |||||
| Eq1 Complex |
Since: base-4.16.0.0 | ||||
| Read1 Complex |
Since: base-4.16.0.0 | ||||
Defined in Data.Functor.Classes | |||||
| Show1 Complex |
Since: base-4.16.0.0 | ||||
| Traversable Complex | Since: base-4.9.0.0 | ||||
| Applicative Complex | Since: base-4.9.0.0 | ||||
| Functor Complex | Since: base-4.9.0.0 | ||||
| Monad Complex | Since: base-4.9.0.0 | ||||
| Hashable1 Complex | |||||
Defined in Data.Hashable.Class | |||||
| Generic1 Complex | |||||
Defined in Data.Complex Associated Types
| |||||
| (FromIntegral a b, Num b, Elt (Complex b)) => FromIntegral a (Complex b) Source # | |||||
Defined in Data.Array.Accelerate.Data.Complex | |||||
| (Lift Exp a, Elt (Plain a)) => Lift Exp (Complex a) Source # | |||||
| Elt a => Unlift Exp (Complex (Exp a)) Source # | |||||
| Unbox a => Vector Vector (Complex a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicUnsafeFreeze :: Mutable Vector s (Complex a) -> ST s (Vector (Complex a)) basicUnsafeThaw :: Vector (Complex a) -> ST s (Mutable Vector s (Complex a)) basicLength :: Vector (Complex a) -> Int basicUnsafeSlice :: Int -> Int -> Vector (Complex a) -> Vector (Complex a) basicUnsafeIndexM :: Vector (Complex a) -> Int -> Box (Complex a) basicUnsafeCopy :: Mutable Vector s (Complex a) -> Vector (Complex a) -> ST s () | |||||
| Unbox a => MVector MVector (Complex a) | |||||
Defined in Data.Vector.Unboxed.Base Methods basicLength :: MVector s (Complex a) -> Int basicUnsafeSlice :: Int -> Int -> MVector s (Complex a) -> MVector s (Complex a) basicOverlaps :: MVector s (Complex a) -> MVector s (Complex a) -> Bool basicUnsafeNew :: Int -> ST s (MVector s (Complex a)) basicInitialize :: MVector s (Complex a) -> ST s () basicUnsafeReplicate :: Int -> Complex a -> ST s (MVector s (Complex a)) basicUnsafeRead :: MVector s (Complex a) -> Int -> ST s (Complex a) basicUnsafeWrite :: MVector s (Complex a) -> Int -> Complex a -> ST s () basicClear :: MVector s (Complex a) -> ST s () basicSet :: MVector s (Complex a) -> Complex a -> ST s () basicUnsafeCopy :: MVector s (Complex a) -> MVector s (Complex a) -> ST s () basicUnsafeMove :: MVector s (Complex a) -> MVector s (Complex a) -> ST s () basicUnsafeGrow :: MVector s (Complex a) -> Int -> ST s (MVector s (Complex a)) | |||||
| Eq a => Eq (Complex a) Source # | |||||
| Elt a => Elt (Complex a) Source # | |||||
| Data a => Data (Complex a) | Since: base-2.1 | ||||
Defined in Data.Complex Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Complex a -> c (Complex a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Complex a) # toConstr :: Complex a -> Constr # dataTypeOf :: Complex a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Complex a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Complex a)) # gmapT :: (forall b. Data b => b -> b) -> Complex a -> Complex a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r # gmapQ :: (forall d. Data d => d -> u) -> Complex a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Complex a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) # | |||||
| Storable a => Storable (Complex a) | Since: base-4.8.0.0 | ||||
Defined in Data.Complex | |||||
| RealFloat a => Floating (Exp (Complex a)) Source # | |||||
Defined in Data.Array.Accelerate.Data.Complex Methods exp :: Exp (Complex a) -> Exp (Complex a) # log :: Exp (Complex a) -> Exp (Complex a) # sqrt :: Exp (Complex a) -> Exp (Complex a) # (**) :: Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) # logBase :: Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) # sin :: Exp (Complex a) -> Exp (Complex a) # cos :: Exp (Complex a) -> Exp (Complex a) # tan :: Exp (Complex a) -> Exp (Complex a) # asin :: Exp (Complex a) -> Exp (Complex a) # acos :: Exp (Complex a) -> Exp (Complex a) # atan :: Exp (Complex a) -> Exp (Complex a) # sinh :: Exp (Complex a) -> Exp (Complex a) # cosh :: Exp (Complex a) -> Exp (Complex a) # tanh :: Exp (Complex a) -> Exp (Complex a) # asinh :: Exp (Complex a) -> Exp (Complex a) # acosh :: Exp (Complex a) -> Exp (Complex a) # atanh :: Exp (Complex a) -> Exp (Complex a) # log1p :: Exp (Complex a) -> Exp (Complex a) # expm1 :: Exp (Complex a) -> Exp (Complex a) # | |||||
| RealFloat a => Floating (Complex a) | Since: base-2.1 | ||||
Defined in Data.Complex Methods exp :: Complex a -> Complex a # log :: Complex a -> Complex a # sqrt :: Complex a -> Complex a # (**) :: Complex a -> Complex a -> Complex a # logBase :: Complex a -> Complex a -> Complex a # sin :: Complex a -> Complex a # cos :: Complex a -> Complex a # tan :: Complex a -> Complex a # asin :: Complex a -> Complex a # acos :: Complex a -> Complex a # atan :: Complex a -> Complex a # sinh :: Complex a -> Complex a # cosh :: Complex a -> Complex a # tanh :: Complex a -> Complex a # asinh :: Complex a -> Complex a # acosh :: Complex a -> Complex a # atanh :: Complex a -> Complex a # log1p :: Complex a -> Complex a # expm1 :: Complex a -> Complex a # | |||||
| Generic (Complex a) | |||||
Defined in Data.Complex Associated Types
| |||||
| RealFloat a => Num (Exp (Complex a)) Source # | |||||
Defined in Data.Array.Accelerate.Data.Complex Methods (+) :: Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) # (-) :: Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) # (*) :: Exp (Complex a) -> Exp (Complex a) -> Exp (Complex a) # negate :: Exp (Complex a) -> Exp (Complex a) # abs :: Exp (Complex a) -> Exp (Complex a) # signum :: Exp (Complex a) -> Exp (Complex a) # fromInteger :: Integer -> Exp (Complex a) # | |||||
| RealFloat a => Num (Complex a) | Since: base-2.1 | ||||
| Read a => Read (Complex a) | Since: base-2.1 | ||||
| RealFloat a => Fractional (Exp (Complex a)) Source # | |||||
| RealFloat a => Fractional (Complex a) | Since: base-2.1 | ||||
| Show a => Show (Complex a) | Since: base-2.1 | ||||
| NFData a => NFData (Complex a) | |||||
Defined in Control.DeepSeq | |||||
| Eq a => Eq (Complex a) | Since: base-2.1 | ||||
| Hashable a => Hashable (Complex a) | |||||
Defined in Data.Hashable.Class | |||||
| Prim a => Prim (Complex a) | |||||
Defined in Data.Primitive.Types Methods sizeOfType# :: Proxy (Complex a) -> Int# alignmentOfType# :: Proxy (Complex a) -> Int# alignment# :: Complex a -> Int# indexByteArray# :: ByteArray# -> Int# -> Complex a readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, Complex a #) writeByteArray# :: MutableByteArray# s -> Int# -> Complex a -> State# s -> State# s setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Complex a -> State# s -> State# s indexOffAddr# :: Addr# -> Int# -> Complex a readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, Complex a #) writeOffAddr# :: Addr# -> Int# -> Complex a -> State# s -> State# s setOffAddr# :: Addr# -> Int# -> Int# -> Complex a -> State# s -> State# s | |||||
| Unbox a => Unbox (Complex a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
| Each (Complex a) (Complex b) a b | |||||
Defined in Lens.Micro.Internal | |||||
| type Rep1 Complex | Since: base-4.9.0.0 | ||||
Defined in Data.Complex type Rep1 Complex = D1 ('MetaData "Complex" "Data.Complex" "base" 'False) (C1 ('MetaCons ":+" ('InfixI 'NotAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1)) | |||||
| newtype MVector s (Complex a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
| type Plain (Complex a) Source # | |||||
Defined in Data.Array.Accelerate.Data.Complex | |||||
| type Rep (Complex a) | Since: base-4.9.0.0 | ||||
Defined in Data.Complex type Rep (Complex a) = D1 ('MetaData "Complex" "Data.Complex" "base" 'False) (C1 ('MetaCons ":+" ('InfixI 'NotAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a))) | |||||
| newtype Vector (Complex a) | |||||
Defined in Data.Vector.Unboxed.Base | |||||
Polar form
mkPolar :: Floating a => Exp a -> Exp a -> Exp (Complex a) Source #
Form a complex number from polar components of magnitude and phase.
magnitude :: RealFloat a => Exp (Complex a) -> Exp a Source #
The non-negative magnitude of a complex number
magnitude' :: RealFloat a => Exp (Complex a) -> Exp a Source #
As magnitude, but ignore floating point rounding and use the traditional
(simpler to evaluate) definition.
Since: 1.3.0.0
Conjugate
conjugate :: Num a => Exp (Complex a) -> Exp (Complex a) Source #
Return the complex conjugate of a complex number, defined as
conjugate(Z) = X - iY