cyclotomic-0.4.4: A subfield of the complex numbers for exact calculation.

Copyright(c) Scott N. Walck 2012-2013
LicenseGPL-3 (see LICENSE)
MaintainerScott N. Walck <walck@lvc.edu>
Stabilityexperimental
Safe HaskellTrustworthy
LanguageHaskell98

Data.Complex.Cyclotomic

Description

The cyclotomic numbers are a subset of the complex numbers with the following properties:

  1. The cyclotomic numbers are represented exactly, enabling exact computations and equality comparisons.
  2. The cyclotomic numbers contain the Gaussian rationals (complex numbers of the form p + q i with p and q rational). As a consequence, the cyclotomic numbers are a dense subset of the complex numbers.
  3. The cyclotomic numbers contain the square roots of all rational numbers.
  4. The cyclotomic numbers form a field: they are closed under addition, subtraction, multiplication, and division.
  5. The cyclotomic numbers contain the sine and cosine of all rational multiples of pi.
  6. The cyclotomic numbers can be thought of as the rational field extended with nth roots of unity for arbitrarily large integers n.

Floating point numbers do not do well with equality comparison:

(sqrt 2 + sqrt 3)^2 == 5 + 2 * sqrt 6
 -> False

Data.Complex.Cyclotomic represents these numbers exactly, allowing equality comparison:

(sqrtRat 2 + sqrtRat 3)^2 == 5 + 2 * sqrtRat 6
 -> True

Cyclotomics can be exported as inexact complex numbers using the toComplex function:

e 6
 -> -e(3)^2
real $ e 6
 -> 1/2
imag $ e 6
 -> -1/2*e(12)^7 + 1/2*e(12)^11
imag (e 6) == sqrtRat 3 / 2
 -> True
toComplex $ e 6
 -> 0.5000000000000003 :+ 0.8660254037844384

The algorithms for cyclotomic numbers are adapted from code by Martin Schoenert and Thomas Breuer in the GAP project http://www.gap-system.org/ (in particular source files gap4r4/src/cyclotom.c and gap4r4/lib/cyclotom.gi).

Synopsis

Documentation

data Cyclotomic Source

A cyclotomic number.

Instances

Eq Cyclotomic Source 
Fractional Cyclotomic Source 
Num Cyclotomic Source

abs and signum are partial functions. A cyclotomic number is not guaranteed to have a cyclotomic absolute value. When defined, signum c is the complex number with magnitude 1 that has the same argument as c; signum c = c / abs c.

Show Cyclotomic Source 

i :: Cyclotomic Source

The square root of -1.

e :: Integer -> Cyclotomic Source

The primitive nth root of unity. For example, e(4) = i is the primitive 4th root of unity, and e(5) = exp(2*pi*i/5) is the primitive 5th root of unity. In general, e n = exp(2*pi*i/n).

sqrtInteger :: Integer -> Cyclotomic Source

The square root of an Integer.

sqrtRat :: Rational -> Cyclotomic Source

The square root of a Rational number.

sinDeg :: Rational -> Cyclotomic Source

Sine function with argument in degrees.

cosDeg :: Rational -> Cyclotomic Source

Cosine function with argument in degrees.

sinRev :: Rational -> Cyclotomic Source

Sine function with argument in revolutions.

cosRev :: Rational -> Cyclotomic Source

Cosine function with argument in revolutions.

gaussianRat :: Rational -> Rational -> Cyclotomic Source

Make a Gaussian rational; gaussianRat p q is the same as p + q * i.

polarRat Source

Arguments

:: Rational

magnitude

-> Rational

angle, in revolutions

-> Cyclotomic

cyclotomic number

A complex number in polar form, with rational magnitude r and rational angle s of the form r * exp(2*pi*i*s); polarRat r s is the same as r * e q ^ p, where s = p/q. This function is the same as polarRatRev.

polarRatDeg Source

Arguments

:: Rational

magnitude

-> Rational

angle, in degrees

-> Cyclotomic

cyclotomic number

A complex number in polar form, with rational magnitude and rational angle in degrees.

polarRatRev Source

Arguments

:: Rational

magnitude

-> Rational

angle, in revolutions

-> Cyclotomic

cyclotomic number

A complex number in polar form, with rational magnitude and rational angle in revolutions.

conj :: Cyclotomic -> Cyclotomic Source

Complex conjugate.

real :: Cyclotomic -> Cyclotomic Source

Real part of the cyclotomic number.

imag :: Cyclotomic -> Cyclotomic Source

Imaginary part of the cyclotomic number.

isReal :: Cyclotomic -> Bool Source

Is the cyclotomic a real number?

isRat :: Cyclotomic -> Bool Source

Is the cyclotomic a rational?

isGaussianRat :: Cyclotomic -> Bool Source

Is the cyclotomic a Gaussian rational?

toComplex :: Cyclotomic -> Complex Double Source

Export as an inexact complex number.

toReal :: Cyclotomic -> Maybe Double Source

Export as an inexact real number if possible.

toRat :: Cyclotomic -> Maybe Rational Source

Return an exact rational number if possible.

goldenRatio :: Cyclotomic Source

The golden ratio, (1 + √5)/2.

dft :: [Cyclotomic] -> [Cyclotomic] Source

Discrete Fourier transform, X_k = sum_{n=0}^{N-1} x_n cdot e^{-i 2 pi frac{k}{N} n}.

dftInv :: [Cyclotomic] -> [Cyclotomic] Source

Inverse discrete Fourier transform, x_n = frac{1}{N} sum_{k=0}^{N-1} X_k cdot e^{i 2 pi frac{k}{N} n}.

rootsQuadEq Source

Arguments

:: Rational

a

-> Rational

b

-> Rational

c

-> Maybe (Cyclotomic, Cyclotomic)

roots

Solutions to the quadratic equation a x^2 + b x + c = 0. Returns Nothing if a == 0.