Class ORG.netlib.math.complex.Complex

java.lang.Object
   |
   +----ORG.netlib.math.complex.Complex

public class Complex
extends Object
implements Cloneable, Serializable

Version:
1.0 FINAL
ALM Fri 29-Aug-97

A Java class for performing complex number arithmetic to double precision.

Make yours a Java enabled browser and OS!

This applet has been adapted
from a Vector Visualization applet by Vladimir Sorokin.


Author:
Sandy Anderson, Priyantha Jayanetti

 Copyright (c) 1997,  ALMA Services.  All Rights Reserved.
 
Permission to use, copy, modify, and distribute this software and its documentation is hereby granted provided that this copyright notice appears in all copies and that all modifications are clearly marked.
THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
Last change: ALM 29 Aug 97 2:13 am

The latest version of this Complex class is available from the Netlib Repository.

Here's an example of the style the class permits:
         import  ORG.netlib.math.complex.Complex;
public class Test {
public boolean isInMandelbrot (Complex c, int maxIter) { Complex z= new Complex(0, 0);
for (int i= 0; i < maxIter; i++) { z= z.mul(z).add(c); if (z.abs() > 2) return false; }
return true; }
}

This class was developed by Sandy Anderson at the School of Electronic Engineering, Middlesex University, UK, and Priyantha Jayanetti at The Power Systems Program, the University of Maine, USA.

And many, many thanks to Mr. Daniel Hirsch, for his constant advice on the mathematics, his exasperating ability to uncover bugs blindfold, and for his persistent badgering over the exact wording of this documentation.

For instance, he starts to growl like a badger if you say "infinite set".

"Grrr...What's that mean? Countably infinite?"

You think for a while.

"Grrr..."

"Yes."

"Ah! Then you mean infinitely many."


Variable Index

 o AUTHOR
 o DATE
 o i
A constant representing i, the famous square root of -1.
 o REMARK
 o TWO_PI
Twice PI radians is the same thing as 360 degrees.
 o VERSION

Constructor Index

 o Complex()
Constructs a Complex representing the number zero.
 o Complex(Complex)
Constructs a separate new Complex from an existing Complex.
 o Complex(double)
Constructs a Complex representing a real number.
 o Complex(double, double)
Constructs a Complex from real and imaginary parts.

Method Index

 o abs()
Returns the magnitude of a Complex number.
 o acos()
Returns the principal arc cosine of a Complex number.
 o acosh()
Returns the principal inverse hyperbolic cosine of a Complex number.
 o add(Complex)
To perform z1 + z2, you write z1.add(z2) .
 o arg()
Returns the principal angle of a Complex number, in radians, measured counter-clockwise from the real axis.
 o asin()
Returns the principal arc sine of a Complex number.
 o asinh()
Returns the principal inverse hyperbolic sine of a Complex number.
 o atan()
Returns the principal arc tangent of a Complex number.
 o atanh()
Returns the principal inverse hyperbolic tangent of a Complex number.
 o cart(double, double)
Returns a Complex from real and imaginary parts.
 o conj()
Returns the Complex "conjugate".
 o cos()
Returns the cosine of a Complex number.
 o cosec()
Returns the cosecant of a Complex number.
 o cosh()
Returns the hyperbolic cosine of a Complex number.
 o cot()
Returns the cotangent of a Complex number.
 o div(Complex)
To perform z1 / z2, you write z1.div(z2) .
 o equals(Complex, double)
Decides if two Complex numbers are "sufficiently" alike to be considered equal.
 o exp()
Returns the number e "raised to" a Complex power.
 o im()
Extracts the imaginary part of a Complex as a double.
 o isInfinite()
Returns true if either the real or imaginary component of this Complex is an infinite value.
 o isNaN()
Returns true if either the real or imaginary component of this Complex is a Not-a-Number (NaN) value.
 o log()
Returns the principal natural logarithm of a Complex number.
 o main(String[])
Useful for checking up on the exact version.
 o mul(Complex)
To perform z1 * z2, you write z1.mul(z2) .
 o neg()
Returns the "negative" of a Complex number.
 o norm()
Returns the square of the "length" of a Complex number.
 o polar(double, double)
Returns a Complex from a size and direction.
 o pow(Complex)
Returns this Complex raised to the power of a Complex exponent.
 o pow(Complex, Complex)
Returns the Complex base raised to the power of the Complex exponent.
 o pow(Complex, double)
Returns the Complex base raised to the power of the exponent.
 o pow(double, Complex)
Returns the base raised to the power of the Complex exponent.
 o re()
Extracts the real part of a Complex as a double.
 o real(double)
Returns a Complex representing a real number.
 o scale(double)
Returns the Complex scaled by a real number.
 o sec()
Returns the secant of a Complex number.
 o sin()
Returns the sine of a Complex number.
 o sinh()
Returns the hyperbolic sine of a Complex number.
 o sqrt()
Returns a Complex representing one of the two square roots.
 o sub(Complex)
To perform z1 - z2, you write z1.sub(z2) .
 o tan()
Returns the tangent of a Complex number.
 o tanh()
Returns the hyperbolic tangent of a Complex number.
 o toString()
Converts a Complex into a String of the form (a + bi).

Variables

 o VERSION
  public final static String VERSION
 o DATE
  public final static String DATE
 o AUTHOR
  public final static String AUTHOR
 o REMARK
  public final static String REMARK
 o TWO_PI
  protected final static double TWO_PI
Twice PI radians is the same thing as 360 degrees.

 o i
  public final static Complex i
A constant representing i, the famous square root of -1.

The other square root of -1 is - i.

Constructors

 o Complex
  public Complex()
Constructs a Complex representing the number zero.

 o Complex
  public Complex(double re)
Constructs a Complex representing a real number.

Parameters:
re - The real number

See Also:
real
 o Complex
  public Complex(Complex z)
Constructs a separate new Complex from an existing Complex.

Parameters:
z - A Complex number

 o Complex
  public Complex(double re,
                 double im)
Constructs a Complex from real and imaginary parts.

Note:

Parameters:
re - Real part
im - Imaginary part

See Also:
cart, polar

Methods

 o main
  public static void main(String args[])
Useful for checking up on the exact version.

 o real
  public static Complex real(double real)
Returns a Complex representing a real number.

Parameters:
real - The real number

Returns:
Complex representation of the real

See Also:
re, cart
 o cart
  public static Complex cart(double re,
                             double im)
Returns a Complex from real and imaginary parts.

Parameters:
re - Real part
im - Imaginary part

Returns:
Complex from Cartesian coordinates

See Also:
re, im, polar, toString
 o polar
  public static Complex polar(double r,
                              double theta)
Returns a Complex from a size and direction.

Parameters:
r - Size
theta - Direction (in radians)

Returns:
Complex from Polar coordinates

See Also:
abs, arg, cart
 o pow
  public static Complex pow(Complex base,
                            double exponent)
Returns the Complex base raised to the power of the exponent.

Parameters:
base - The base "to raise"
exponent - The exponent "by which to raise"

Returns:
base "raised to the power of" exponent

See Also:
pow
 o pow
  public static Complex pow(double base,
                            Complex exponent)
Returns the base raised to the power of the Complex exponent.

Parameters:
base - The base "to raise"
exponent - The exponent "by which to raise"

Returns:
base "raised to the power of" exponent

See Also:
pow, exp
 o pow
  public static Complex pow(Complex base,
                            Complex exponent)
Returns the Complex base raised to the power of the Complex exponent.

Parameters:
base - The base "to raise"
exponent - The exponent "by which to raise"

Returns:
base "raised to the power of" exponent

See Also:
pow, pow
 o isInfinite
  public boolean isInfinite()
Returns true if either the real or imaginary component of this Complex is an infinite value.

Returns:
true if either component of the Complex object is infinite; false, otherwise.

 o isNaN
  public boolean isNaN()
Returns true if either the real or imaginary component of this Complex is a Not-a-Number (NaN) value.

Returns:
true if either component of the Complex object is NaN; false, otherwise.

 o equals
  public boolean equals(Complex z,
                        double tolerance)
Decides if two Complex numbers are "sufficiently" alike to be considered equal.

tolerance is the maximum magnitude of the difference between them before they are considered not equal.

Checking for equality between two real numbers on computer hardware is a tricky business. Try

    System.out.println((1.0/3.0 * 3.0));

and you'll see the nature of the problem! It's just as tricky with Complex numbers.

Realize that because of these complications, it's possible to find that the magnitude of one Complex number a is less than another, b, and yet a.equals(b, myTolerance) returns true. Be aware!

Parameters:
z - The Complex to compare with
tolerance - The tolerance for equality

Returns:
true, or false

 o re
  public double re()
Extracts the real part of a Complex as a double.

     re(x + i*y)  =  x
 

Returns:
The real part

See Also:
im, cart, real
 o im
  public double im()
Extracts the imaginary part of a Complex as a double.

     im(x + i*y)  =  y
 

Returns:
The imaginary part

See Also:
re, cart
 o norm
  public double norm()
Returns the square of the "length" of a Complex number.

     norm(x + i*y)  =  x*x + y*y
 

Always non-negative.

Returns:
The norm

See Also:
abs
 o abs
  public double abs()
Returns the magnitude of a Complex number.

     abs(z)  =  sqrt(norm(z))
 

In other words, it's Pythagorean distance from the origin (0 + 0i, or zero).

The magnitude is also referred to as the "modulus" or "length".

Always non-negative.

Returns:
The magnitude (or "length")

See Also:
arg, polar, norm
 o arg
  public double arg()
Returns the principal angle of a Complex number, in radians, measured counter-clockwise from the real axis. (Think of the reals as the x-axis, and the imaginaries as the y-axis.)

There are infinitely many solutions, besides the principal solution. If A is the principal solution of arg(z), the others are of the form:

     A + 2*k*PI
 

where k is any integer.

arg() always returns a double between -PI and +PI.

Note:

Domain Restrictions:

Returns:
Principal angle (in radians)

See Also:
abs, polar
 o neg
  public Complex neg()
Returns the "negative" of a Complex number.

     neg(a + i*b)  =  -a - i*b
 

The magnitude of the negative is the same, but the angle is flipped through PI (or 180 degrees).

Returns:
Negative of the Complex

See Also:
scale
 o conj
  public Complex conj()
Returns the Complex "conjugate".

     conj(x + i*y)  =  x - i*y
 

The conjugate appears "flipped" across the real axis.

Returns:
The Complex conjugate

 o scale
  public Complex scale(double scalar)
Returns the Complex scaled by a real number.

     scale((x + i*y), s)  =  (x*s + i*y*s)
 

Scaling by the real number 2.0, doubles the magnitude, but leaves the arg() unchanged. Scaling by -1.0 keeps the magnitude the same, but flips the arg() by PI (180 degrees).

Parameters:
scalar - A real number scale factor

Returns:
Complex scaled by a real number

See Also:
mul, div, neg
 o add
  public Complex add(Complex z)
To perform z1 + z2, you write z1.add(z2) .

     (a + i*b) + (c + i*d)  =  ((a+c) + i*(b+d))
 

 o sub
  public Complex sub(Complex z)
To perform z1 - z2, you write z1.sub(z2) .

     (a + i*b) - (c + i*d)  =  ((a-c) + i*(b-d))
 

 o mul
  public Complex mul(Complex z)
To perform z1 * z2, you write z1.mul(z2) .

     (a + i*b) * (c + i*d)  =  ( (a*c) - (b*d) + i*((a*d) + (b*c)) )
 

See Also:
scale
 o div
  public Complex div(Complex z)
To perform z1 / z2, you write z1.div(z2) .

     (a + i*b) / (c + i*d)  =  ( (a*c) + (b*d) + i*((b*c) - (a*d)) ) / norm(c + i*d)
 

Take care not to divide by zero!

Note:

Domain Restrictions:

See Also:
scale
 o sqrt
  public Complex sqrt()
Returns a Complex representing one of the two square roots.

     sqrt(z)  =  sqrt(abs(z)) * ( cos(arg(z)/2) + i * sin(arg(z)/2) )
 

For any complex number z, sqrt(z) will return the complex root whose arg is arg(z)/2.

Note:

Returns:
The square root whose arg is arg(z)/2.

See Also:
pow
 o pow
  public Complex pow(Complex exponent)
Returns this Complex raised to the power of a Complex exponent.

Parameters:
exponent - The exponent "by which to raise"

Returns:
this Complex "raised to the power of" the exponent

See Also:
pow
 o exp
  public Complex exp()
Returns the number e "raised to" a Complex power.

     exp(x + i*y)  =  exp(x) * ( cos(y) + i * sin(y) )
 

Note:

Returns:
e "raised to the power of" this Complex

See Also:
log, pow
 o log
  public Complex log()
Returns the principal natural logarithm of a Complex number.

     log(z)  =  log(abs(z)) + i * arg(z)
 

There are infinitely many solutions, besides the principal solution. If L is the principal solution of log(z), the others are of the form:

     L + (2*k*PI)*i
 

where k is any integer.

Returns:
Principal Complex natural logarithm

See Also:
exp
 o sin
  public Complex sin()
Returns the sine of a Complex number.

     sin(z)  =  ( exp(i*z) - exp(-i*z) ) / (2*i)
 

Returns:
The Complex sine

See Also:
asin, sinh, cosec, cos, tan
 o cos
  public Complex cos()
Returns the cosine of a Complex number.

     cos(z)  =  ( exp(i*z) + exp(-i*z) ) / 2
 

Returns:
The Complex cosine

See Also:
acos, cosh, sec, sin, tan
 o tan
  public Complex tan()
Returns the tangent of a Complex number.

     tan(z)  =  sin(z) / cos(z)
 

Domain Restrictions:

Returns:
The Complex tangent

See Also:
atan, tanh, cot, sin, cos
 o cosec
  public Complex cosec()
Returns the cosecant of a Complex number.

     cosec(z)  =  1 / sin(z)
 

Domain Restrictions:

Returns:
The Complex cosecant

See Also:
sin, sec, cot
 o sec
  public Complex sec()
Returns the secant of a Complex number.

     sec(z)  =  1 / cos(z)
 

Domain Restrictions:

Returns:
The Complex secant

See Also:
cos, cosec, cot
 o cot
  public Complex cot()
Returns the cotangent of a Complex number.

     cot(z)  =  1 / tan(z)
 

Domain Restrictions:

Returns:
The Complex cotangent

See Also:
tan, cosec, sec
 o sinh
  public Complex sinh()
Returns the hyperbolic sine of a Complex number.

     sinh(z)  =  ( exp(z) - exp(-z) ) / 2
 

Returns:
The Complex hyperbolic sine

See Also:
sin, asinh
 o cosh
  public Complex cosh()
Returns the hyperbolic cosine of a Complex number.

     cosh(z)  =  ( exp(z) + exp(-z) ) / 2
 

Returns:
The Complex hyperbolic cosine

See Also:
cos, acosh
 o tanh
  public Complex tanh()
Returns the hyperbolic tangent of a Complex number.

     tanh(z)  =  sinh(z) / cosh(z)
 

Returns:
The Complex hyperbolic tangent

See Also:
tan, atanh
 o asin
  public Complex asin()
Returns the principal arc sine of a Complex number.

     asin(z)  =  -i * log(i*z + sqrt(1 - z*z))
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of asin(z), the others are of the form:

     k*PI + (-1)k  * A
 

where k is any integer.

Returns:
Principal Complex arc sine

See Also:
sin, sinh
 o acos
  public Complex acos()
Returns the principal arc cosine of a Complex number.

     acos(z)  =  -i * log( z + i * sqrt(1 - z*z) )
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of acos(z), the others are of the form:

     2*k*PI +/- A
 

where k is any integer.

Returns:
Principal Complex arc cosine

See Also:
cos, cosh
 o atan
  public Complex atan()
Returns the principal arc tangent of a Complex number.

     atan(z)  =  -i/2 * log( (i-z)/(i+z) )
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of atan(z), the others are of the form:

     A + k*PI
 

where k is any integer.

Domain Restrictions:

Returns:
Principal Complex arc tangent

See Also:
tan, tanh
 o asinh
  public Complex asinh()
Returns the principal inverse hyperbolic sine of a Complex number.

     asinh(z)  =  log(z + sqrt(z*z + 1))
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of asinh(z), the others are of the form:

     k*PI*i + (-1)k  * A
 

where k is any integer.

Returns:
Principal Complex inverse hyperbolic sine

See Also:
sinh
 o acosh
  public Complex acosh()
Returns the principal inverse hyperbolic cosine of a Complex number.

     acosh(z)  =  log(z + sqrt(z*z - 1))
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of acosh(z), the others are of the form:

     2*k*PI*i +/- A
 

where k is any integer.

Returns:
Principal Complex inverse hyperbolic cosine

See Also:
cosh
 o atanh
  public Complex atanh()
Returns the principal inverse hyperbolic tangent of a Complex number.

     atanh(z)  =  1/2 * log( (1+z)/(1-z) )
 

There are infinitely many solutions, besides the principal solution. If A is the principal solution of atanh(z), the others are of the form:

     A + k*PI*i
 

where k is any integer.

Domain Restrictions:

Returns:
Principal Complex inverse hyperbolic tangent

See Also:
tanh
 o toString
  public String toString()
Converts a Complex into a String of the form (a + bi).

This enables the Complex to be easily printed. For example, if z was 2 - 5i, then

     System.out.println("z = " + z);
 
would print
     z = (2 - 5i)
 

Returns:
String containing the cartesian coordinate representation

Overrides:
toString in class Object
See Also:
cart