numeric-prelude-0.4.2: An experimental alternative hierarchy of numeric type classes

Copyright (c) The University of Glasgow 2001 BSD-style (see the file libraries/base/LICENSE) numericprelude@henning-thielemann.de provisional portable (?) None Haskell98

Number.Complex

Description

Complex numbers.

Synopsis

# Cartesian form

data T a Source

Complex numbers are an algebraic type.

Instances

 Functor T C T C a b => C a (T b) The '(*>)' method can't replace `scale` because it requires the Algebra.Module constraint C a b => C a (T b) (C a, Sqr a b) => C a (T b) Sqr a b => Sqr a (T b) (Ord a, C a v) => C a (T v) (C a, C a v) => C a (T v) (Show v, C v, C v, C a v) => C a (T v) Eq a => Eq (T a) (Floating a, Eq a) => Fractional (T a) (Floating a, Eq a) => Num (T a) Read a => Read (T a) Show a => Show (T a) Arbitrary a => Arbitrary (T a) Storable a => Storable (T a) C a => C (T a) C a => C (T a) C a => C (T a) C a => C (T a) C a => C (T a) (Ord a, C a) => C (T a) (Ord a, C a, C a) => C (T a) (C a, C a, C a) => C (T a) C a => C (T a) (C a, C a, Power a) => C (T a) (C a, C a, C a, Power a) => C (T a)

fromReal :: C a => a -> T a Source

(+:) :: a -> a -> T a infix 6 Source

Construct a complex number from real and imaginary part.

(-:) :: C a => a -> a -> T a Source

Construct a complex number with negated imaginary part.

scale :: C a => a -> T a -> T a Source

Scale a complex number by a real number.

exp :: C a => T a -> T a Source

Exponential of a complex number with minimal type class constraints.

quarterLeft :: C a => T a -> T a Source

Turn the point one quarter to the right.

quarterRight :: C a => T a -> T a Source

Turn the point one quarter to the right.

# Polar form

fromPolar :: C a => a -> a -> T a Source

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

cis :: C a => a -> T a Source

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

signum :: (C a, C a) => T a -> T a Source

Scale a complex number to magnitude 1.

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.

signumNorm :: (C a, C a a, C a) => T a -> T a Source

toPolar :: (C a, C a) => T a -> (a, a) Source

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

magnitude :: C a => T a -> a Source

magnitudeSqr :: C a => T a -> a Source

phase :: (C a, C a) => T a -> a Source

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

# Conjugate

conjugate :: C a => T a -> T a Source

The conjugate of a complex number.

# Properties

propPolar :: (C a, C a) => T a -> Bool Source

# Auxiliary classes

class C a => Power a where Source

We like to build the Complex Algebraic instance on top of the Algebraic instance of the scalar type. This poses no problem to `sqrt`. However, `root` requires computing the complex argument which is a transcendent operation. In order to keep the type class dependencies clean for more sophisticated algebraic number types, we introduce a type class which actually performs the radix operation.

Methods

power :: Rational -> T a -> T a Source

Instances

 Power Double Power Float Power T

defltPow :: (C a, C a) => Rational -> T a -> T a Source