You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Bernhard Grünewaldt (JIRA)" <ji...@apache.org> on 2008/12/26 14:09:44 UTC

[jira] Updated: (MATH-236) nth-root of complex numbers

     [ https://issues.apache.org/jira/browse/MATH-236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Bernhard Grünewaldt updated MATH-236:
-------------------------------------

        Fix Version/s:     (was: 1.3)
                       2.0
    Affects Version/s:     (was: 1.3)
                       2.0

Ok, I will add a unit Test and use atan2.
I will try to generate a patch.

> nth-root of complex numbers
> ---------------------------
>
>                 Key: MATH-236
>                 URL: https://issues.apache.org/jira/browse/MATH-236
>             Project: Commons Math
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Bernhard Grünewaldt
>             Fix For: 2.0
>
>
> Hello,
> I would like to have a simple methods that gives back all nth roots of a complex number.
> Below is the JavaCode for it. I have tested it and it works.
> What has to be done is the Exception Handling for NaN and Infinite etc.
> You can send me instructions what to do, or you can do it yourself.
> I really would like to contribute.
> {code:title=org.apache.commons.math.complex.Complex.java|borderStyle=solid}
>     /**
>      * Compute the angle phi of this complex number.
>      * Depending on in which quadrant this complex number lies  
>      * &pi or 2&pi is added. Where x=real and y=imaginary.
>      * 
>      * Here is a short table for it:
>      * <pre>
>      * <code>
>      * +----------+-------------+------------------+------------------+
>      * | quadrant |      I      |      II, III     |       IV         |
>      * +----------+-------------+------------------+------------------+
>      * | phi      | arctan(y/x) | arctan(y/x)+&pi  | arctan(y/x)+2&pi |
>      * +----------+-------------+------------------+------------------+
>      * </code>
>      * </pre>
>      *    
>      * @return the angle phi of this complex number
>      */
>     public double getPhi() {
>     	// the angle phi from arctan(y/x)
>         double phi = Math.atan(getImaginary()/getReal());
>         if (getReal() < 0) {
>         	// II and III-quadrant => phi + pi
>         	phi+=Math.PI;
>         } else if (getImaginary() <0){
>         	// IV-quadrant => phi + 2 * pi
>         	phi+=2*Math.PI;
>         }
>         return phi;
>     }
>     
>     /**
>      * Compute the n-th root of this complex number.
>      * <p>
>      * For a given n it implements the formula: <pre>
>      * <code> z_k = pow( abs , 1.0/n ) * (cos(phi + k * 2&pi) + i * (sin(phi + k * 2&pi)</code></pre></p>
>      * with <code>k=0,1,...,n-1</code> and <code>pow( abs , 1.0/n )</code> is the nth root of the absolute-value.
>      * <p>
>      * 
>      * @return all nth roots of this complex number as a Collection
>      */
>     public Collection<Complex> nthRoot(int n) {
>     	if (n <= 0) {
>     		throw new IllegalArgumentException("The value for the nth root has to be positive!");
>     	}
>         Collection<Complex> result = new ArrayList<Complex>();
>     	// nth root of abs
>     	double nthRootOfAbs = Math.pow( abs() , 1.0/n );
>     	// Compute nth roots of complex number
>         for (int k=0; k<n;k++) {
>         	// inner part
>         	double innerPart = (getPhi() +k*Math.PI) / n;
>         	double realPart = nthRootOfAbs *  Math.cos ( innerPart );
>         	double imaginaryPart = nthRootOfAbs *  Math.sin ( innerPart );
>         	result.add(createComplex(realPart, imaginaryPart));
>         }
>         return result;
>         
>     }
>     
>     
>     /**
>      * To String now returns human readable Form of this complex number
>      * 
>      * @return returns a String of the form "real + i * imaginary" 
>      */
>     public String toString() {
>     	return getReal() + " + i * " + getImaginary(); 
>     }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.