About Us Home Contributors License Components Sandbox Math Overview Proposal Developers Guide Javadoc Tasks: To Do User Guide Contents Overview Statistics Data Generation Linear Algebra Numerical Analysis Special Functions Utilities Complex Numbers Distributions Project Documentation About Math Project Info Project Reports Development Process General Information Charter Volunteering Contributing Patches Releasing Components Jakarta Community Get Involved Mailing Lists Access CVS Repositories Commons Resources (Unofficial) Wiki Japanese Translation Korean Translation Related Apache Commons DB Commons XML Commons | ### 7 Complex Numbers #### 7.1 Overview The complex packages provides a complex number type as well as complex versions of common transcendental functions and complex number formatting. #### 7.2 Complex Numbers org.apache.commons.math.complex.Complex provides a complex number type that forms the basis for the complex functionality found in commons-math. To create a complex number, simply call the constructor passing in two floating-point arguments, the first being the real part of the complex number and the second being the imaginary part:
    Complex c = new Complex(1.0, 3.0); // 1 + 3i
The `Complex` class provides many unary and binary complex number operations. These operations provide the means to add, subtract, multiple and, divide complex numbers along with other complex number functions similar to the real number functions found in `java.math.BigDecimal`:
    Complex lhs = new Complex(1.0, 3.0);
    Complex rhs = new Complex(2.0, 5.0);

    Complex answer = lhs.add(rhs);       // add two complex numbers
            answer = lhs.subtract(rhs);  // subtract two complex numbers
            answer = lhs.abs();          // absolute value
            answer = lhs.conjugate(rhs); // complex conjugate
#### 7.3 Complex Transcendental Functions org.apache.commons.math.complex.ComplexMath provides implementations of serveral transcendental functions involving complex number arguments. These operations provide the means to compute the log, sine, tangent and, other complex values similar to the real number functions found in `java.lang.Math`:
    Complex first = new Complex(1.0, 3.0);
    Complex second = new Complex(2.0, 5.0);

    Complex answer = ComplexMath.log(first);          // natural logarithm.
            answer = ComplexMath.cos(first);          // cosine
            answer = ComplexMath.pow(first, second);  // first raised to the power of second
#### 7.4 Complex Formatting and Parsing `Complex` instances can be converted to and from strings using the org.apache.commons.math.complex.ComplexFormat class. `ComplexFormat` is a `java.text.Format` extension and, as such, is used like other formatting objects (e.g. `java.text.SimpleDateFormat`):
    ComplexFormat format = new ComplexFormat(); // default format
    Complex c = new Complex(1.1111, 2.2222);
    String s = format.format(c); // s contains "1.11 + 2.22i"
To customize the formatting output, one or two `java.text.NumberFormat` instances can be used to construct a `ComplexFormat`. These number formats control the formatting of the real and imaginary values of the complex number:
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMinimumFractionDigits(3);
    nf.setMaximumFractionDigits(3);

    // create complex format with custom number format
    // when one number format is used, both real and
    // imaginary parts are formatted the same
    ComplexFormat cf = new ComplexFormat(nf);
    Complex c = new Complex(1.11, 2.2222);
    String s = format.format(c); // s contains "1.110 + 2.222i"

    NumberFormat nf2 = NumberFormat.getInstance();
    nf.setMinimumFractionDigits(1);
    nf.setMaximumFractionDigits(1);

    // create complex format with custom number formats
    cf = new ComplexFormat(nf, nf2);
    s = format.format(c); // s contains "1.110 + 2.2i"
Another formatting customization provided by `ComplexFormat` is the text used for the imaginary designation. By default, the imaginary notation is "i" but, it can be manipulated using the `setImaginaryCharacter` method. Formatting inverse operation, parsing, can also be performed by `ComplexFormat`. Parse a complex number from a string, simply call the `parse` method:
    ComplexFormat cf = new ComplexFormat();
    Complex c = cf.parse("1.110 + 2.222i");