@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));
     }
   }
 }
Example #3
0
  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)));
    }
  }