Package com.opengamma.analytics.math.function

Examples of com.opengamma.analytics.math.function.RealPolynomialFunction1D


    CUBIC.getRoots(null);
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNonCubic1() {
    CUBIC.getRoots(new RealPolynomialFunction1D(new double[] {1, 1, 1, 1, 1}));
  }
View Full Code Here


    REAL_ONLY_CUBIC.getRoots(null);
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNonCubic2() {
    REAL_ONLY_CUBIC.getRoots(new RealPolynomialFunction1D(new double[] {1, 1, 1, 1, 1}));
  }
View Full Code Here

      Assert.fail();
    } catch (final IllegalArgumentException e) {
      // Expected
    }
    try {
      FINDER.getRoots(new RealPolynomialFunction1D(new double[] {1., 2., 3., 4.}));
      Assert.fail();
    } catch (final IllegalArgumentException e) {
      // Expected
    }
    try {
      FINDER.getRoots(new RealPolynomialFunction1D(new double[] {12., 1., 12.}));
      Assert.fail();
    } catch (final MathException e) {
      // Expected
    }
    final Double[] roots = FINDER.getRoots(F);
View Full Code Here

    final PolynomialsLeastSquaresFitter regObj = new PolynomialsLeastSquaresFitter();

    // final double[] coeff = new double[] {5. * (randObj.nextDouble() + .5), 5. * (randObj.nextDouble() - .5), 5. * (randObj.nextDouble() - 5.), 5. * (randObj.nextDouble() - .5) };
    final double[] coeff = new double[] {-(randObj.nextDouble() + 1.), (randObj.nextDouble() + 1.), -(randObj.nextDouble() + 1.), (randObj.nextDouble() + 1.) };
    final DoubleFunction1D func = new RealPolynomialFunction1D(coeff);

    final int degree = coeff.length - 1;

    final int nPts = 7;
    double[] xValues = new double[nPts];
    double[] yValues = new double[nPts];

    for (int i = 0; i < nPts; ++i) {
      xValues[i] = -5. + 10 * i / (nPts - 1);
      //xValues[i] = 3. * (randObj.nextDouble() + .5);
      yValues[i] = func.evaluate(xValues[i]);
    }

    PolynomialsLeastSquaresFitterResult result = regObj.regressVerbose(xValues, yValues, degree, false);

    final double[] coeffResult = result.getCoeff();
View Full Code Here

    final PolynomialsLeastSquaresFitter regObj = new PolynomialsLeastSquaresFitter();

    // final double[] coeff = new double[] {5. * (randObj.nextDouble() + .5), 5. * (randObj.nextDouble() - .5), 5. * (randObj.nextDouble() - 5.), 5. * (randObj.nextDouble() - .5) };
    final double[] coeff = new double[] {-1.9564385860928322, 1.968428061753627, -1.8042487762604558, 1.1347030699838965, 2.1347030699838965 };
    final DoubleFunction1D func = new RealPolynomialFunction1D(coeff);

    final int degree = coeff.length - 1;

    final int nPts = 7;
    double[] xValues = new double[] {-2.0, -1.0, -.5, 0.0, 1.0, 2.0, 3.0 };
    final double mean = 0.357142857142857;
    final double std = 1.749149453169685;

    double[] xValuesNom = new double[nPts];
    double[] yValues = new double[nPts];

    for (int i = 0; i < nPts; ++i) {
      //  xValues[i] = -5. + 10 * i / (nPts - 1);
      //xValues[i] = 3. * (randObj.nextDouble() + .5);
      xValuesNom[i] = xValues[i] / std - mean / std;
      yValues[i] = func.evaluate(xValuesNom[i]);
    }

    PolynomialsLeastSquaresFitterResult resultNom = regObj.regressVerbose(xValues, yValues, degree, true);
    PolynomialsLeastSquaresFitterResult result = regObj.regressVerbose(xValuesNom, yValues, degree, false);

View Full Code Here

    System.out.println("\n");

    LeastSquaresRegressionResult result = regObj.regress(xValues, yValues, degree);
    final double[] coeffResult = result.getBetas();

    final DoubleFunction1D func = new RealPolynomialFunction1D(coeffResult);

    for (int i = 0; i < 100; ++i) {
      final double k = -5. + 10. * i / 100.;
      System.out.println(k + "\t" + func.evaluate(k));
    }

    System.out.println("\n");
    final double[] resResult = result.getResiduals();
    double resSumSqHalf = 0.;
View Full Code Here

    final Pair<DoubleFunction1D, DoubleFunction1D>[] polynomialAndDerivative1 = LAGUERRE.getPolynomialsAndFirstDerivative(n);
    final Pair<DoubleFunction1D, DoubleFunction1D>[] polynomialAndDerivative2 = LAGUERRE.getPolynomialsAndFirstDerivative(n, 0);
    for (int i = 0; i < n; i++) {
      assertTrue(polynomialAndDerivative1[i].getFirst() instanceof RealPolynomialFunction1D);
      assertTrue(polynomialAndDerivative2[i].getFirst() instanceof RealPolynomialFunction1D);
      final RealPolynomialFunction1D first = (RealPolynomialFunction1D) polynomialAndDerivative1[i].getFirst();
      final RealPolynomialFunction1D second = (RealPolynomialFunction1D) polynomialAndDerivative2[i].getFirst();
      assertEquals(first, second);
    }
  }
View Full Code Here

  public void PolynomialFunctionRecoverTest() {

    final PolynomialsLeastSquaresFitter regObj = new PolynomialsLeastSquaresFitter();
    final double[] coeff = new double[] {3.4, 5.6, 1., -4. };

    DoubleFunction1D func = new RealPolynomialFunction1D(coeff);

    final int degree = coeff.length - 1;

    final int nPts = 7;
    double[] xValues = new double[nPts];
    double[] yValues = new double[nPts];

    for (int i = 0; i < nPts; ++i) {
      xValues[i] = -5. + 10 * i / (nPts - 1);
      yValues[i] = func.evaluate(xValues[i]);
    }

    double[] yValuesNorm = new double[nPts];

    final double mean = _meanCal.evaluate(xValues);
    final double std = _stdCal.evaluate(xValues);
    final double ratio = mean / std;

    for (int i = 0; i < nPts; ++i) {
      final double tmp = xValues[i] / std - ratio;
      yValuesNorm[i] = func.evaluate(tmp);
    }

    /**
     * Tests for regress(..)
     */

    LeastSquaresRegressionResult result = regObj.regress(xValues, yValues, degree);

    double[] coeffResult = result.getBetas();

    for (int i = 0; i < degree + 1; ++i) {
      assertEquals(coeff[i], coeffResult[i], EPS * Math.abs(coeff[i]));
    }

    final double[] residuals = result.getResiduals();
    func = new RealPolynomialFunction1D(coeffResult);
    double[] yValuesFit = new double[nPts];
    for (int i = 0; i < nPts; ++i) {
      yValuesFit[i] = func.evaluate(xValues[i]);
    }

    for (int i = 0; i < nPts; ++i) {
      assertEquals(Math.abs(yValuesFit[i] - yValues[i]), 0., Math.abs(yValues[i]) * EPS);
    }

    for (int i = 0; i < nPts; ++i) {
      assertEquals(Math.abs(yValuesFit[i] - yValues[i]), Math.abs(residuals[i]), Math.abs(yValues[i]) * EPS);
    }

    double sum = 0.;
    for (int i = 0; i < nPts; ++i) {
      sum += residuals[i] * residuals[i];
    }
    sum = Math.sqrt(sum);

    /**
     * Tests for regressVerbose(.., false)
     */

    PolynomialsLeastSquaresFitterResult resultVer = regObj.regressVerbose(xValues, yValues, degree, false);
    coeffResult = resultVer.getCoeff();
    func = new RealPolynomialFunction1D(coeffResult);
    for (int i = 0; i < nPts; ++i) {
      yValuesFit[i] = func.evaluate(xValues[i]);
    }

    assertEquals(nPts - (degree + 1), resultVer.getDof(), 0);
    for (int i = 0; i < degree + 1; ++i) {
      assertEquals(coeff[i], coeffResult[i], EPS * Math.abs(coeff[i]));
    }

    for (int i = 0; i < nPts; ++i) {
      assertEquals(Math.abs(yValuesFit[i] - yValues[i]), 0., Math.abs(yValues[i]) * EPS);
    }

    assertEquals(sum, resultVer.getDiffNorm(), EPS);

    /**
     * Tests for regressVerbose(.., true)
     */

    PolynomialsLeastSquaresFitterResult resultNorm = regObj.regressVerbose(xValues, yValuesNorm, degree, true);

    coeffResult = resultNorm.getCoeff();
    final double[] meanAndStd = resultNorm.getMeanAndStd();

    assertEquals(nPts - (degree + 1), resultNorm.getDof(), 0);
    assertEquals(mean, meanAndStd[0], EPS);
    assertEquals(std, meanAndStd[1], EPS);
    for (int i = 0; i < degree + 1; ++i) {
      assertEquals(coeff[i], coeffResult[i], EPS * Math.abs(coeff[i]));
    }

    func = new RealPolynomialFunction1D(coeffResult);
    for (int i = 0; i < nPts; ++i) {
      final double tmp = xValues[i] / std - ratio;
      yValuesFit[i] = func.evaluate(tmp);
    }

    for (int i = 0; i < nPts; ++i) {
      assertEquals(Math.abs(yValuesFit[i] - yValuesNorm[i]), 0., Math.abs(yValuesNorm[i]) * EPS);
    }
View Full Code Here

    assertFalse(INTERPOLATOR_WITH_OFFSET.equals(new PolynomialInterpolator1D(3, 1)));
  }

  @Test
  public void testInterpolation() {
    final Function1D<Double, Double> quadratic = new RealPolynomialFunction1D(new double[] {-4., 3., 1.});
    final Function1D<Double, Double> quartic = new RealPolynomialFunction1D(new double[] {-4., 3., 1., 1., 1.});
    final TreeMap<Double, Double> quadraticMap = new TreeMap<>();
    final TreeMap<Double, Double> quarticMap = new TreeMap<>();
    double x;
    for (int i = 0; i < 10; i++) {
      x = i / 10.;
      quadraticMap.put(x, quadratic.evaluate(x));
      quarticMap.put(x, quartic.evaluate(x));
    }
    x = 0.35;
    Interpolator1D quadraticInterpolator = new PolynomialInterpolator1D(2);
    Interpolator1D quarticInterpolator = new PolynomialInterpolator1D(4);
    final Interpolator1DDataBundle quadraticData = quadraticInterpolator.getDataBundle(quadraticMap);
    final Interpolator1DDataBundle quarticData = quarticInterpolator.getDataBundle(quarticMap);
    Double quadraticResult = quadraticInterpolator.interpolate(quadraticData, x);
    Double quarticResult = quarticInterpolator.interpolate(quarticData, x);
    assertEquals(quadraticResult, quadratic.evaluate(x), EPS);
    assertEquals(quarticResult, quartic.evaluate(x), EPS);
    quadraticInterpolator = new PolynomialInterpolator1D(2, 1);
    quadraticResult = quadraticInterpolator.interpolate(quadraticData, x);
    quarticInterpolator = new PolynomialInterpolator1D(4, 1);
    quarticResult = quarticInterpolator.interpolate(quarticData, x);
    assertEquals(quadraticResult, quadratic.evaluate(x), EPS);
    assertEquals(quarticResult, quartic.evaluate(x), EPS);
  }
View Full Code Here

  }

  @Test
  public void testQuadratics() {
    for (int i = 0; i < (X.length - 2); i++) {
      RealPolynomialFunction1D quad = DATA.getQuadratic(i);
      double[] coeff = quad.getCoefficients();
      assertTrue(coeff.length == 3);
      double x = X[i + 1];
      assertEquals(2 + 3 * x + 4 * x * x, coeff[0], 0);
      assertEquals(3 + 2 * 4 * x, coeff[1], 0);
      assertEquals(4, coeff[2], 0);
View Full Code Here

TOP

Related Classes of com.opengamma.analytics.math.function.RealPolynomialFunction1D

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.