Data.Complex

Copyright (c) The University of Glasgow 2001
License BSD-style (see the file libraries/base/LICENSE)
Maintainer libraries@haskell.org
Stability provisional
Portability portable
Safe Haskell Trustworthy
Language Haskell2010

Description

Complex numbers.

Rectangular form

data Complex a Source

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, abs z is a number with the magnitude of z, but oriented in the positive real direction, whereas signum z has the phase 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 Eq 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
Expand
>>> (5.0 :+ 2.5) + 6.5
11.5 :+ 2.5
>>> abs (1.0 :+ 1.0) - sqrt 2.0
0.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
Instances details
Foldable1 Complex Source

Since: base-4.18.0.0

Instance details

Defined in Data.Foldable1

Methods

fold1 :: Semigroup m => Complex m -> m Source

foldMap1 :: Semigroup m => (a -> m) -> Complex a -> m Source

foldMap1' :: Semigroup m => (a -> m) -> Complex a -> m Source

toNonEmpty :: Complex a -> NonEmpty a Source

maximum :: Ord a => Complex a -> a Source

minimum :: Ord a => Complex a -> a Source

head :: Complex a -> a Source

last :: Complex a -> a Source

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Complex a -> b Source

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Complex a -> b Source

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Complex a -> b Source

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Complex a -> b Source

Eq1 Complex Source
>>> eq1 (1 :+ 2) (1 :+ 2)
True
>>> eq1 (1 :+ 2) (1 :+ 3)
False

Since: base-4.16.0.0

Instance details

Defined in Data.Functor.Classes

Methods

liftEq :: (a -> b -> Bool) -> Complex a -> Complex b -> Bool Source

Read1 Complex Source
>>> readPrec_to_S readPrec1 0 "(2 % 3) :+ (3 % 4)" :: [(Complex Rational, String)]
[(2 % 3 :+ 3 % 4,"")]

Since: base-4.16.0.0

Instance details

Defined in Data.Functor.Classes

Show1 Complex Source
>>> showsPrec1 0 (2 :+ 3) ""
"2 :+ 3"

Since: base-4.16.0.0

Instance details

Defined in Data.Functor.Classes

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Complex a -> ShowS Source

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Complex a] -> ShowS Source

Applicative Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

pure :: a -> Complex a Source

(<*>) :: Complex (a -> b) -> Complex a -> Complex b Source

liftA2 :: (a -> b -> c) -> Complex a -> Complex b -> Complex c Source

(*>) :: Complex a -> Complex b -> Complex b Source

(<*) :: Complex a -> Complex b -> Complex a Source

Functor Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

fmap :: (a -> b) -> Complex a -> Complex b Source

(<$) :: a -> Complex b -> Complex a Source

Monad Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

(>>=) :: Complex a -> (a -> Complex b) -> Complex b Source

(>>) :: Complex a -> Complex b -> Complex b Source

return :: a -> Complex a Source

MonadFix Complex Source

Since: base-4.15.0.0

Instance details

Defined in Data.Complex

Methods

mfix :: (a -> Complex a) -> Complex a Source

MonadZip Complex Source

Since: base-4.15.0.0

Instance details

Defined in Data.Complex

Methods

mzip :: Complex a -> Complex b -> Complex (a, b) Source

mzipWith :: (a -> b -> c) -> Complex a -> Complex b -> Complex c Source

munzip :: Complex (a, b) -> (Complex a, Complex b) Source

Foldable Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

fold :: Monoid m => Complex m -> m Source

foldMap :: Monoid m => (a -> m) -> Complex a -> m Source

foldMap' :: Monoid m => (a -> m) -> Complex a -> m Source

foldr :: (a -> b -> b) -> b -> Complex a -> b Source

foldr' :: (a -> b -> b) -> b -> Complex a -> b Source

foldl :: (b -> a -> b) -> b -> Complex a -> b Source

foldl' :: (b -> a -> b) -> b -> Complex a -> b Source

foldr1 :: (a -> a -> a) -> Complex a -> a Source

foldl1 :: (a -> a -> a) -> Complex a -> a Source

toList :: Complex a -> [a] Source

null :: Complex a -> Bool Source

length :: Complex a -> Int Source

elem :: Eq a => a -> Complex a -> Bool Source

maximum :: Ord a => Complex a -> a Source

minimum :: Ord a => Complex a -> a Source

sum :: Num a => Complex a -> a Source

product :: Num a => Complex a -> a Source

Traversable Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

traverse :: Applicative f => (a -> f b) -> Complex a -> f (Complex b) Source

sequenceA :: Applicative f => Complex (f a) -> f (Complex a) Source

mapM :: Monad m => (a -> m b) -> Complex a -> m (Complex b) Source

sequence :: Monad m => Complex (m a) -> m (Complex a) Source

Generic1 Complex Source
Instance details

Defined in Data.Complex

Associated Types

type Rep1 Complex

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

from1 :: Complex a -> Rep1 Complex a Source

to1 :: Rep1 Complex a -> Complex a Source

Data a => Data (Complex a) Source

Since: base-2.1

Instance details

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) Source

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Complex a) Source

toConstr :: Complex a -> Constr Source

dataTypeOf :: Complex a -> DataType Source

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Complex a)) Source

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Complex a)) Source

gmapT :: (forall b. Data b => b -> b) -> Complex a -> Complex a Source

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r Source

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r Source

gmapQ :: (forall d. Data d => d -> u) -> Complex a -> [u] Source

gmapQi :: Int -> (forall d. Data d => d -> u) -> Complex a -> u Source

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) Source

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) Source

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) Source

RealFloat a => Floating (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

Storable a => Storable (Complex a) Source

Since: base-4.8.0.0

Instance details

Defined in Data.Complex

Methods

sizeOf :: Complex a -> Int Source

alignment :: Complex a -> Int Source

peekElemOff :: Ptr (Complex a) -> Int -> IO (Complex a) Source

pokeElemOff :: Ptr (Complex a) -> Int -> Complex a -> IO () Source

peekByteOff :: Ptr b -> Int -> IO (Complex a) Source

pokeByteOff :: Ptr b -> Int -> Complex a -> IO () Source

peek :: Ptr (Complex a) -> IO (Complex a) Source

poke :: Ptr (Complex a) -> Complex a -> IO () Source

Generic (Complex a) Source
Instance details

Defined in Data.Complex

Associated Types

type Rep (Complex a)

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Methods

from :: Complex a -> Rep (Complex a) x Source

to :: Rep (Complex a) x -> Complex a Source

RealFloat a => Num (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

Read a => Read (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

RealFloat a => Fractional (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

Show a => Show (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

Eq a => Eq (Complex a) Source

Since: base-2.1

Instance details

Defined in Data.Complex

Methods

(==) :: Complex a -> Complex a -> Bool Source

(/=) :: Complex a -> Complex a -> Bool Source

type Rep1 Complex Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

type Rep (Complex a) Source

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

realPart :: Complex a -> a Source

Extracts the real part of a complex number.

Examples
Expand
>>> realPart (5.0 :+ 3.0)
5.0
>>> realPart ((5.0 :+ 3.0) * (2.0 :+ 3.0))
1.0

imagPart :: Complex a -> a Source

Extracts the imaginary part of a complex number.

Examples
Expand
>>> imagPart (5.0 :+ 3.0)
3.0
>>> imagPart ((5.0 :+ 3.0) * (2.0 :+ 3.0))
21.0

Polar form

mkPolar :: Floating a => a -> a -> Complex a Source

Form a complex number from polar components of magnitude and phase.

Examples
Expand
>>> mkPolar 1 (pi / 4)
0.7071067811865476 :+ 0.7071067811865475
>>> mkPolar 1 0
1.0 :+ 0.0

cis :: Floating a => a -> Complex a Source

cis t is a complex value with magnitude 1 and phase t (modulo 2*pi).

cis = mkPolar 1
Examples
Expand
>>> cis 0
1.0 :+ 0.0

The following examples are not perfectly zero due to IEEE 754

>>> cis pi
(-1.0) :+ 1.2246467991473532e-16
>>> cis (4 * pi) - cis (2 * pi)
0.0 :+ (-2.4492935982947064e-16)

polar :: RealFloat a => Complex a -> (a, a) Source

The function polar takes a complex number and returns a (magnitude, phase) pair in canonical form: the magnitude is non-negative, and the phase in the range (-pi, pi]; if the magnitude is zero, then so is the phase.

polar z = (magnitude z, phase z)
Examples
Expand
>>> polar (1.0 :+ 1.0)
(1.4142135623730951,0.7853981633974483)
>>> polar ((-1.0) :+ 0.0)
(1.0,3.141592653589793)
>>> polar (0.0 :+ 0.0)
(0.0,0.0)

magnitude :: RealFloat a => Complex a -> a Source

The non-negative magnitude of a complex number.

Examples
Expand
>>> magnitude (1.0 :+ 1.0)
1.4142135623730951
>>> magnitude (1.0 + 0.0)
1.0
>>> magnitude (0.0 :+ (-5.0))
5.0

phase :: RealFloat a => Complex a -> a Source

The phase of a complex number, in the range (-pi, pi]. If the magnitude is zero, then so is the phase.

Examples
Expand
>>> phase (0.5 :+ 0.5) / pi
0.25
>>> phase (0 :+ 4) / pi
0.5

Conjugate

conjugate :: Num a => Complex a -> Complex a Source

The conjugate of a complex number.

conjugate (conjugate x) = x
Examples
Expand
>>> conjugate (3.0 :+ 3.0)
3.0 :+ (-3.0)
>>> conjugate ((3.0 :+ 3.0) * (2.0 :+ 2.0))
0.0 :+ (-12.0)

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Complex.html