Class Complex

    • Field Detail

      • I

        public static final Complex I
        a number representing 0.0 + 1.0i, the square root of -1
      • ZERO

        public static final Complex ZERO
        a number representing 0.0 + 0.0i
      • ONE

        public static final Complex ONE
        a number representing 1.0 + 0.0i
      • POSITIVE_INFINITY

        public static final Complex POSITIVE_INFINITY
        a number representing +∞ + ∞i
      • NEGATIVE_INFINITY

        public static final Complex NEGATIVE_INFINITY
        a number representing -∞ + -∞i
      • NaN

        public static final Complex NaN
        a number representing the complex Not-a-Number (NaN)
    • Constructor Detail

      • Complex

        public Complex​(double a,
                       double b)
        Construct a complex number from the real and imaginary parts.
        Parameters:
        a - the real part
        b - the imaginary part
      • Complex

        public Complex​(double a)
        Construct a complex number from a real number.
        Parameters:
        a - a real number
    • Method Detail

      • fromPolar

        public static Complex fromPolar​(double r,
                                        double theta)
        Factory method to construct a complex number from the polar form: (r, θ).
        Parameters:
        r - a radius
        theta - an angle
        Returns:
        a complex number equivalent to the polar form (r, θ)
      • real

        public double real()
        Get the real part of this complex number.
        Returns:
        the real part
      • imaginary

        public double imaginary()
        Get the imaginary part of this complex number.
        Returns:
        the imaginary part
      • isReal

        public static boolean isReal​(Complex z)
        Check if this complex number is a real number; i.e., the imaginary part is 0.
        Parameters:
        z - a complex number
        Returns:
        true if the imaginary part is 0
      • isNaN

        public static boolean isNaN​(Complex z)
        Check if a complex number is an NaN; i.e., either the real or the imaginary part is an NaN.
        Parameters:
        z - a complex number
        Returns:
        true if either the real or the imaginary part is a NaN
      • isInfinite

        public static boolean isInfinite​(Complex z)
        Check if a complex number is an infinity; i.e., either the real or the imaginary part is infinite, c.f., Double.isInfinite(), and the number is not a NaN.
        Parameters:
        z - a complex number
        Returns:
        true if either the real or the imaginary part is infinite
      • modulus

        public double modulus()
        Get the modulus. The modulus is the square root of itself multiplied by its conjugate, namely
        this.modulus() * this.modulus() = this.multiply(this.conjugate())
        Returns:
        the modulus
        See Also:
        Math.hypot(double, double)
      • arg

        public double arg()
        Get the θ of the complex number in polar representation.
        Returns:
        θ as in the polar form (r, θ)
      • toDouble

        public Double toDouble()
        Cast the complex number to a Double if it is a real number.
        Returns:
        the real part if this complex number is a real number
        Throws:
        IllegalArgumentException - if this complex number is not a real number
      • conjugate

        public Complex conjugate()
        Get the conjugate of the complex number, namely, (a - bi).
        Returns:
        the conjugate
      • floatValue

        public float floatValue()
        Specified by:
        floatValue in class Number
      • doubleValue

        public double doubleValue()
        Specified by:
        doubleValue in class Number
      • minus

        public Complex minus​(Complex that)
        Description copied from interface: AbelianGroup
        - : G × G → G

        The operation "-" is not in the definition of of an additive group but can be deduced. This function is provided for convenience purpose. It is equivalent to

        this.add(that.opposite())
        .
        Specified by:
        minus in interface AbelianGroup<Complex>
        Parameters:
        that - the object to be subtracted (subtrahend)
        Returns:
        this - that
      • opposite

        public Complex opposite()
        Description copied from interface: AbelianGroup
        For each a in G, there exists an element b in G such that a + b = b + a = 0. That is, it is the object such as
        this.add(this.opposite()) == this.ZERO
        Specified by:
        opposite in interface AbelianGroup<Complex>
        Returns:
        -this, the additive opposite
        See Also:
        Wikipedia: Additive inverse
      • divide

        public Complex divide​(Complex that)
        Compute the quotient of this complex number divided by another complex number. \[ \frac{a + bi}{c + di} = \frac{ac + bd + (bc - ad)i}{c^2 + d^2} \]

        ABSTRACT

        We develop a simple method for scaling to avoid overflow and harmful underflow in complex division. The method guarantees that no overflow will occur unless at least one component of the quotient must overflow, otherwise the normwise error in the computed result is at most a few units in the last place. Moreover, the scaling requires only four floating point multiplications and a small amount of integer arithmetic to compute the scale factor. Thus, on many modern CPUs, our method is both safer and faster than Smith's widely used algorithm.
        Specified by:
        divide in interface Field<Complex>
        Parameters:
        that - the denominator
        Returns:
        this / that
        Throws:
        ArithmeticException - if division by zero happens
      • multiply

        public Complex multiply​(Complex that)
        Compute the product of this complex number and that complex number.
        (a + bi)(c + di) = (ac - bd) + (ad + bc)i
        This implementation is more efficient by doing 1 less multiplication:
        (a + bi)(c + di) = (ac - bd) + ((a + b)(c + d) - ac - bd)i
        Specified by:
        multiply in interface Monoid<Complex>
        Parameters:
        that - the multiplicand
        Returns:
        this * that
      • ONE

        public Complex ONE()
        Get one - the number representing 1.0 + 0.0i.
        Specified by:
        ONE in interface Monoid<Complex>
        Returns:
        ONE
      • compare

        public int compare​(Number that,
                           double epsilon)
        Description copied from interface: NumberUtils.Comparable
        Compare this and that numbers up to a precision.
        Specified by:
        compare in interface NumberUtils.Comparable<Complex>
        Parameters:
        that - a Number. As a number can be represented in multiple ways, e.g., 0 = 0 + 0i, the implementation may need to check Object type.
        epsilon - a precision parameter: when a number |x| ≤ ε, it is considered 0
        Returns:
        0 if both numbers are close enough; +1 if this is bigger; -1 if that is bigger
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object