Java Code Examples for org.apache.commons.math3.util.FastMath#E

The following examples show how to use org.apache.commons.math3.util.FastMath#E . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RealVectorAbstractTest.java    From astor with GNU General Public License v2.0 6 votes vote down vote up
private void doTestMapFunction(final UnivariateFunction f,
    final boolean inPlace) {
    final double[] data = new double[values.length + 6];
    System.arraycopy(values, 0, data, 0, values.length);
    data[values.length + 0] = 0.5 * FastMath.PI;
    data[values.length + 1] = -0.5 * FastMath.PI;
    data[values.length + 2] = FastMath.E;
    data[values.length + 3] = -FastMath.E;
    data[values.length + 4] = 1.0;
    data[values.length + 5] = -1.0;
    final double[] expected = new double[data.length];
    for (int i = 0; i < data.length; i++) {
        expected[i] = f.value(data[i]);
    }
    final RealVector v = create(data);
    final RealVector actual;
    if (inPlace) {
        actual = v.mapToSelf(f);
        Assert.assertSame(v, actual);
    } else {
        actual = v.map(f);
    }
    TestUtils.assertEquals(f.getClass().getSimpleName(), expected, actual, 1E-16);
}
 
Example 2
Source File: RealVectorAbstractTest.java    From astor with GNU General Public License v2.0 6 votes vote down vote up
private void doTestMapFunction(final UnivariateFunction f,
    final boolean inPlace) {
    final double[] data = new double[values.length + 6];
    System.arraycopy(values, 0, data, 0, values.length);
    data[values.length + 0] = 0.5 * FastMath.PI;
    data[values.length + 1] = -0.5 * FastMath.PI;
    data[values.length + 2] = FastMath.E;
    data[values.length + 3] = -FastMath.E;
    data[values.length + 4] = 1.0;
    data[values.length + 5] = -1.0;
    final double[] expected = new double[data.length];
    for (int i = 0; i < data.length; i++) {
        expected[i] = f.value(data[i]);
    }
    final RealVector v = create(data);
    final RealVector actual;
    if (inPlace) {
        actual = v.mapToSelf(f);
        Assert.assertSame(v, actual);
    } else {
        actual = v.map(f);
    }
    TestUtils.assertEquals(f.getClass().getSimpleName(), expected, actual, 1E-16);
}
 
Example 3
Source File: RealVectorAbstractTest.java    From astor with GNU General Public License v2.0 6 votes vote down vote up
private void doTestMapFunction(final UnivariateFunction f,
    final boolean inPlace) {
    final double[] data = new double[values.length + 6];
    System.arraycopy(values, 0, data, 0, values.length);
    data[values.length + 0] = 0.5 * FastMath.PI;
    data[values.length + 1] = -0.5 * FastMath.PI;
    data[values.length + 2] = FastMath.E;
    data[values.length + 3] = -FastMath.E;
    data[values.length + 4] = 1.0;
    data[values.length + 5] = -1.0;
    final double[] expected = new double[data.length];
    for (int i = 0; i < data.length; i++) {
        expected[i] = f.value(data[i]);
    }
    final RealVector v = create(data);
    final RealVector actual;
    if (inPlace) {
        actual = v.mapToSelf(f);
        Assert.assertSame(v, actual);
    } else {
        actual = v.map(f);
    }
    TestUtils.assertEquals(f.getClass().getSimpleName(), expected, actual, 1E-16);
}
 
Example 4
Source File: RealVectorAbstractTest.java    From astor with GNU General Public License v2.0 6 votes vote down vote up
private void doTestMapFunction(final UnivariateFunction f,
    final boolean inPlace) {
    final double[] data = new double[values.length + 6];
    System.arraycopy(values, 0, data, 0, values.length);
    data[values.length + 0] = 0.5 * FastMath.PI;
    data[values.length + 1] = -0.5 * FastMath.PI;
    data[values.length + 2] = FastMath.E;
    data[values.length + 3] = -FastMath.E;
    data[values.length + 4] = 1.0;
    data[values.length + 5] = -1.0;
    final double[] expected = new double[data.length];
    for (int i = 0; i < data.length; i++) {
        expected[i] = f.value(data[i]);
    }
    final RealVector v = create(data);
    final RealVector actual;
    if (inPlace) {
        actual = v.mapToSelf(f);
        Assert.assertSame(v, actual);
    } else {
        actual = v.map(f);
    }
    TestUtils.assertEquals(f.getClass().getSimpleName(), expected, actual, 1E-16);
}
 
Example 5
Source File: NevilleInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1Function();
    UnivariateInterpolator interpolator = new NevilleInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 6
Source File: DividedDifferenceInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new DividedDifferenceInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 7
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 8
Source File: NevilleInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1Function();
    UnivariateInterpolator interpolator = new NevilleInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 9
Source File: DividedDifferenceInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1Function();
    UnivariateInterpolator interpolator = new DividedDifferenceInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 10
Source File: DividedDifferenceInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new DividedDifferenceInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 11
Source File: NevilleInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new NevilleInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 12
Source File: DividedDifferenceInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new DividedDifferenceInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 13
Source File: NevilleInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new NevilleInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 14
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.logDensityPrefactor2 = FastMath.log(shape) + 0.5 * FastMath.log(aux) -
                                FastMath.log(Gamma.lanczos(shape));
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.logDensityPrefactor1 = this.logDensityPrefactor2 - FastMath.log(scale) -
            FastMath.log(shiftedShape) * shape +
            shape + Gamma.LANCZOS_G;
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 15
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 16
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 17
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.logDensityPrefactor2 = FastMath.log(shape) + 0.5 * FastMath.log(aux) -
                                FastMath.log(Gamma.lanczos(shape));
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.logDensityPrefactor1 = this.logDensityPrefactor2 - FastMath.log(scale) -
            FastMath.log(shiftedShape) * shape +
            shape + Gamma.LANCZOS_G;
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 18
Source File: NevilleInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new NevilleInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}
 
Example 19
Source File: GammaDistribution.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Creates a Gamma distribution.
 *
 * @param rng Random number generator.
 * @param shape the shape parameter
 * @param scale the scale parameter
 * @param inverseCumAccuracy the maximum absolute error in inverse
 * cumulative probability estimates (defaults to
 * {@link #DEFAULT_INVERSE_ABSOLUTE_ACCURACY}).
 * @throws NotStrictlyPositiveException if {@code shape <= 0} or
 * {@code scale <= 0}.
 * @since 3.1
 */
public GammaDistribution(RandomGenerator rng,
                         double shape,
                         double scale,
                         double inverseCumAccuracy)
    throws NotStrictlyPositiveException {
    super(rng);

    if (shape <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SHAPE, shape);
    }
    if (scale <= 0) {
        throw new NotStrictlyPositiveException(LocalizedFormats.SCALE, scale);
    }

    this.shape = shape;
    this.scale = scale;
    this.solverAbsoluteAccuracy = inverseCumAccuracy;
    this.shiftedShape = shape + Gamma.LANCZOS_G + 0.5;
    final double aux = FastMath.E / (2.0 * FastMath.PI * shiftedShape);
    this.densityPrefactor2 = shape * FastMath.sqrt(aux) / Gamma.lanczos(shape);
    this.densityPrefactor1 = this.densityPrefactor2 / scale *
            FastMath.pow(shiftedShape, -shape) *
            FastMath.exp(shape + Gamma.LANCZOS_G);
    this.minY = shape + Gamma.LANCZOS_G - FastMath.log(Double.MAX_VALUE);
    this.maxLogY = FastMath.log(Double.MAX_VALUE) / (shape - 1.0);
}
 
Example 20
Source File: DividedDifferenceInterpolatorTest.java    From astor with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Test of interpolator for the exponential function.
 * <p>
 * |expm1^(n)(zeta)| <= e, zeta in [-1, 1]
 */
@Test
public void testExpm1Function() {
    UnivariateFunction f = new Expm1();
    UnivariateInterpolator interpolator = new DividedDifferenceInterpolator();
    double x[], y[], z, expected, result, tolerance;

    // 5 interpolating points on interval [-1, 1]
    int n = 5;
    double min = -1.0, max = 1.0;
    x = new double[n];
    y = new double[n];
    for (int i = 0; i < n; i++) {
        x[i] = min + i * (max - min) / n;
        y[i] = f.value(x[i]);
    }
    double derivativebound = FastMath.E;
    UnivariateFunction p = interpolator.interpolate(x, y);

    z = 0.0; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = 0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);

    z = -0.5; expected = f.value(z); result = p.value(z);
    tolerance = FastMath.abs(derivativebound * partialerror(x, z));
    Assert.assertEquals(expected, result, tolerance);
}