/**
* Copyright (C) 2009 - 2010 by OpenGamma Inc.
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.function.special;
import static org.testng.AssertJUnit.assertEquals;
import org.apache.commons.lang.NotImplementedException;
import org.testng.annotations.Test;
import com.opengamma.analytics.math.function.DoubleFunction1D;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class ChebyshevPolynomialOfFirstKindFunctionTest {
private static final DoubleFunction1D T0 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 1.;
}
};
private static final DoubleFunction1D T1 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return x;
}
};
private static final DoubleFunction1D T2 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 2 * x * x - 1;
}
};
private static final DoubleFunction1D T3 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return x * (4 * x * x - 3);
}
};
private static final DoubleFunction1D T4 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 8 * x * x * x * x - 8 * x * x + 1;
}
};
private static final DoubleFunction1D T5 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return x * (16 * x * x * x * x - 20 * x * x + 5);
}
};
private static final DoubleFunction1D T6 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 32 * x * x * x * x * x * x - 48 * x * x * x * x + 18 * x * x - 1;
}
};
private static final DoubleFunction1D T7 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return x * (64 * x * x * x * x * x * x - 112 * x * x * x * x + 56 * x * x - 7);
}
};
private static final DoubleFunction1D T8 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
final double xSq = x * x;
return 128 * xSq * xSq * xSq * xSq - 256 * xSq * xSq * xSq + 160 * xSq * xSq - 32 * xSq + 1;
}
};
private static final DoubleFunction1D T9 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
final double xSq = x * x;
return x * (256 * xSq * xSq * xSq * xSq - 576 * xSq * xSq * xSq + 432 * xSq * xSq - 120 * xSq + 9);
}
};
private static final DoubleFunction1D[] T = new DoubleFunction1D[] {T0, T1, T2, T3, T4, T5, T6, T7, T8, T9};
private static final ChebyshevPolynomialOfFirstKindFunction CHEBYSHEV = new ChebyshevPolynomialOfFirstKindFunction();
private static final double EPS = 1e-12;
@Test(expectedExceptions = IllegalArgumentException.class)
public void testBadN() {
CHEBYSHEV.getPolynomials(-3);
}
@Test(expectedExceptions = NotImplementedException.class)
public void testGetPolynomials() {
CHEBYSHEV.getPolynomialsAndFirstDerivative(3);
}
@Test
public void test() {
DoubleFunction1D[] t = CHEBYSHEV.getPolynomials(0);
assertEquals(t.length, 1);
final double x = 1.23;
assertEquals(t[0].evaluate(x), 1, EPS);
t = CHEBYSHEV.getPolynomials(1);
assertEquals(t.length, 2);
assertEquals(t[1].evaluate(x), x, EPS);
for (int i = 0; i < 10; i++) {
t = CHEBYSHEV.getPolynomials(i);
for (int j = 0; j <= i; j++) {
assertEquals(T[j].evaluate(x), t[j].evaluate(x), EPS);
}
}
}
}