@Test public void testJacobiLegendre() { for (int i = 0; i < 10; ++i) { PolynomialFunction legendre = PolynomialsUtils.createLegendrePolynomial(i); PolynomialFunction jacobi = PolynomialsUtils.createJacobiPolynomial(i, 0, 0); checkNullPolynomial(legendre.subtract(jacobi)); } }
@Test public void testChebyshevBounds() { for (int k = 0; k < 12; ++k) { PolynomialFunction Tk = PolynomialsUtils.createChebyshevPolynomial(k); for (double x = -1; x <= 1; x += 0.02) { Assert.assertTrue(k + " " + Tk.value(x), FastMath.abs(Tk.value(x)) < (1 + 1e-12)); } } }
public ComplexNumber integrate(final ComplexNumber fromPoint, final ComplexNumber toPoint) { final PolynomialFunction<ComplexNumber> tmpPrim = this.buildPrimitive(); final ComplexNumber tmpFromVal = tmpPrim.invoke(fromPoint); final ComplexNumber tmpToVal = tmpPrim.invoke(toPoint); return tmpToVal.subtract(tmpFromVal); }
@Test public void testJacobiEvaluationAt1() { for (int v = 0; v < 10; ++v) { for (int w = 0; w < 10; ++w) { for (int i = 0; i < 10; ++i) { PolynomialFunction jacobi = PolynomialsUtils.createJacobiPolynomial(i, v, w); double binomial = CombinatoricsUtils.binomialCoefficient(v + i, i); Assert.assertTrue(Precision.equals(binomial, jacobi.value(1.0), 1)); } } } }
@Test public void testShift() { // f1(x) = 1 + x + 2 x^2 PolynomialFunction f1x = new PolynomialFunction(new double[] {1, 1, 2}); PolynomialFunction f1x1 = new PolynomialFunction(PolynomialsUtils.shift(f1x.getCoefficients(), 1)); checkPolynomial(f1x1, "4 + 5 x + 2 x^2"); PolynomialFunction f1xM1 = new PolynomialFunction(PolynomialsUtils.shift(f1x.getCoefficients(), -1)); checkPolynomial(f1xM1, "2 - 3 x + 2 x^2"); PolynomialFunction f1x3 = new PolynomialFunction(PolynomialsUtils.shift(f1x.getCoefficients(), 3)); checkPolynomial(f1x3, "22 + 13 x + 2 x^2"); // f2(x) = 2 + 3 x^2 + 8 x^3 + 121 x^5 PolynomialFunction f2x = new PolynomialFunction(new double[] {2, 0, 3, 8, 0, 121}); PolynomialFunction f2x1 = new PolynomialFunction(PolynomialsUtils.shift(f2x.getCoefficients(), 1)); checkPolynomial(f2x1, "134 + 635 x + 1237 x^2 + 1218 x^3 + 605 x^4 + 121 x^5"); PolynomialFunction f2x3 = new PolynomialFunction(PolynomialsUtils.shift(f2x.getCoefficients(), 3)); checkPolynomial(f2x3, "29648 + 49239 x + 32745 x^2 + 10898 x^3 + 1815 x^4 + 121 x^5"); }
private void checkOrthogonality( final PolynomialFunction p1, final PolynomialFunction p2, final UnivariateFunction weight, final double a, final double b, final double nonZeroThreshold, final double zeroThreshold) { UnivariateFunction f = new UnivariateFunction() { public double value(double x) { return weight.value(x) * p1.value(x) * p2.value(x); } }; double dotProduct = new IterativeLegendreGaussIntegrator(5, 1.0e-9, 1.0e-8, 2, 15).integrate(1000000, f, a, b); if (p1.degree() == p2.degree()) { // integral should be non-zero Assert.assertTrue( "I(" + p1.degree() + ", " + p2.degree() + ") = " + dotProduct, FastMath.abs(dotProduct) > nonZeroThreshold); } else { // integral should be zero Assert.assertEquals( "I(" + p1.degree() + ", " + p2.degree() + ") = " + dotProduct, 0.0, FastMath.abs(dotProduct), zeroThreshold); } }
@Test public void testChebyshevDifferentials() { for (int k = 0; k < 12; ++k) { PolynomialFunction Tk0 = PolynomialsUtils.createChebyshevPolynomial(k); PolynomialFunction Tk1 = Tk0.polynomialDerivative(); PolynomialFunction Tk2 = Tk1.polynomialDerivative(); PolynomialFunction g0 = new PolynomialFunction(new double[] {k * k}); PolynomialFunction g1 = new PolynomialFunction(new double[] {0, -1}); PolynomialFunction g2 = new PolynomialFunction(new double[] {1, 0, -1}); PolynomialFunction Tk0g0 = Tk0.multiply(g0); PolynomialFunction Tk1g1 = Tk1.multiply(g1); PolynomialFunction Tk2g2 = Tk2.multiply(g2); checkNullPolynomial(Tk0g0.add(Tk1g1.add(Tk2g2))); } }
private void checkNullPolynomial(PolynomialFunction p) { for (double coefficient : p.getCoefficients()) { Assert.assertEquals(0, coefficient, 1e-13); } }
private void checkPolynomial(PolynomialFunction p, String reference) { Assert.assertEquals(reference, p.toString()); }
private void checkPolynomial(PolynomialFunction p, long denominator, String reference) { PolynomialFunction q = new PolynomialFunction(new double[] {denominator}); Assert.assertEquals(reference, p.multiply(q).toString()); }
@Test public void testLegendreDifferentials() { for (int k = 0; k < 12; ++k) { PolynomialFunction Pk0 = PolynomialsUtils.createLegendrePolynomial(k); PolynomialFunction Pk1 = Pk0.polynomialDerivative(); PolynomialFunction Pk2 = Pk1.polynomialDerivative(); PolynomialFunction g0 = new PolynomialFunction(new double[] {k * (k + 1)}); PolynomialFunction g1 = new PolynomialFunction(new double[] {0, -2}); PolynomialFunction g2 = new PolynomialFunction(new double[] {1, 0, -1}); PolynomialFunction Pk0g0 = Pk0.multiply(g0); PolynomialFunction Pk1g1 = Pk1.multiply(g1); PolynomialFunction Pk2g2 = Pk2.multiply(g2); checkNullPolynomial(Pk0g0.add(Pk1g1.add(Pk2g2))); } }
@Test public void testLaguerreDifferentials() { for (int k = 0; k < 12; ++k) { PolynomialFunction Lk0 = PolynomialsUtils.createLaguerrePolynomial(k); PolynomialFunction Lk1 = Lk0.polynomialDerivative(); PolynomialFunction Lk2 = Lk1.polynomialDerivative(); PolynomialFunction g0 = new PolynomialFunction(new double[] {k}); PolynomialFunction g1 = new PolynomialFunction(new double[] {1, -1}); PolynomialFunction g2 = new PolynomialFunction(new double[] {0, 1}); PolynomialFunction Lk0g0 = Lk0.multiply(g0); PolynomialFunction Lk1g1 = Lk1.multiply(g1); PolynomialFunction Lk2g2 = Lk2.multiply(g2); checkNullPolynomial(Lk0g0.add(Lk1g1.add(Lk2g2))); } }
@Test public void testHermiteDifferentials() { for (int k = 0; k < 12; ++k) { PolynomialFunction Hk0 = PolynomialsUtils.createHermitePolynomial(k); PolynomialFunction Hk1 = Hk0.polynomialDerivative(); PolynomialFunction Hk2 = Hk1.polynomialDerivative(); PolynomialFunction g0 = new PolynomialFunction(new double[] {2 * k}); PolynomialFunction g1 = new PolynomialFunction(new double[] {0, -2}); PolynomialFunction g2 = new PolynomialFunction(new double[] {1}); PolynomialFunction Hk0g0 = Hk0.multiply(g0); PolynomialFunction Hk1g1 = Hk1.multiply(g1); PolynomialFunction Hk2g2 = Hk2.multiply(g2); checkNullPolynomial(Hk0g0.add(Hk1g1.add(Hk2g2))); } }