Package edu.sc.seis.TauP
Class Complex
- java.lang.Object
-
- edu.sc.seis.TauP.Complex
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable
public class Complex extends java.lang.Object implements java.io.Serializable, java.lang.CloneableThis 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 isplus,minus,timesorover.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 public Complex opEquals(Complex y) // this op= y public Complex opEquals(double y) // this op= y
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
-
-
Constructor Summary
Constructors Constructor Description Complex()Constructs a Complex equal to zero.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.Complex(Complex z)Constructs a Complex equal to the argument.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static doubleabs(Complex z)Returns the absolute value (modulus) of a Complex, |z|.static Complexacos(Complex z)Returns the inverse cosine (arc cosine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.static Complexacosh(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 doubleargument(Complex z)Returns the argument (phase) of a Complex, in radians, with a branch cut along the negative real axis.static Complexasin(Complex z)Returns the inverse sine (arc sine) of a Complex, with branch cuts outside the interval [-1,1] along the real axis.static Complexasinh(Complex z)Returns the inverse hyperbolic sine (arc sinh) of a Complex, with a branch cuts outside the interval [-i,i].Complexassign(double x)Copies the contents of a double into this Complex.Complexassign(Complex z)Copies the contents of a Complex into this Complex.static Complexatan(Complex z)Returns the inverse tangent (arc tangent) of a Complex, with branch cuts outside the interval [-i,i] along the imaginary axis.static Complexatanh(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 Complexconjugate(Complex z)Returns the complex conjugate of a Complex object.static Complexcos(Complex z)Returns the cosine of a Complex.static Complexcosh(Complex z)Returns the hyperbolic cosh of a Complex.booleanequals(Complex z)Compares with another Complex.booleanequals(java.lang.Object obj)Compares this object against the specified object.static Complexexp(Complex z)Returns the exponential of a Complex z, exp(z).inthashCode()Returns a hashcode for this Complex.static doubleimag(Complex z)Returns the imaginary part of a Complex object.booleanisInfinite()Tests if this is an infinite complex number.booleanisNaN()Tests if this is a complex Not-a-Number (NaN) value.static Complexlog(Complex z)Returns the logarithm of a Complex z, with a branch cut along the negative real axis.Complexminus(double y)Subtracts a double from this Complex and returns the difference, this-y.static Complexminus(double x, Complex y)Returns the difference of a double and a Complex object, x-y.Complexminus(Complex y)Returns the difference of this Complex object and another Complex object, this-y.static Complexminus(Complex x, double y)Returns the difference of a Complex object and a double, x-y.static Complexminus(Complex x, Complex y)Returns the difference of two Complex objects, x-y.ComplexminusEquals(double y)Subtracts a double from this Complex and returns the difference, this -= y.ComplexminusEquals(Complex y)Subtracts a Complex from this Complex and returns the difference, this -= y.ComplexminusReverse(double x)Returns the difference of this Complex object and a double, this-y.static Complexnegative(Complex z)Returns the negative of a Complex object, -z.Complexover(double y)Returns this Complex object divided by double, this/y.static Complexover(double x, Complex y)Returns a double divided by a Complex object, x/y.Complexover(Complex y)Returns this Complex object divided by another Complex object, this/y.static Complexover(Complex x, double y)Returns Complex object divided by a double, x/y.static Complexover(Complex x, Complex y)Returns Complex object divided by a Complex object, x/y.ComplexoverEquals(double y)Divides this Complex by a double and returns the result, this /= y.ComplexoverEquals(Complex y)Divides this Complex by a Complex and returns the result, this /= y.ComplexoverReverse(double x)Returns a double dividied by this Complex object, x/this.Complexplus(double y)Returns the sum of this Complex a double, this+y.static Complexplus(double x, Complex y)Returns the sum of a double and a Complex, x+y.Complexplus(Complex y)Returns the sum of this Complex and another Complex, this+y.static Complexplus(Complex x, double y)Returns the sum of a Complex and a double, x+y.static Complexplus(Complex x, Complex y)Returns the sum of two Complex objects, x+y.ComplexplusEquals(double y)Adds a double into this Complex and returns the sum, this += y.ComplexplusEquals(Complex y)Adds a Complex to this Complex and returns the sum, this += y.ComplexplusReverse(double x)Returns the sum of this Complex and a double, x+this.static Complexpow(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.static Complexpow(Complex x, Complex y)Returns the Complex x raised to the Complex y power.static doublereal(Complex z)Returns the real part of a Complex object.static Complexsin(Complex z)Returns the sine of a Complex.static Complexsinh(Complex z)Returns the hyperbolic sine of a Complex.static Complexsqrt(Complex z)Returns the square root of a Complex, with a branch cut along the negative real axis.static Complextan(Complex z)Returns the tangent of a Complex.static Complextanh(Complex z)Returns the hyperbolic tanh of a Complex.Complextimes(double y)Returns the product of this Complex object and a double, this*y.static Complextimes(double x, Complex y)Returns the product of a double and a Complex object, x*y.Complextimes(Complex y)Returns the product of this Complex object and another Complex object, this*y.static Complextimes(Complex x, double y)Returns the product of a Complex object and a double, x*y.static Complextimes(Complex x, Complex y)Returns the product of two Complex objects, x*y.ComplextimesEquals(double y)Multiplies this Complex by a double and returns the product, this *= y.ComplextimesEquals(Complex y)Multiplies this Complex object by another Complex and returns the product, this *= y.ComplextimesReverse(double x)Returns the product of a double and this Complex, x*this.java.lang.StringtoString()Returns a String representation for the specified Complex.static ComplexvalueOf(java.lang.String s)Parses a string into a Complex.
-
-
-
Field Detail
-
re
public double re
-
im
public double im
-
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.
-
NaN
public static final Complex NaN
-
-
Constructor Detail
-
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.
-
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(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()
Constructs a Complex equal to zero.
-
-
Method Detail
-
isNaN
public boolean isNaN()
Tests if this is a complex Not-a-Number (NaN) value.- Returns:
- True if either component of the Complex object is NaN; false, otherwise.
-
isInfinite
public boolean isInfinite()
Tests if this is an infinite complex number.- Returns:
- True if either component of the Complex object is NaN; false, otherwise.
-
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:
equalsin classjava.lang.Object- Parameters:
obj- The object to compare with.- Returns:
- True if the objects are the same; false otherwise.
-
hashCode
public int hashCode()
Returns a hashcode for this Complex.- Overrides:
hashCodein classjava.lang.Object- Returns:
- A hash code value for this object.
-
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.
-
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.
-
assign
public Complex assign(double x)
Copies the contents of a double into this Complex.- Parameters:
x- The real part.- Returns:
- The modified Complex number. The real part is set to x and the imaginary part is set to zero.
-
assign
public Complex assign(Complex z)
Copies the contents of a Complex into this Complex.- Parameters:
z- A Complex object.- Returns:
- The modified Complex number. If the argument is null then a NullPointerException is thrown.
-
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.
-
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.
-
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.
-
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(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 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.
-
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.
-
plusEquals
public Complex plusEquals(Complex y)
Adds a Complex to this Complex and returns the sum, this += y.- Parameters:
y- A Complex object.- Returns:
- This object augmented by the argument.
-
plusEquals
public Complex plusEquals(double y)
Adds a double into this Complex and returns the sum, this += y.- Parameters:
y- A double value.- Returns:
- This object augmented by the argument.
-
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.
-
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(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 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.
-
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.
-
minusEquals
public Complex minusEquals(Complex y)
Subtracts a Complex from this Complex and returns the difference, this -= y.- Parameters:
y- A Complex object.- Returns:
- This object less the input argument.
-
minusEquals
public Complex minusEquals(double y)
Subtracts a double from this Complex and returns the difference, this -= y.- Parameters:
y- A double value.- Returns:
- This object less the input argument.
-
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.
-
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(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 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.
-
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.
-
timesEquals
public Complex timesEquals(Complex y)
Multiplies this Complex object by another Complex and returns the product, this *= y.- Parameters:
y- A Complex object.- Returns:
- This object multiplied by the input argument.
-
timesEquals
public Complex timesEquals(double y)
Multiplies this Complex by a double and returns the product, this *= y.- Parameters:
y- A double value.- Returns:
- This object multiplied by the input argument.
-
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.
-
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(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 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.
-
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.
-
overEquals
public Complex overEquals(Complex y)
Divides this Complex by a Complex and returns the result, this /= y.- Parameters:
y- The denominator, a Complex object.- Returns:
- This object divided by the input argument.
-
overEquals
public Complex overEquals(double y)
Divides this Complex by a double and returns the result, this /= y.- Parameters:
y- The denominator, a double.- Returns:
- This object divided by the input argument.
-
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.
-
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].
-
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.
-
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.
-
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].
-
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.
-
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.
-
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.
-
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].
-
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].
-
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].
-
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.
-
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.
-
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.
-
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.
-
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].
-
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].
-
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].
-
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.
-
toString
public java.lang.String toString()
Returns a String representation for the specified Complex.- Overrides:
toStringin classjava.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.
-
-