edu.northwestern.at.utils.math
Class Complex

java.lang.Object
  extended by edu.northwestern.at.utils.math.Complex
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable

public class Complex
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable

This class implements complex numbers. It provides the basic operations (addition, subtraction, multiplication, division) as well as a set of complex functions. The binary operations have the form, where op is plus, minus, times or over.

        public static Complex op(Complex x, Complex y)   // x op y
        public static Complex op(Complex x, double y)    // x op y
        public static Complex op(double x, Complex y)    // x op y
        public Complex op(Complex y)                     // this op y
        public Complex op(double y)                      // this op y
        public Complex opReverse(double x)               // x op this
 
The functions in this class follow the rules for complex arithmetic as defined C9x Annex G:"IEC 559-compatible complex arithmetic." The API is not the same, but handling of infinities, NaNs, and positive and negative zeros is intended to follow the same rules. This class depends on the standard java.lang.Math class following certain rules, as defined in the C9x Annex F, for the handling of infinities, NaNs, and positive and negative zeros. Sun's specification is that java.lang.Math should reproduce the results in the Sun's fdlibm C library. This library appears to follow the Annex F specification. At least on Windows, Sun's JDK 1.0 and 1.1 do NOT follow this specification. Sun's JDK 1.2(RC2) does follow the Annex F specification. Thesefore, this class will not give the expected results for edge cases with JDK 1.0 and 1.1.

See Also:
Serialized Form

Field Summary
(package private) static long serialVersionUID
          Serialization ID
static java.lang.String suffix
          String used in converting Complex to String.
 
Constructor Summary
Complex()
          Constructs a Complex equal to zero.
Complex(Complex z)
          Constructs a Complex equal to the argument.
Complex(double re)
          Constructs a Complex with a zero imaginary part.
Complex(double re, double im)
          Constructs a Complex with real and imaginary parts given by the input arguments.
 
Method Summary
static double abs(Complex z)
          Returns the absolute value (modulus) of a Complex, |z|.
static Complex acos(Complex z)
          Returns the inverse cosine (arc cosine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.
static Complex acosh(Complex z)
          Returns the inverse hyperbolic cosine (arc cosh) of a Complex, with a branch cut at values less than one along the real axis.
static double argument(Complex z)
          Returns the argument (phase) of a Complex, in radians, with a branch cut along the negative real axis.
static Complex asin(Complex z)
          Returns the inverse sine (arc sine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.
static Complex asinh(Complex z)
          Returns the inverse hyperbolic sine (arc sinh) of a Complex, with a branch cuts outside the interval [-i,i].
static Complex atan(Complex z)
          Returns the inverse tangent (arc tangent) of a Complex, with branch cuts outside the interval [-i,i] along the imaginary axis.
static Complex atanh(Complex z)
          Returns the inverse hyperbolic tangent (arc tanh) of a Complex, with a branch cuts outside the interval [-1,1] on the real axis.
static Complex conjugate(Complex z)
          Returns the complex conjugate of a Complex object.
static Complex cos(Complex z)
          Returns the cosine of a Complex.
static Complex cosh(Complex z)
          Returns the hyperbolic cosh of a Complex.
 boolean equals(Complex z)
          Compares with another Complex.
 boolean equals(java.lang.Object obj)
          Compares this object against the specified object.
static Complex exp(Complex z)
          Returns the exponential of a Complex z, exp(z).
 int hashCode()
          Returns a hashcode for this Complex.
 double imag()
          Returns the imaginary part of a Complex object.
static double imag(Complex z)
          Returns the imaginary part of a Complex object.
static Complex log(Complex z)
          Returns the logarithm of a Complex z, with a branch cut along the negative real axis.
 Complex minus(Complex y)
          Returns the difference of this Complex object and another Complex object, this-y.
static Complex minus(Complex x, Complex y)
          Returns the difference of two Complex objects, x-y.
static Complex minus(Complex x, double y)
          Returns the difference of a Complex object and a double, x-y.
 Complex minus(double y)
          Subtracts a double from this Complex and returns the difference, this-y.
static Complex minus(double x, Complex y)
          Returns the difference of a double and a Complex object, x-y.
 Complex minusReverse(double x)
          Returns the difference of this Complex object and a double, this-y.
static Complex negative(Complex z)
          Returns the negative of a Complex object, -z.
 Complex over(Complex y)
          Returns this Complex object divided by another Complex object, this/y.
static Complex over(Complex x, Complex y)
          Returns Complex object divided by a Complex object, x/y.
static Complex over(Complex x, double y)
          Returns Complex object divided by a double, x/y.
 Complex over(double y)
          Returns this Complex object divided by double, this/y.
static Complex over(double x, Complex y)
          Returns a double divided by a Complex object, x/y.
 Complex overReverse(double x)
          Returns a double dividied by this Complex object, x/this.
 Complex plus(Complex y)
          Returns the sum of this Complex and another Complex, this+y.
static Complex plus(Complex x, Complex y)
          Returns the sum of two Complex objects, x+y.
static Complex plus(Complex x, double y)
          Returns the sum of a Complex and a double, x+y.
 Complex plus(double y)
          Returns the sum of this Complex a double, this+y.
static Complex plus(double x, Complex y)
          Returns the sum of a double and a Complex, x+y.
 Complex plusReverse(double x)
          Returns the sum of this Complex and a double, x+this.
static Complex pow(Complex x, Complex y)
          Returns the Complex x raised to the Complex y power.
static Complex pow(Complex z, double x)
          Returns the Complex z raised to the x power, with a branch cut for the first parameter (z) along the negative real axis.
 double real()
          Returns the real part of a Complex object.
static double real(Complex z)
          Returns the real part of a Complex object.
static Complex sin(Complex z)
          Returns the sine of a Complex.
static Complex sinh(Complex z)
          Returns the hyperbolic sine of a Complex.
static Complex sqrt(Complex z)
          Returns the square root of a Complex, with a branch cut along the negative real axis.
static Complex tan(Complex z)
          Returns the tangent of a Complex.
static Complex tanh(Complex z)
          Returns the hyperbolic tanh of a Complex.
 Complex times(Complex y)
          Returns the product of this Complex object and another Complex object, this*y.
static Complex times(Complex x, Complex y)
          Returns the product of two Complex objects, x*y.
static Complex times(Complex x, double y)
          Returns the product of a Complex object and a double, x*y.
 Complex times(double y)
          Returns the product of this Complex object and a double, this*y.
static Complex times(double x, Complex y)
          Returns the product of a double and a Complex object, x*y.
 Complex timesReverse(double x)
          Returns the product of a double and this Complex, x*this.
 java.lang.String toString()
          Returns a String representation for the specified Complex.
static Complex valueOf(java.lang.String s)
          Parses a string into a Complex.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

serialVersionUID

static final long serialVersionUID
Serialization ID

See Also:
Constant Field Values

suffix

public static java.lang.String suffix
String used in converting Complex to String. Default is "i", but sometimes "j" is desired. Note that this is set for the class, not for a particular instance of a Complex.

Constructor Detail

Complex

public Complex()
Constructs a Complex equal to zero.


Complex

public Complex(double re)
Constructs a Complex with a zero imaginary part.

Parameters:
re - A double value equal to the real part of the Complex object.

Complex

public Complex(double re,
               double im)
Constructs a Complex with real and imaginary parts given by the input arguments.

Parameters:
re - A double value equal to the real part of the Complex object.
im - A double value equal to the imaginary part of the Complex object.

Complex

public Complex(Complex z)
Constructs a Complex equal to the argument.

Parameters:
z - A Complex object If z is null then a NullPointerException is thrown.
Method Detail

abs

public static double abs(Complex z)
Returns the absolute value (modulus) of a Complex, |z|.

Parameters:
z - A Complex object.
Returns:
A double value equal to the absolute value of the argument.

acos

public static Complex acos(Complex z)
Returns the inverse cosine (arc cosine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) cosine of the argument. The real part of the result is in the interval [0,pi].

acosh

public static Complex acosh(Complex z)
Returns the inverse hyperbolic cosine (arc cosh) of a Complex, with a branch cut at values less than one along the real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) hyperbolic cosine of the argument. The real part of the result is non-negative and its imaginary part is in the interval [-i*pi,i*pi].

argument

public static double argument(Complex z)
Returns the argument (phase) of a Complex, in radians, with a branch cut along the negative real axis.

Parameters:
z - A Complex object.
Returns:
A double value equal to the argument (or phase) of a Complex. It is in the interval [-pi,pi].

asin

public static Complex asin(Complex z)
Returns the inverse sine (arc sine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) sine of the argument. The real part of the result is in the interval [-pi/2,+pi/2].

asinh

public static Complex asinh(Complex z)
Returns the inverse hyperbolic sine (arc sinh) of a Complex, with a branch cuts outside the interval [-i,i].

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) hyperbolic sine of the argument. Its imaginary part is in the interval [-i*pi/2,i*pi/2].

atan

public static Complex atan(Complex z)
Returns the inverse tangent (arc tangent) of a Complex, with branch cuts outside the interval [-i,i] along the imaginary axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) tangent of the argument. Its real part is in the interval [-pi/2,pi/2].

atanh

public static Complex atanh(Complex z)
Returns the inverse hyperbolic tangent (arc tanh) of a Complex, with a branch cuts outside the interval [-1,1] on the real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to inverse (arc) hyperbolic tangent of the argument. The imaginary part of the result is in the interval [-i*pi/2,i*pi/2].

conjugate

public static Complex conjugate(Complex z)
Returns the complex conjugate of a Complex object.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to complex conjugate of z.

cos

public static Complex cos(Complex z)
Returns the cosine of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to cosine of the argument.

cosh

public static Complex cosh(Complex z)
Returns the hyperbolic cosh of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to the hyperbolic cosine of the argument.

equals

public boolean equals(Complex z)
Compares with another Complex.

Note: To be useful in hashtables this method considers two NaN double values to be equal. This is not according to IEEE specification.

Parameters:
z - A Complex object.
Returns:
True if the real and imaginary parts of this object are equal to their counterparts in the argument; false, otherwise.

equals

public boolean equals(java.lang.Object obj)
Compares this object against the specified object.

Note: To be useful in hashtables this method considers two NaN double values to be equal. This is not according to IEEE specification

Overrides:
equals in class java.lang.Object
Parameters:
obj - The object to compare with.
Returns:
True if the objects are the same; false otherwise.

exp

public static Complex exp(Complex z)
Returns the exponential of a Complex z, exp(z).

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to exponential of the argument.

hashCode

public int hashCode()
Returns a hashcode for this Complex.

Overrides:
hashCode in class java.lang.Object
Returns:
A hash code value for this object.

imag

public double imag()
Returns the imaginary part of a Complex object.

Returns:
The imaginary part of the current complex object.

imag

public static double imag(Complex z)
Returns the imaginary part of a Complex object.

Parameters:
z - A Complex object.
Returns:
The imaginary part of z.

log

public static Complex log(Complex z)
Returns the logarithm of a Complex z, with a branch cut along the negative real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to logarithm of the argument. Its imaginary part is in the interval [-i*pi,i*pi].

minus

public Complex minus(double y)
Subtracts a double from this Complex and returns the difference, this-y.

Parameters:
y - A double value.
Returns:
A newly constructed Complex initialized to this-y.

minus

public static Complex minus(double x,
                            Complex y)
Returns the difference of a double and a Complex object, x-y.

Parameters:
x - A double value.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x-y..

minus

public Complex minus(Complex y)
Returns the difference of this Complex object and another Complex object, this-y.

Parameters:
y - A Complex object.
Returns:
A newly constructed Complex initialized to this-y.

minus

public static Complex minus(Complex x,
                            double y)
Returns the difference of a Complex object and a double, x-y.

Parameters:
x - A Complex object.
y - A double value.
Returns:
A newly constructed Complex initialized to x-y.

minus

public static Complex minus(Complex x,
                            Complex y)
Returns the difference of two Complex objects, x-y.

Parameters:
x - A Complex object.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x-y.

minusReverse

public Complex minusReverse(double x)
Returns the difference of this Complex object and a double, this-y.

Parameters:
x - A double value.
Returns:
A newly constructed Complex initialized to x-this.

negative

public static Complex negative(Complex z)
Returns the negative of a Complex object, -z.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to the negative of the argument.

over

public Complex over(double y)
Returns this Complex object divided by double, this/y.

Parameters:
y - The denominator, a double.
Returns:
A newly constructed Complex initialized to x/y.

over

public static Complex over(double x,
                           Complex y)
Returns a double divided by a Complex object, x/y.

Parameters:
x - A double value.
y - The denominator, a Complex object.
Returns:
A newly constructed Complex initialized to x/y.

over

public Complex over(Complex y)
Returns this Complex object divided by another Complex object, this/y.

Parameters:
y - The denominator, a Complex object.
Returns:
A newly constructed Complex initialized to x/y.

over

public static Complex over(Complex x,
                           double y)
Returns Complex object divided by a double, x/y.

Parameters:
x - The numerator, a Complex object.
y - The denominator, a double.
Returns:
A newly constructed Complex initialized to x/y.

over

public static Complex over(Complex x,
                           Complex y)
Returns Complex object divided by a Complex object, x/y.

Parameters:
x - The numerator, a Complex object.
y - The denominator, a Complex object.
Returns:
A newly constructed Complex initialized to x/y.

overReverse

public Complex overReverse(double x)
Returns a double dividied by this Complex object, x/this.

Parameters:
x - The numerator, a double.
Returns:
A newly constructed Complex initialized to x/this.

plus

public Complex plus(double y)
Returns the sum of this Complex a double, this+y.

Parameters:
y - A double value.
Returns:
A newly constructed Complex initialized to this+y.

plus

public static Complex plus(double x,
                           Complex y)
Returns the sum of a double and a Complex, x+y.

Parameters:
x - A double value.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x+y.

plus

public Complex plus(Complex y)
Returns the sum of this Complex and another Complex, this+y.

Parameters:
y - A Complex object.
Returns:
A newly constructed Complex initialized to this+y.

plus

public static Complex plus(Complex x,
                           double y)
Returns the sum of a Complex and a double, x+y.

Parameters:
x - A Complex object.
y - A double value.
Returns:
A newly constructed Complex initialized to x+y.

plus

public static Complex plus(Complex x,
                           Complex y)
Returns the sum of two Complex objects, x+y.

Parameters:
x - A Complex object.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x+y.

plusReverse

public Complex plusReverse(double x)
Returns the sum of this Complex and a double, x+this.

Parameters:
x - A double value.
Returns:
A newly constructed Complex initialized to x+this.

pow

public static Complex pow(Complex z,
                          double x)
Returns the Complex z raised to the x power, with a branch cut for the first parameter (z) along the negative real axis.

Parameters:
z - A Complex object.
x - A double value.
Returns:
A newly constructed Complex initialized to z to the power x.

pow

public static Complex pow(Complex x,
                          Complex y)
Returns the Complex x raised to the Complex y power.

Parameters:
x - A Complex object.
y - A Complex object.
Returns:
A newly constructed Complex initialized to xy.

real

public double real()
Returns the real part of a Complex object.

Returns:
The real part of z.

real

public static double real(Complex z)
Returns the real part of a Complex object.

Parameters:
z - A Complex object.
Returns:
The real part of z.

sin

public static Complex sin(Complex z)
Returns the sine of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to sine of the argument.

sinh

public static Complex sinh(Complex z)
Returns the hyperbolic sine of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to hyperbolic sine of the argument.

sqrt

public static Complex sqrt(Complex z)
Returns the square root of a Complex, with a branch cut along the negative real axis.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to square root of z. Its real part is non-negative.

tan

public static Complex tan(Complex z)
Returns the tangent of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to tangent of the argument.

tanh

public static Complex tanh(Complex z)
Returns the hyperbolic tanh of a Complex.

Parameters:
z - A Complex object.
Returns:
A newly constructed Complex initialized to the hyperbolic tangent of the argument.

times

public Complex times(double y)
Returns the product of this Complex object and a double, this*y.

Parameters:
y - A double value.
Returns:
A newly constructed Complex initialized to this*y.

times

public static Complex times(double x,
                            Complex y)
Returns the product of a double and a Complex object, x*y.

Parameters:
x - A double value.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x*y.

times

public Complex times(Complex y)
Returns the product of this Complex object and another Complex object, this*y.

Parameters:
y - A Complex object.
Returns:
A newly constructed Complex initialized to this*y.

times

public static Complex times(Complex x,
                            double y)
Returns the product of a Complex object and a double, x*y.

Parameters:
x - A Complex object.
y - A double value.
Returns:
A newly constructed Complex initialized to x*y.

times

public static Complex times(Complex x,
                            Complex y)
Returns the product of two Complex objects, x*y.

Parameters:
x - A Complex object.
y - A Complex object.
Returns:
A newly constructed Complex initialized to x*y.

timesReverse

public Complex timesReverse(double x)
Returns the product of a double and this Complex, x*this.

Parameters:
x - A double value.
Returns:
A newly constructed Complex initialized to x*this.

toString

public java.lang.String toString()
Returns a String representation for the specified Complex.

Overrides:
toString in class java.lang.Object
Returns:
A String representation for this object.

valueOf

public static Complex valueOf(java.lang.String s)
                       throws java.lang.NumberFormatException
Parses a string into a Complex.

Parameters:
s - The string to be parsed.
Returns:
A newly constructed Complex initialized to the value represented by the string argument.
Throws:
java.lang.NumberFormatException - If the string does not contain a parsable Complex number.
java.lang.NullPointerException - If the input argument is null.