/* ComplexPolynomialTest.java created 2011-02-19
*
*/
package org.signalml.math.iirdesigner.math;
import org.apache.commons.math.complex.Complex;
import static org.signalml.math.iirdesigner.IIRDesignerAssert.*;
import org.junit.Test;
import org.signalml.math.iirdesigner.math.ComplexPolynomial;
/**
* This class performs unit tests on {@link ComplexPolynomial}.
*
* @author Piotr Szachewicz
*/
public class ComplexPolynomialTest {
/**
* Test method for {@link ComplexPolynomial#getDegree() }.
*/
@Test
public void testGetDegree() {
//test1
Complex[] coefficients = new Complex[] {new Complex(1.0, 0.5), new Complex(0.0, 3.0)};
ComplexPolynomial polynomial = new ComplexPolynomial(coefficients);
assertEquals(1, polynomial.getDegree());
//test2
coefficients = new Complex[] {new Complex(0.0, 3.0)};
polynomial = new ComplexPolynomial(coefficients);
assertEquals(0, polynomial.getDegree());
//test3
coefficients = new Complex[] {new Complex(0.0, 3.0), new Complex(1.0, 3.0), new Complex(4.0, 3.0), new Complex(2.0, 2.0)};
polynomial = new ComplexPolynomial(coefficients);
assertEquals(3, polynomial.getDegree());
}
/**
* Test method for {@link ComplexPolynomial#multiply(org.signalml.math.iirdesigner.math.ComplexPolynomial) }.
*/
@Test
public void testMultiplyPolynomialsReal() {
ComplexPolynomial poly1 = new ComplexPolynomial(new Complex[] {new Complex(1.0, 0.0), new Complex(2.0, 0.0), new Complex(3.0, 0.0)});
ComplexPolynomial poly2 = new ComplexPolynomial(new Complex[] {new Complex(4.0, 0.0), new Complex(3.0, 0.0), new Complex(3.0, 0.0)});
ComplexPolynomial result = poly1.multiply(poly2);
Complex[] coefficients = result.getCoefficients();
Complex[] expected = new Complex[] {new Complex(4.0, 0.0), new Complex(11.0, 0.0), new Complex(21.0, 0.0),
new Complex(15.0, 0.0), new Complex(9.0, 0.0)
};
for (int i = 0; i < coefficients.length; i++)
assertEquals(expected[i], coefficients[i]);
}
/**
* Test method for {@link ComplexPolynomial#multiply(org.signalml.math.iirdesigner.math.ComplexPolynomial) }.
*/
@Test
public void testMultiplyPolynomialsComplex() {
ComplexPolynomial poly1 = new ComplexPolynomial(new Complex[] {new Complex(1.0, 2.0), new Complex(3.0, 1.0), new Complex(0.5, 1.0)});
ComplexPolynomial poly2 = new ComplexPolynomial(new Complex[] {new Complex(5.0, 1.0), new Complex(1.0, 1.0), new Complex(0.3, 0.2)});
ComplexPolynomial result = poly1.multiply(poly2);
Complex[] coefficients = result.getCoefficients();
Complex[] expected = new Complex[] {new Complex(3.0, 11.0), new Complex(13.0, 11.0), new Complex(3.4, 10.3),
new Complex(0.2, 2.4), new Complex(-0.05, 0.4)
};
for (int i = 0; i < coefficients.length; i++)
assertEquals(expected[i], coefficients[i]);
}
/**
* Test method for {@link ComplexPolynomial#multiply(org.signalml.math.iirdesigner.math.ComplexPolynomial) }
*/
@Test
public void testMultiplyPolynomialsComplex2() {
ComplexPolynomial poly1 = new ComplexPolynomial(new Complex[] {new Complex(1.0, 0.0), new Complex(-1.0, -0.5)});
ComplexPolynomial poly2 = new ComplexPolynomial(new Complex[] {new Complex(1.0, 0.0), new Complex(-2.0, -3.0)});
ComplexPolynomial result = poly1.multiply(poly2);
Complex[] coefficients = result.getCoefficients();
Complex[] expected = new Complex[] {new Complex(1.0, 0.0), new Complex(-3.0, -3.5), new Complex(0.5, 4.0)};
for (int i = 0; i < coefficients.length; i++)
assertEquals(expected[i], coefficients[i]);
}
/**
* Test method for {@link ComplexPolynomial#rootsToPolynomial(org.apache.commons.math.complex.Complex[]) }.
*/
@Test
public void testRootsToPolynomialReal() {
Complex[] roots = new Complex[] {new Complex(2.0, 0.0)};
ComplexPolynomial polynomial = ComplexPolynomial.rootsToPolynomial(roots);
Complex[] coefficients = polynomial.getCoefficients();
assertEquals(2, coefficients.length);
assertEquals(new Complex(1.0, 0.0), coefficients[0]);
assertEquals(new Complex(-2.0, 0.0), coefficients[1]);
}
/**
* Test method for {@link ComplexPolynomial#rootsToPolynomial(org.apache.commons.math.complex.Complex[]) }.
*/
@Test
public void testRootsToPolynomialComplex() {
Complex[] roots = new Complex[] {new Complex(1.0, 0.5)};
ComplexPolynomial polynomial = ComplexPolynomial.rootsToPolynomial(roots);
Complex[] coefficients = polynomial.getCoefficients();
assertEquals(2, coefficients.length);
assertEquals(new Complex(1.0, 0.0), coefficients[0]);
assertEquals(new Complex(-1.0, -0.5), coefficients[1]);
}
/**
* Test method for {@link ComplexPolynomial#rootsToPolynomial(org.apache.commons.math.complex.Complex[]) }.
*/
@Test
public void testRootsToPolynomialComplex2() {
Complex[] roots = new Complex[] {new Complex(1.0, 0.5), new Complex(2.0, 3.0)};
ComplexPolynomial polynomial = ComplexPolynomial.rootsToPolynomial(roots);
Complex[] coefficients = polynomial.getCoefficients();
assertEquals(3, coefficients.length);
assertEquals(new Complex(1.0, 0.0), coefficients[0]);
assertEquals(new Complex(-3.0, -3.5), coefficients[1]);
assertEquals(new Complex(0.5, 4.0), coefficients[2]);
}
/**
* Test method for {@link ComplexPolynomial#rootsToPolynomial(org.apache.commons.math.complex.Complex[]) }.
*/
@Test
public void testRootsToPolynomialComplex3() {
Complex[] roots = new Complex[] {new Complex(1.0, 0.5), new Complex(0.11, 0.43), new Complex(0.52, 0.964), new Complex(1.11, 2.22)};
ComplexPolynomial polynomial = ComplexPolynomial.rootsToPolynomial(roots);
Complex[] coefficients = polynomial.getCoefficients();
Complex[] expected = new Complex[] {
new Complex(1.000000, 0.0), new Complex(-2.740000, -4.114),
new Complex(-2.819700, 7.75958), new Complex(5.518916, -1.47188),
new Complex(-0.914751,-0.991563)
};
assertEquals(5, coefficients.length);
for (int i = 0; i < expected.length; i++)
assertEquals(expected[i], coefficients[i]);
}
/**
* Test method for {@link ComplexPolynomial#rootsToPolynomial(org.apache.commons.math.complex.Complex[]) }.
*/
@Test
public void testRootsToPolynomialComplex4() {
Complex[] roots = new Complex[] {new Complex(-0.0851704, 0.94648443),
new Complex(-0.20561953, 0.39204669),
new Complex(-0.20561953, -0.39204669),
new Complex(-0.0851704, -0.94648443)
};
ComplexPolynomial polynomial = ComplexPolynomial.rootsToPolynomial(roots);
Complex[] coefficients = polynomial.getCoefficients();
Complex[] expected = new Complex[] {
new Complex(1, 0), new Complex(0.58157986, 0),
new Complex(1.16911756, 0), new Complex(0.40476795, 0),
new Complex(0.17698694,0)
};
assertEquals(5, coefficients.length);
for (int i = 0; i < expected.length; i++)
assertEquals(expected[i], coefficients[i]);
}
/**
* Test method for {@link ComplexPolynomial#evaluate(org.apache.commons.math.complex.Complex) }.
*/
@Test
public void testEvaluate() {
ComplexPolynomial polynomial = new ComplexPolynomial(new double[] {0.2, 0.11});
Complex exponent = (new Complex(0, -0.5)).exp();
assertEquals(new Complex(0.87758256189037276, -0.47942553860420301), exponent, new Complex(1e-6, 1e-6));
Complex value = polynomial.evaluate(exponent);
Complex expected2 = new Complex(0.28551651237807457, -0.095885107720840607);
assertEquals(expected2, value, new Complex(1e-6, 1e-6));
}
}