diff --git a/hipparchus-clustering/pom.xml b/hipparchus-clustering/pom.xml index f9f9fb3ae..6e1837374 100644 --- a/hipparchus-clustering/pom.xml +++ b/hipparchus-clustering/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-clustering/src/changes/changes.xml b/hipparchus-clustering/src/changes/changes.xml index 810d16466..674ab3068 100644 --- a/hipparchus-clustering/src/changes/changes.xml +++ b/hipparchus-clustering/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Clustering Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/hipparchus-core/pom.xml b/hipparchus-core/pom.xml index f7f3c4a7e..f4195e730 100644 --- a/hipparchus-core/pom.xml +++ b/hipparchus-core/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-core/src/changes/changes.xml b/hipparchus-core/src/changes/changes.xml index eceb1f47d..3e1f8a671 100644 --- a/hipparchus-core/src/changes/changes.xml +++ b/hipparchus-core/src/changes/changes.xml @@ -49,6 +49,11 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Core Release Notes + + + Added Field.isSmall to help convergence checks in Field iterative algorithms. + + Added evaluation of bicubic and tricubic interpolation functions with CalculusFieldElement diff --git a/hipparchus-core/src/main/java/org/hipparchus/CalculusFieldElement.java b/hipparchus-core/src/main/java/org/hipparchus/CalculusFieldElement.java index 302ce9c4f..83ec8881d 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/CalculusFieldElement.java +++ b/hipparchus-core/src/main/java/org/hipparchus/CalculusFieldElement.java @@ -598,6 +598,20 @@ default double norm() { return abs().getReal(); } + /** Check if instance is small with respect to reference. + *

+ * This check is mainly intended for checking convergence of iterative + * algorithms. The idea is that {@code this + base} is close enough + * to {@code base}, using a relative threshold. The default implementation + * uses only the relative threshold with respect to he {@link #getReal()} part. + *

+ * @return true if instance is small with respect to reference + * @since 5.0 + */ + default boolean isSmall(final T base, final double relativeThreshold) { + return FastMath.abs(getReal()) <= FastMath.abs(base.getReal() * relativeThreshold); + } + /** absolute value. * @return abs(this) */ diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/DerivativeStructure.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/DerivativeStructure.java index f10fee664..e33b78268 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/DerivativeStructure.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/DerivativeStructure.java @@ -24,6 +24,7 @@ import java.io.Serializable; import org.hipparchus.Field; +import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; import org.hipparchus.exception.MathRuntimeException; import org.hipparchus.util.FastMath; @@ -1102,6 +1103,20 @@ public DerivativeStructure getPi() { return factory.getDerivativeField().getPi(); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final DerivativeStructure base, final double relativeThreshold) { + if (data.length != base.data.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + data.length, base.data.length); + } + boolean ok = true; + for (int i = 0; i < data.length && ok; ++i) { + ok = FastMath.abs(data[i]) <= FastMath.abs(base.data[i] * relativeThreshold); + } + return ok; + } + /** * Test for the equality of two derivative structures. *

diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructure.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructure.java index ce6149266..8cb1a11cc 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructure.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructure.java @@ -18,6 +18,7 @@ import org.hipparchus.CalculusFieldElement; import org.hipparchus.Field; +import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; import org.hipparchus.exception.MathRuntimeException; import org.hipparchus.util.FieldSinCos; @@ -1321,6 +1322,20 @@ public FieldDerivativeStructure getPi() { return factory.getDerivativeField().getPi(); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldDerivativeStructure base, final double relativeThreshold) { + if (data.length != base.data.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + data.length, base.data.length); + } + boolean ok = true; + for (int i = 0; i < data.length && ok; ++i) { + ok = data[i].isSmall(base.data[i], relativeThreshold); + } + return ok; + } + /** * Test for the equality of two derivative structures. *

diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldGradient.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldGradient.java index 12a8a24df..e5abb2fd2 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldGradient.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldGradient.java @@ -904,6 +904,20 @@ public FieldGradient getPi() { return new FieldGradient<>(getValueField().getZero().getPi(), getFreeParameters()); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldGradient base, final double relativeThreshold) { + if (grad.length != base.grad.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + grad.length, base.grad.length); + } + boolean ok = value.isSmall(base.value, relativeThreshold); + for (int i = 0; i < grad.length && ok; ++i) { + ok = grad[i].isSmall(base.grad[i], relativeThreshold); + } + return ok; + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1.java index 3749d5194..fa88a8d88 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1.java @@ -675,6 +675,13 @@ public FieldUnivariateDerivative1 getPi() { return new FieldUnivariateDerivative1<>(zero.getPi(), zero); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldUnivariateDerivative1 base, final double relativeThreshold) { + return f0.isSmall(base.f0, relativeThreshold) && + f1.isSmall(base.f1, relativeThreshold); + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2.java index 67e2022be..e42f7af47 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2.java @@ -1002,6 +1002,14 @@ public FieldUnivariateDerivative2 getPi() { return new FieldUnivariateDerivative2<>(zero.getPi(), zero, zero); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldUnivariateDerivative2 base, final double relativeThreshold) { + return f0.isSmall(base.f0, relativeThreshold) && + f1.isSmall(base.f1, relativeThreshold) && + f2.isSmall(base.f2, relativeThreshold); + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/Gradient.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/Gradient.java index 42af6bde3..4da9dcfd2 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/Gradient.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/Gradient.java @@ -733,6 +733,20 @@ public Gradient stackVariable() { return new Gradient(gradient, this.getValue()); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final Gradient base, final double relativeThreshold) { + if (grad.length != base.grad.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + grad.length, base.grad.length); + } + boolean ok = FastMath.abs(value) <= FastMath.abs(base.value * relativeThreshold); + for (int i = 0; i < grad.length && ok; ++i) { + ok = FastMath.abs(grad[i]) <= FastMath.abs(base.grad[i] * relativeThreshold); + } + return ok; + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/SparseGradient.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/SparseGradient.java index 3734ad91d..5fd519678 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/SparseGradient.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/SparseGradient.java @@ -769,6 +769,17 @@ public SparseGradient getPi() { return new SparseGradient(FastMath.PI, null); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final SparseGradient base, final double relativeThreshold) { + boolean ok = FastMath.abs(value) <= FastMath.abs(base.value * relativeThreshold); + for (final Map.Entry entry : derivatives.entrySet()) { + ok &= FastMath.abs(entry.getValue()) <= + FastMath.abs(base.getDerivative(entry.getKey()) * relativeThreshold); + } + return ok; + } + /** * Test for the equality of two sparse gradients. *

diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1.java index 4094eed84..4367cfa91 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1.java @@ -506,6 +506,13 @@ public UnivariateDerivative1 getPi() { return PI; } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final UnivariateDerivative1 base, final double relativeThreshold) { + return FastMath.abs(f0) <= FastMath.abs(base.f0 * relativeThreshold) && + FastMath.abs(f1) <= FastMath.abs(base.f1 * relativeThreshold); + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2.java b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2.java index 1a8163c93..05bcb0aca 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2.java +++ b/hipparchus-core/src/main/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2.java @@ -785,6 +785,14 @@ public UnivariateDerivative2 getPi() { return PI; } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final UnivariateDerivative2 base, final double relativeThreshold) { + return FastMath.abs(f0) <= FastMath.abs(base.f0 * relativeThreshold) && + FastMath.abs(f1) <= FastMath.abs(base.f1 * relativeThreshold) && + FastMath.abs(f2) <= FastMath.abs(base.f2 * relativeThreshold); + } + /** Test for the equality of two univariate derivatives. *

* univariate derivatives are considered equal if they have the same derivatives. diff --git a/hipparchus-core/src/main/java/org/hipparchus/complex/Complex.java b/hipparchus-core/src/main/java/org/hipparchus/complex/Complex.java index 1fb8285af..a187493c5 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/complex/Complex.java +++ b/hipparchus-core/src/main/java/org/hipparchus/complex/Complex.java @@ -1885,6 +1885,13 @@ public Complex toRadians() { return createComplex(FastMath.toRadians(getRealPart()), FastMath.toRadians(getImaginaryPart())); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final Complex base, final double relativeThreshold) { + return FastMath.abs(getRealPart()) <= FastMath.abs(base.getRealPart() * relativeThreshold) && + FastMath.abs(getImaginaryPart()) <= FastMath.abs(base.getImaginaryPart() * relativeThreshold); + } + /** {@inheritDoc} *

* Comparison us performed using real ordering as the primary sort order and diff --git a/hipparchus-core/src/main/java/org/hipparchus/complex/FieldComplex.java b/hipparchus-core/src/main/java/org/hipparchus/complex/FieldComplex.java index 4fe141d4f..98213f16f 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/complex/FieldComplex.java +++ b/hipparchus-core/src/main/java/org/hipparchus/complex/FieldComplex.java @@ -1997,4 +1997,11 @@ public FieldComplex getPi() { return getPi(getPartsField()); } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldComplex base, final double relativeThreshold) { + return getRealPart().isSmall(base.getRealPart(), relativeThreshold) && + getImaginaryPart().isSmall(base.getImaginaryPart(), relativeThreshold); + } + } diff --git a/hipparchus-core/src/main/java/org/hipparchus/util/FieldTuple.java b/hipparchus-core/src/main/java/org/hipparchus/util/FieldTuple.java index 3c72b307a..2d5258686 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/util/FieldTuple.java +++ b/hipparchus-core/src/main/java/org/hipparchus/util/FieldTuple.java @@ -20,6 +20,7 @@ import org.hipparchus.CalculusFieldElement; import org.hipparchus.Field; +import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; /** @@ -784,6 +785,20 @@ public FieldTuple getPi() { return result; } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final FieldTuple base, final double relativeThreshold) { + if (values.length != base.values.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + values.length, base.values.length); + } + boolean ok = true; + for (int i = 0; i < values.length && ok; ++i) { + ok = values[i].isSmall(base.values[i], relativeThreshold); + } + return ok; + } + /** Field for {link FieldTuple} instances. * @param the type of the field elements */ diff --git a/hipparchus-core/src/main/java/org/hipparchus/util/Tuple.java b/hipparchus-core/src/main/java/org/hipparchus/util/Tuple.java index 8f03a113e..42eda0075 100644 --- a/hipparchus-core/src/main/java/org/hipparchus/util/Tuple.java +++ b/hipparchus-core/src/main/java/org/hipparchus/util/Tuple.java @@ -20,6 +20,7 @@ import org.hipparchus.CalculusFieldElement; import org.hipparchus.Field; +import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; /** @@ -787,6 +788,20 @@ public Tuple getPi() { return result; } + /** {@inheritDoc} */ + @Override + public boolean isSmall(final Tuple base, final double relativeThreshold) { + if (values.length != base.values.length) { + throw new MathIllegalArgumentException(LocalizedCoreFormats.DIMENSIONS_MISMATCH, + values.length, base.values.length); + } + boolean ok = true; + for (int i = 0; i < values.length && ok; ++i) { + ok = FastMath.abs(values[i]) <= FastMath.abs(base.values[i] * relativeThreshold); + } + return ok; + } + /** Field for {link Tuple} instances. */ private static class TupleField implements Field { diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/DerivativeStructureTest.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/DerivativeStructureTest.java index 620da63d6..5d46a66dd 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/DerivativeStructureTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/DerivativeStructureTest.java @@ -40,6 +40,7 @@ import org.hipparchus.util.FieldSinCos; import org.hipparchus.util.FieldSinhCosh; import org.hipparchus.util.Precision; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.ArrayList; @@ -417,7 +418,7 @@ public void testScalb() { @Override @Test public void testUlp() { - final RandomGenerator random = new Well19937a(0x85d201920b5be954l); + final RandomGenerator random = new Well19937a(0x85d201920b5be954L); for (int k = 0; k < 10000; ++k) { int maxOrder = 1 + random.nextInt(5); DSFactory factory = new DSFactory(3, maxOrder); @@ -1549,7 +1550,7 @@ void testCompose() { @Test void testIntegration() { // check that first-order integration on two variables does not depend on sequence of operations - final RandomGenerator random = new Well19937a(0x87bb96d6e11557bdl); + final RandomGenerator random = new Well19937a(0x87bb96d6e11557bdL); final DSFactory factory = new DSFactory(3, 7); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1568,7 +1569,7 @@ void testIntegration() { void testIntegrationGreaterThanOrder() { // check that integration to a too high order generates zero // as integration constants are set to zero - final RandomGenerator random = new Well19937a(0x4744a847b11e4c6fl); + final RandomGenerator random = new Well19937a(0x4744a847b11e4c6fL); final DSFactory factory = new DSFactory(3, 7); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1587,7 +1588,7 @@ void testIntegrationGreaterThanOrder() { @Test void testIntegrationNoOp() { // check that integration of order 0 is no-op - final RandomGenerator random = new Well19937a(0x75a35152f30f644bl); + final RandomGenerator random = new Well19937a(0x75a35152f30f644bL); final DSFactory factory = new DSFactory(3, 7); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1606,7 +1607,7 @@ void testIntegrationNoOp() { @Test void testDifferentiationNoOp() { // check that differentiation of order 0 is no-op - final RandomGenerator random = new Well19937a(0x3b6ae4c2f1282949l); + final RandomGenerator random = new Well19937a(0x3b6ae4c2f1282949L); final DSFactory factory = new DSFactory(3, 7); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1626,7 +1627,7 @@ void testDifferentiationNoOp() { void testIntegrationDifferentiation() { // check that integration and differentiation for univariate functions are each other inverse except for constant // term and highest order one - final RandomGenerator random = new Well19937a(0x67fe66c05e5ee222l); + final RandomGenerator random = new Well19937a(0x67fe66c05e5ee222L); final DSFactory factory = new DSFactory(1, 25); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1674,7 +1675,7 @@ void testDifferentiation1() { @Test void testDifferentiation2() { // check that first-order differentiation twice is same as second-order differentiation - final RandomGenerator random = new Well19937a(0xec293aaee352de94l); + final RandomGenerator random = new Well19937a(0xec293aaee352de94L); final DSFactory factory = new DSFactory(5, 4); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1692,7 +1693,7 @@ void testDifferentiation2() { @Test void testDifferentiation3() { // check that first-order differentiation on two variables does not depend on sequence of operations - final RandomGenerator random = new Well19937a(0x35409ecc1348e46cl); + final RandomGenerator random = new Well19937a(0x35409ecc1348e46cL); final DSFactory factory = new DSFactory(3, 7); final int size = factory.getCompiler().getSize(); for (int count = 0; count < 100; ++count) { @@ -1923,8 +1924,8 @@ void testZero() { DerivativeStructure zero = new DSFactory(3, 2).variable(2, 17.0).getField().getZero(); double[] a = zero.getAllDerivatives(); assertEquals(10, a.length); - for (int i = 0; i < a.length; ++i) { - assertEquals(0.0, a[i], 1.0e-15); + for (final double v : a) { + assertEquals(0.0, v, 1.0e-15); } } @@ -2112,6 +2113,23 @@ void testRunTimeClass() { assertEquals(DerivativeStructure.class, field.getRuntimeClass()); } + @Test + public void testIsSmallDimensionMismatch() { + try { + new DSFactory(3, 2).constant(0.0).isSmall(new DSFactory(3, 4).constant(0.0), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + final DSFactory factory = new DSFactory(2, 2); + Assertions.assertTrue(factory.variable(1, 2.5).multiply(1.0e-13).isSmall(factory.variable(1, 1.0), 1.0e-12)); + Assertions.assertFalse(factory.variable(1, 2.5).multiply(1.0e-11).isSmall(factory.variable(1, 1.0), 1.0e-12)); + } + private void checkF0F1(DerivativeStructure ds, double value, double...derivatives) { // check dimension diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructureBinary64Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructureBinary64Test.java index 67ce31314..14e511028 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructureBinary64Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldDerivativeStructureBinary64Test.java @@ -18,6 +18,8 @@ package org.hipparchus.analysis.differentiation; import org.hipparchus.Field; +import org.hipparchus.exception.LocalizedCoreFormats; +import org.hipparchus.exception.MathIllegalArgumentException; import org.hipparchus.util.Binary64; import org.hipparchus.util.Binary64Field; import org.hipparchus.util.FastMath; @@ -61,4 +63,21 @@ public void testHypotNoOverflow() { doTestHypotNoOverflow(250); } + @Test + public void testIsSmallDimensionMismatch() { + try { + buildFactory(3, 2).constant(0.0).isSmall(buildFactory(3, 4).constant(0.0), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + final FDSFactory factory = buildFactory(2, 2); + Assertions.assertTrue(factory.variable(1, 2.5).multiply(1.0e-13).isSmall(factory.variable(1, 1.0), 1.0e-12)); + Assertions.assertFalse(factory.variable(1, 2.5).multiply(1.0e-11).isSmall(factory.variable(1, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldGradientBinary64Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldGradientBinary64Test.java index 54446db52..ceac10ba8 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldGradientBinary64Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldGradientBinary64Test.java @@ -17,8 +17,11 @@ package org.hipparchus.analysis.differentiation; +import org.hipparchus.exception.LocalizedCoreFormats; +import org.hipparchus.exception.MathIllegalArgumentException; import org.hipparchus.util.Binary64; import org.hipparchus.util.Binary64Field; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -43,4 +46,22 @@ public void testHashcode() { public void testLinearCombinationReference() { doTestLinearCombinationReference(this::build, 5.0e-16, 1.0); } + + @Test + public void testIsSmallDimensionMismatch() { + try { + build(0.0).isSmall(build(0.0, 1.0), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + Assertions.assertTrue(build(1.0e-13, 2.5e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-11, 2.5e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-13, 2.5e-11).isSmall(build(1.0, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1Binary64Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1Binary64Test.java index 6003c9af3..9d5e91518 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1Binary64Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative1Binary64Test.java @@ -20,6 +20,7 @@ import org.hipparchus.util.Binary64; import org.hipparchus.util.Binary64Field; import org.hipparchus.util.FastMath; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -50,4 +51,12 @@ void testHashcode() { public void testLinearCombinationReference() { doTestLinearCombinationReference(this::build, 5.0e-9, 1.0); } + + @Test + public void testIsSmall() { + Assertions.assertTrue(build(1.0e-13, 2.5e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-11, 2.5e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-13, 2.5e-11).isSmall(build(1.0, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2Binary64Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2Binary64Test.java index 57cc6a079..df4b866eb 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2Binary64Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/FieldUnivariateDerivative2Binary64Test.java @@ -19,6 +19,7 @@ import org.hipparchus.util.Binary64; import org.hipparchus.util.Binary64Field; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -43,4 +44,13 @@ public void testHashcode() { public void testLinearCombinationReference() { doTestLinearCombinationReference(this::build, 5.0e-16, 1.0); } + + @Test + public void testIsSmall() { + Assertions.assertTrue(build(1.0e-13, 2.5e-13, -1.4e-13).isSmall(build(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-11, 2.5e-13, -1.4e-13).isSmall(build(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-13, 2.5e-11, -1.4e-13).isSmall(build(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-13, 2.5e-13, -1.4e-11).isSmall(build(1.0, 1.0, 2.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/GradientTest.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/GradientTest.java index 2c5cfe210..6983dbe86 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/GradientTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/GradientTest.java @@ -184,11 +184,11 @@ void testEquals() { Gradient g = new Gradient(12, -34, 56); assertEquals(g, g); assertNotEquals("", g); - assertEquals(g, new Gradient(12, -34, 56)); - assertNotEquals(g, new Gradient(21, -34, 56)); - assertNotEquals(g, new Gradient(12, -43, 56)); - assertNotEquals(g, new Gradient(12, -34, 65)); - assertNotEquals(g, new Gradient(21, -43, 65)); + assertEquals(new Gradient(12, -34, 56), g); + assertNotEquals(new Gradient(21, -34, 56), g); + assertNotEquals(new Gradient(12, -43, 56), g); + assertNotEquals(new Gradient(12, -34, 65), g); + assertNotEquals(new Gradient(21, -43, 65), g); } @Test @@ -557,4 +557,22 @@ void testOne() { } } + + @Test + public void testIsSmallDimensionMismatch() { + try { + new Gradient(0.0, 0.0, 0.0).isSmall(new Gradient(0.0, 0.0), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + Assertions.assertTrue(new Gradient(1.0e-13, 2.5e-13).isSmall(new Gradient(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Gradient(1.0e-11, 2.5e-13).isSmall(new Gradient(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Gradient(1.0e-13, 2.5e-11).isSmall(new Gradient(1.0, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/SparseGradientTest.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/SparseGradientTest.java index 13a2791d1..655fa9c4c 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/SparseGradientTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/SparseGradientTest.java @@ -28,6 +28,7 @@ import org.hipparchus.random.Well1024a; import org.hipparchus.util.FastMath; import org.hipparchus.util.FieldSinCos; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.ArrayList; @@ -1042,7 +1043,7 @@ void testLinearCombination1DoubleDS() { void testLinearCombination2DSDS() { // we compare accurate versus naive dot product implementations // on regular vectors (i.e. not extreme cases like in the previous test) - Well1024a random = new Well1024a(0xc6af886975069f11l); + Well1024a random = new Well1024a(0xc6af886975069f11L); for (int i = 0; i < 10000; ++i) { final SparseGradient[] u = new SparseGradient[4]; @@ -1086,7 +1087,7 @@ void testLinearCombination2DSDS() { void testLinearCombination2DoubleDS() { // we compare accurate versus naive dot product implementations // on regular vectors (i.e. not extreme cases like in the previous test) - Well1024a random = new Well1024a(0xc6af886975069f11l); + Well1024a random = new Well1024a(0xc6af886975069f11L); for (int i = 0; i < 10000; ++i) { final double[] u = new double[4]; @@ -1176,6 +1177,14 @@ void testRunTimeClass() { assertEquals(SparseGradient.class, field.getRuntimeClass()); } + @Test + public void testIsSmall() { + Assertions.assertTrue(SparseGradient.createVariable(3, 2.5).multiply(1.0e-13). + isSmall(SparseGradient.createVariable(3, 2.5), 1.0e-12)); + Assertions.assertFalse(SparseGradient.createVariable(3, 2.5).multiply(1.0e-11). + isSmall(SparseGradient.createVariable(3, 2.5), 1.0e-12)); + } + private void checkF0F1(SparseGradient sg, double value, double...derivatives) { // check value diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1Test.java index 93b494c14..5ba43eeab 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative1Test.java @@ -19,6 +19,7 @@ import org.hipparchus.Field; import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -101,10 +102,10 @@ void testEquals() { UnivariateDerivative1 ud1 = new UnivariateDerivative1(12, -34); assertEquals(ud1, ud1); assertNotEquals("", ud1); - assertEquals(ud1, new UnivariateDerivative1(12, -34)); - assertNotEquals(ud1, new UnivariateDerivative1(21, -34)); - assertNotEquals(ud1, new UnivariateDerivative1(12, -43)); - assertNotEquals(ud1, new UnivariateDerivative1(21, -43)); + assertEquals(new UnivariateDerivative1(12, -34), ud1); + assertNotEquals(new UnivariateDerivative1(21, -34), ud1); + assertNotEquals(new UnivariateDerivative1(12, -43), ud1); + assertNotEquals(new UnivariateDerivative1(21, -43), ud1); } @@ -138,4 +139,14 @@ void testRunTimeClass() { assertEquals(UnivariateDerivative1.class, field.getRuntimeClass()); } + @Test + public void testIsSmall() { + Assertions.assertTrue(new UnivariateDerivative1(1.0e-13, 2.5e-13). + isSmall(new UnivariateDerivative1(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new UnivariateDerivative1(1.0e-11, 2.5e-13). + isSmall(new UnivariateDerivative1(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new UnivariateDerivative1(1.0e-13, 2.5e-11). + isSmall(new UnivariateDerivative1(1.0, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2Test.java b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2Test.java index 3da42a4f8..afcb83ae7 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2Test.java +++ b/hipparchus-core/src/test/java/org/hipparchus/analysis/differentiation/UnivariateDerivative2Test.java @@ -20,6 +20,7 @@ import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.exception.MathIllegalArgumentException; import org.hipparchus.util.MathUtils; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -111,11 +112,11 @@ void testEquals() { UnivariateDerivative2 ud2 = new UnivariateDerivative2(12, -34, 56); assertEquals(ud2, ud2); assertNotEquals("", ud2); - assertEquals(ud2, new UnivariateDerivative2(12, -34, 56)); - assertNotEquals(ud2, new UnivariateDerivative2(21, -34, 56)); - assertNotEquals(ud2, new UnivariateDerivative2(12, -43, 56)); - assertNotEquals(ud2, new UnivariateDerivative2(12, -34, 65)); - assertNotEquals(ud2, new UnivariateDerivative2(21, -43, 65)); + assertEquals(new UnivariateDerivative2(12, -34, 56), ud2); + assertNotEquals(new UnivariateDerivative2(21, -34, 56), ud2); + assertNotEquals(new UnivariateDerivative2(12, -43, 56), ud2); + assertNotEquals(new UnivariateDerivative2(12, -34, 65), ud2); + assertNotEquals(new UnivariateDerivative2(21, -43, 65), ud2); } @Test @@ -172,4 +173,16 @@ void testRunTimeClass() { assertEquals(UnivariateDerivative2.class, field.getRuntimeClass()); } + @Test + public void testIsSmall() { + Assertions.assertTrue(new UnivariateDerivative2(1.0e-13, 2.5e-13, -1.4e-13). + isSmall(new UnivariateDerivative2(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(new UnivariateDerivative2(1.0e-11, 2.5e-13, -1.4e-13). + isSmall(new UnivariateDerivative2(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(new UnivariateDerivative2(1.0e-13, 2.5e-11, -1.4e-13). + isSmall(new UnivariateDerivative2(1.0, 1.0, 2.0), 1.0e-12)); + Assertions.assertFalse(new UnivariateDerivative2(1.0e-13, 2.5e-13, -1.4e-11). + isSmall(new UnivariateDerivative2(1.0, 1.0, 2.0), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/complex/ComplexTest.java b/hipparchus-core/src/test/java/org/hipparchus/complex/ComplexTest.java index 548835803..3c887d04c 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/complex/ComplexTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/complex/ComplexTest.java @@ -51,28 +51,28 @@ class ComplexTest extends CalculusFieldElementAbstractTest { - private double inf = Double.POSITIVE_INFINITY; - private double neginf = Double.NEGATIVE_INFINITY; - private double nan = Double.NaN; - private double pi = FastMath.PI; - private Complex oneInf = new Complex(1, inf); - private Complex oneNegInf = new Complex(1, neginf); - private Complex infOne = new Complex(inf, 1); - private Complex infZero = new Complex(inf, 0); - private Complex infNaN = new Complex(inf, nan); - private Complex infNegInf = new Complex(inf, neginf); - private Complex infInf = new Complex(inf, inf); - private Complex negInfInf = new Complex(neginf, inf); - private Complex negInfZero = new Complex(neginf, 0); - private Complex negInfOne = new Complex(neginf, 1); - private Complex negInfNaN = new Complex(neginf, nan); - private Complex negInfNegInf = new Complex(neginf, neginf); - private Complex oneNaN = new Complex(1, nan); - private Complex zeroInf = new Complex(0, inf); - private Complex zeroNaN = new Complex(0, nan); - private Complex nanInf = new Complex(nan, inf); - private Complex nanNegInf = new Complex(nan, neginf); - private Complex nanZero = new Complex(nan, 0); + private final double inf = Double.POSITIVE_INFINITY; + private final double neginf = Double.NEGATIVE_INFINITY; + private final double nan = Double.NaN; + private final double pi = FastMath.PI; + private final Complex oneInf = new Complex(1, inf); + private final Complex oneNegInf = new Complex(1, neginf); + private final Complex infOne = new Complex(inf, 1); + private final Complex infZero = new Complex(inf, 0); + private final Complex infNaN = new Complex(inf, nan); + private final Complex infNegInf = new Complex(inf, neginf); + private final Complex infInf = new Complex(inf, inf); + private final Complex negInfInf = new Complex(neginf, inf); + private final Complex negInfZero = new Complex(neginf, 0); + private final Complex negInfOne = new Complex(neginf, 1); + private final Complex negInfNaN = new Complex(neginf, nan); + private final Complex negInfNegInf = new Complex(neginf, neginf); + private final Complex oneNaN = new Complex(1, nan); + private final Complex zeroInf = new Complex(0, inf); + private final Complex zeroNaN = new Complex(0, nan); + private final Complex nanInf = new Complex(nan, inf); + private final Complex nanNegInf = new Complex(nan, neginf); + private final Complex nanZero = new Complex(nan, 0); @Override protected Complex build(final double x) { @@ -555,7 +555,7 @@ void testFloatingPointEqualsPrecondition2() { @Test void testEqualsClass() { Complex x = new Complex(3.0, 4.0); - assertNotEquals(x, this); + assertNotEquals(this, x); } @Test @@ -1816,7 +1816,7 @@ private void doTestIsMathmeaticalInteger(double imaginary, boolean expectedForIn assertFalse(new Complex(FastMath.nextAfter(d, Double.NEGATIVE_INFINITY), imaginary).isMathematicalInteger()); } - double minNoFractional = 0x1l << 52; + double minNoFractional = 0x1L << 52; assertEquals(expectedForInteger, new Complex(minNoFractional, imaginary).isMathematicalInteger()); assertFalse(new Complex(minNoFractional - 0.5, imaginary).isMathematicalInteger()); assertEquals(expectedForInteger, new Complex(minNoFractional + 0.5, imaginary).isMathematicalInteger()); @@ -2126,6 +2126,13 @@ void testSerial() { assertTrue(inftcmplx.isInfinite()); } + @Test + public void testIsSmall() { + Assertions.assertTrue(new Complex(1.0e-13, 1.0e-13).isSmall(new Complex(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Complex(1.0e-11, 1.0e-13).isSmall(new Complex(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Complex(1.0e-13, 1.0e-11).isSmall(new Complex(1.0, 1.0), 1.0e-12)); + } + /** * Class to test extending Complex */ diff --git a/hipparchus-core/src/test/java/org/hipparchus/complex/FieldComplexTest.java b/hipparchus-core/src/test/java/org/hipparchus/complex/FieldComplexTest.java index 7e4051115..823449da3 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/complex/FieldComplexTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/complex/FieldComplexTest.java @@ -44,24 +44,24 @@ public class FieldComplexTest extends CalculusFieldElementAbstractTest> { - private FieldComplex oneInf = build(1, Double.POSITIVE_INFINITY); - private FieldComplex oneNegInf = build(1, Double.NEGATIVE_INFINITY); - private FieldComplex infOne = build(Double.POSITIVE_INFINITY, 1); - private FieldComplex infZero = build(Double.POSITIVE_INFINITY, 0); - private FieldComplex infNaN = build(Double.POSITIVE_INFINITY, Double.NaN); - private FieldComplex infNegInf = build(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY); - private FieldComplex infInf = build(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); - private FieldComplex negInfInf = build(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - private FieldComplex negInfZero = build(Double.NEGATIVE_INFINITY, 0); - private FieldComplex negInfOne = build(Double.NEGATIVE_INFINITY, 1); - private FieldComplex negInfNaN = build(Double.NEGATIVE_INFINITY, Double.NaN); - private FieldComplex negInfNegInf = build(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY); - private FieldComplex oneNaN = build(1, Double.NaN); - private FieldComplex zeroInf = build(0, Double.POSITIVE_INFINITY); - private FieldComplex zeroNaN = build(0, Double.NaN); - private FieldComplex nanInf = build(Double.NaN, Double.POSITIVE_INFINITY); - private FieldComplex nanNegInf = build(Double.NaN, Double.NEGATIVE_INFINITY); - private FieldComplex nanZero = build(Double.NaN); + private final FieldComplex oneInf = build(1, Double.POSITIVE_INFINITY); + private final FieldComplex oneNegInf = build(1, Double.NEGATIVE_INFINITY); + private final FieldComplex infOne = build(Double.POSITIVE_INFINITY, 1); + private final FieldComplex infZero = build(Double.POSITIVE_INFINITY, 0); + private final FieldComplex infNaN = build(Double.POSITIVE_INFINITY, Double.NaN); + private final FieldComplex infNegInf = build(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY); + private final FieldComplex infInf = build(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); + private final FieldComplex negInfInf = build(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); + private final FieldComplex negInfZero = build(Double.NEGATIVE_INFINITY, 0); + private final FieldComplex negInfOne = build(Double.NEGATIVE_INFINITY, 1); + private final FieldComplex negInfNaN = build(Double.NEGATIVE_INFINITY, Double.NaN); + private final FieldComplex negInfNegInf = build(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY); + private final FieldComplex oneNaN = build(1, Double.NaN); + private final FieldComplex zeroInf = build(0, Double.POSITIVE_INFINITY); + private final FieldComplex zeroNaN = build(0, Double.NaN); + private final FieldComplex nanInf = build(Double.NaN, Double.POSITIVE_INFINITY); + private final FieldComplex nanNegInf = build(Double.NaN, Double.NEGATIVE_INFINITY); + private final FieldComplex nanZero = build(Double.NaN); @Override protected FieldComplex build(final double x) { @@ -610,7 +610,7 @@ void testFloatingPointEqualsPrecondition2() { @Test void testEqualsClass() { FieldComplex x = build(3.0, 4.0); - assertNotEquals(x, this); + assertNotEquals(this, x); } @Test @@ -1189,6 +1189,7 @@ public void testPowDouble() { } } + @Test public void testPowT() { for (double x = -0.9; x < 0.9; x += 0.05) { for (double y = 0.1; y < 4; y += 0.2) { @@ -1901,7 +1902,7 @@ private void doTestIsMathmeaticalInteger(double imaginary, boolean expectedForIn assertFalse(build(FastMath.nextAfter(d, Double.NEGATIVE_INFINITY), imaginary).isMathematicalInteger()); } - double minNoFractional = 0x1l << 52; + double minNoFractional = 0x1L << 52; assertEquals(expectedForInteger, build(minNoFractional, imaginary).isMathematicalInteger()); assertFalse(build(minNoFractional - 0.5, imaginary).isMathematicalInteger()); assertEquals(expectedForInteger, build(minNoFractional + 0.5, imaginary).isMathematicalInteger()); @@ -2186,23 +2187,11 @@ void testSignedZeroEquality() { } - /** - * Class to test extending Complex - */ - public static class TestComplex extends FieldComplex { - - public TestComplex(Binary64 real, Binary64 imaginary) { - super(real, imaginary); - } - - public TestComplex(FieldComplex other) { - this(other.getRealPart(), other.getImaginaryPart()); - } - - @Override - protected TestComplex createComplex(Binary64 real, Binary64 imaginary) { - return new TestComplex(real, imaginary); - } - + @Test + public void testIsSmall() { + Assertions.assertTrue(build(1.0e-13, 1.0e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-11, 1.0e-13).isSmall(build(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(build(1.0e-13, 1.0e-11).isSmall(build(1.0, 1.0), 1.0e-12)); } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/util/FieldTupleTest.java b/hipparchus-core/src/test/java/org/hipparchus/util/FieldTupleTest.java index 99c364060..49855f222 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/util/FieldTupleTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/util/FieldTupleTest.java @@ -17,6 +17,9 @@ package org.hipparchus.util; import org.hipparchus.CalculusFieldElementAbstractTest; +import org.hipparchus.exception.LocalizedCoreFormats; +import org.hipparchus.exception.MathIllegalArgumentException; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -26,19 +29,19 @@ public class FieldTupleTest extends CalculusFieldElementAbstractTest> { public static final Binary64 X = new Binary64(1.2345); - public static final FieldTuple PLUS_X = new FieldTuple(X, X); + public static final FieldTuple PLUS_X = new FieldTuple<>(X, X); - public static final FieldTuple MINUS_X = new FieldTuple(X.negate(), X.negate()); + public static final FieldTuple MINUS_X = new FieldTuple<>(X.negate(), X.negate()); public static final Binary64 Y = new Binary64(6.789); - public static final FieldTuple PLUS_Y = new FieldTuple(Y, Y); + public static final FieldTuple PLUS_Y = new FieldTuple<>(Y, Y); - public static final FieldTuple MINUS_Y = new FieldTuple(Y.negate(), Y.negate()); + public static final FieldTuple MINUS_Y = new FieldTuple<>(Y.negate(), Y.negate()); - public static final FieldTuple PLUS_ZERO = new FieldTuple(new Binary64(0.0), new Binary64(0.0)); + public static final FieldTuple PLUS_ZERO = new FieldTuple<>(new Binary64(0.0), new Binary64(0.0)); - public static final FieldTuple MINUS_ZERO = new FieldTuple(new Binary64(-0.0), new Binary64(-0.0)); + public static final FieldTuple MINUS_ZERO = new FieldTuple<>(new Binary64(-0.0), new Binary64(-0.0)); @Override protected FieldTuple build(final double x) { @@ -54,7 +57,7 @@ void testNorm() { @Test void testComponents() { assertEquals(2, PLUS_ZERO.getDimension()); - final FieldTuple oneToFive = new FieldTuple(new Binary64(1), + final FieldTuple oneToFive = new FieldTuple<>(new Binary64(1), new Binary64(2), new Binary64(3), new Binary64(4), @@ -108,19 +111,19 @@ void testHashcode() { void testAdd() { FieldTuple expected, actual; - expected = new FieldTuple(X.add(Y), X.add(Y)); + expected = new FieldTuple<>(X.add(Y), X.add(Y)); actual = PLUS_X.add(PLUS_Y); assertEquals(expected, actual); actual = PLUS_Y.add(PLUS_X); assertEquals(expected, actual); - expected = new FieldTuple(X.add(Y.negate()), X.add(Y.negate())); + expected = new FieldTuple<>(X.add(Y.negate()), X.add(Y.negate())); actual = PLUS_X.add(MINUS_Y); assertEquals(expected, actual); actual = MINUS_Y.add(PLUS_X); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().add(Y.negate()), X.negate().add(Y.negate())); + expected = new FieldTuple<>(X.negate().add(Y.negate()), X.negate().add(Y.negate())); actual = MINUS_X.add(MINUS_Y); assertEquals(expected, actual); actual = MINUS_Y.add(MINUS_X); @@ -132,19 +135,19 @@ void testAdd() { void testSubtract() { FieldTuple expected, actual; - expected = new FieldTuple(X.subtract(Y), X.subtract(Y)); + expected = new FieldTuple<>(X.subtract(Y), X.subtract(Y)); actual = PLUS_X.subtract(PLUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.subtract(Y.negate()), X.subtract(Y.negate())); + expected = new FieldTuple<>(X.subtract(Y.negate()), X.subtract(Y.negate())); actual = PLUS_X.subtract(MINUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().subtract(Y), X.negate().subtract(Y)); + expected = new FieldTuple<>(X.negate().subtract(Y), X.negate().subtract(Y)); actual = MINUS_X.subtract(PLUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().subtract(Y.negate()), X.negate().subtract(Y.negate())); + expected = new FieldTuple<>(X.negate().subtract(Y.negate()), X.negate().subtract(Y.negate())); actual = MINUS_X.subtract(MINUS_Y); assertEquals(expected, actual); @@ -176,19 +179,19 @@ void testNegate() { void testMultiply() { FieldTuple expected, actual; - expected = new FieldTuple(X.multiply(Y), X.multiply(Y)); + expected = new FieldTuple<>(X.multiply(Y), X.multiply(Y)); actual = PLUS_X.multiply(PLUS_Y); assertEquals(expected, actual); actual = PLUS_Y.multiply(PLUS_X); assertEquals(expected, actual); - expected = new FieldTuple(X.multiply(Y.negate()), X.multiply(Y.negate())); + expected = new FieldTuple<>(X.multiply(Y.negate()), X.multiply(Y.negate())); actual = PLUS_X.multiply(MINUS_Y); assertEquals(expected, actual); actual = MINUS_Y.multiply(PLUS_X); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().multiply(Y.negate()), X.negate().multiply(Y.negate())); + expected = new FieldTuple<>(X.negate().multiply(Y.negate()), X.negate().multiply(Y.negate())); actual = MINUS_X.multiply(MINUS_Y); assertEquals(expected, actual); actual = MINUS_Y.multiply(MINUS_X); @@ -200,19 +203,19 @@ void testMultiply() { void testDivide() { FieldTuple expected, actual; - expected = new FieldTuple(X.divide(Y), X.divide(Y)); + expected = new FieldTuple<>(X.divide(Y), X.divide(Y)); actual = PLUS_X.divide(PLUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.divide(Y.negate()), X.divide(Y.negate())); + expected = new FieldTuple<>(X.divide(Y.negate()), X.divide(Y.negate())); actual = PLUS_X.divide(MINUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().divide(Y), X.negate().divide(Y)); + expected = new FieldTuple<>(X.negate().divide(Y), X.negate().divide(Y)); actual = MINUS_X.divide(PLUS_Y); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().divide(Y.negate()), X.negate().divide(Y.negate())); + expected = new FieldTuple<>(X.negate().divide(Y.negate()), X.negate().divide(Y.negate())); actual = MINUS_X.divide(MINUS_Y); assertEquals(expected, actual); @@ -222,20 +225,20 @@ void testDivide() { void testReciprocal() { FieldTuple expected, actual; - expected = new FieldTuple(X.reciprocal(), X.reciprocal()); + expected = new FieldTuple<>(X.reciprocal(), X.reciprocal()); actual = PLUS_X.reciprocal(); assertEquals(expected, actual); - expected = new FieldTuple(X.negate().reciprocal(), X.negate().reciprocal()); + expected = new FieldTuple<>(X.negate().reciprocal(), X.negate().reciprocal()); actual = MINUS_X.reciprocal(); assertEquals(expected, actual); expected = PLUS_ZERO; - actual = new FieldTuple(new Binary64(Double.POSITIVE_INFINITY), new Binary64(Double.POSITIVE_INFINITY)).reciprocal(); + actual = new FieldTuple<>(new Binary64(Double.POSITIVE_INFINITY), new Binary64(Double.POSITIVE_INFINITY)).reciprocal(); assertEquals(expected, actual); expected = MINUS_ZERO; - actual = new FieldTuple(new Binary64(Double.NEGATIVE_INFINITY), new Binary64(Double.NEGATIVE_INFINITY)).reciprocal(); + actual = new FieldTuple<>(new Binary64(Double.NEGATIVE_INFINITY), new Binary64(Double.NEGATIVE_INFINITY)).reciprocal(); assertEquals(expected, actual); } @@ -245,7 +248,7 @@ void testToDegreesDefinition() { for (int maxOrder = 0; maxOrder < 6; ++maxOrder) { for (double x = 0.1; x < 1.2; x += 0.001) { final Binary64 dec64 = new Binary64(x); - FieldTuple value = new FieldTuple(dec64, dec64); + FieldTuple value = new FieldTuple<>(dec64, dec64); assertEquals(FastMath.toDegrees(x), value.toDegrees().getReal(), epsilon); } } @@ -257,7 +260,7 @@ void testToRadiansDefinition() { for (int maxOrder = 0; maxOrder < 6; ++maxOrder) { for (double x = 0.1; x < 1.2; x += 0.001) { final Binary64 dec64 = new Binary64(x); - FieldTuple value = new FieldTuple(dec64, dec64); + FieldTuple value = new FieldTuple<>(dec64, dec64); assertEquals(FastMath.toRadians(x), value.toRadians().getReal(), epsilon); } } @@ -267,11 +270,31 @@ void testToRadiansDefinition() { void testDegRad() { for (double x = 0.1; x < 1.2; x += 0.001) { final Binary64 dec64 = new Binary64(x); - FieldTuple value = new FieldTuple(dec64, dec64); + FieldTuple value = new FieldTuple<>(dec64, dec64); FieldTuple rebuilt = value.toDegrees().toRadians(); FieldTuple zero = rebuilt.subtract(value); assertEquals(0, zero.getReal(), 3.0e-16); } } + @Test + public void testIsSmallDimensionMismatch() { + try { + new FieldTuple<>(new Binary64(0.0)).isSmall(new FieldTuple<>(new Binary64(0.0), new Binary64(1.0)), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + Assertions.assertTrue(new FieldTuple<>(new Binary64(1.0e-13), new Binary64(2.5e-13)). + isSmall(new FieldTuple<>(new Binary64(1.0), new Binary64(1.0)), 1.0e-12)); + Assertions.assertFalse(new FieldTuple<>(new Binary64(1.0e-11), new Binary64(2.5e-13)). + isSmall(new FieldTuple<>(new Binary64(1.0), new Binary64(1.0)), 1.0e-12)); + Assertions.assertFalse(new FieldTuple<>(new Binary64(1.0e-13), new Binary64(2.5e-11)). + isSmall(new FieldTuple<>(new Binary64(1.0), new Binary64(1.0)), 1.0e-12)); + } + } diff --git a/hipparchus-core/src/test/java/org/hipparchus/util/TupleTest.java b/hipparchus-core/src/test/java/org/hipparchus/util/TupleTest.java index 21149e69a..78c0cc984 100644 --- a/hipparchus-core/src/test/java/org/hipparchus/util/TupleTest.java +++ b/hipparchus-core/src/test/java/org/hipparchus/util/TupleTest.java @@ -17,6 +17,9 @@ package org.hipparchus.util; import org.hipparchus.CalculusFieldElementAbstractTest; +import org.hipparchus.exception.LocalizedCoreFormats; +import org.hipparchus.exception.MathIllegalArgumentException; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -257,4 +260,21 @@ void testDegRad() { } } + @Test + public void testIsSmallDimensionMismatch() { + try { + new Tuple(0.0).isSmall(new Tuple(0.0, 1.0), 1.0e-15); + Assertions.fail("an exception should have been thrown"); + } catch (MathIllegalArgumentException e) { + Assertions.assertEquals(LocalizedCoreFormats.DIMENSIONS_MISMATCH, e.getSpecifier()); + } + } + + @Test + public void testIsSmall() { + Assertions.assertTrue(new Tuple(1.0e-13, 2.5e-13).isSmall(new Tuple(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Tuple(1.0e-11, 2.5e-13).isSmall(new Tuple(1.0, 1.0), 1.0e-12)); + Assertions.assertFalse(new Tuple(1.0e-13, 2.5e-11).isSmall(new Tuple(1.0, 1.0), 1.0e-12)); + } + } diff --git a/hipparchus-coverage/pom.xml b/hipparchus-coverage/pom.xml index 2d366ed6a..80a30cfee 100644 --- a/hipparchus-coverage/pom.xml +++ b/hipparchus-coverage/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-fft/pom.xml b/hipparchus-fft/pom.xml index 72e9798a9..fdf4e803f 100644 --- a/hipparchus-fft/pom.xml +++ b/hipparchus-fft/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-fft/src/changes/changes.xml b/hipparchus-fft/src/changes/changes.xml index 094795ecc..529161263 100644 --- a/hipparchus-fft/src/changes/changes.xml +++ b/hipparchus-fft/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus FFT Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/hipparchus-filtering/pom.xml b/hipparchus-filtering/pom.xml index 6aed0a983..4a23bb7c0 100644 --- a/hipparchus-filtering/pom.xml +++ b/hipparchus-filtering/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-filtering/src/changes/changes.xml b/hipparchus-filtering/src/changes/changes.xml index 08d9987e0..2b818d70e 100644 --- a/hipparchus-filtering/src/changes/changes.xml +++ b/hipparchus-filtering/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Filtering Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/hipparchus-fitting/pom.xml b/hipparchus-fitting/pom.xml index b90e95b4f..9cd4b591e 100644 --- a/hipparchus-fitting/pom.xml +++ b/hipparchus-fitting/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-fitting/src/changes/changes.xml b/hipparchus-fitting/src/changes/changes.xml index 2db4662a3..d7ffe58fa 100644 --- a/hipparchus-fitting/src/changes/changes.xml +++ b/hipparchus-fitting/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Fitting Release Notes + + Added RANSAC algorithm for estimating the parameters of a mathematical model. diff --git a/hipparchus-geometry/pom.xml b/hipparchus-geometry/pom.xml index 22640daff..8dac9d385 100644 --- a/hipparchus-geometry/pom.xml +++ b/hipparchus-geometry/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-geometry/src/changes/changes.xml b/hipparchus-geometry/src/changes/changes.xml index e61dea98a..e2ce9c2d8 100644 --- a/hipparchus-geometry/src/changes/changes.xml +++ b/hipparchus-geometry/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Geometry Release Notes + + Add getNorm2Sq in geometry. diff --git a/hipparchus-ode/pom.xml b/hipparchus-ode/pom.xml index f96534037..8872feb1f 100644 --- a/hipparchus-ode/pom.xml +++ b/hipparchus-ode/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-ode/src/changes/changes.xml b/hipparchus-ode/src/changes/changes.xml index 81d55b6ac..aa1b888b6 100644 --- a/hipparchus-ode/src/changes/changes.xml +++ b/hipparchus-ode/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus ODE Release Notes + + Fixed inconsistency between Abstract{Field}ODEStateInterpolator and {Field}DetectorBasedEventState for event time handling. diff --git a/hipparchus-optim/pom.xml b/hipparchus-optim/pom.xml index 89da3ccc2..c86ac2945 100644 --- a/hipparchus-optim/pom.xml +++ b/hipparchus-optim/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-optim/src/changes/changes.xml b/hipparchus-optim/src/changes/changes.xml index 6b8076769..60ef0679c 100644 --- a/hipparchus-optim/src/changes/changes.xml +++ b/hipparchus-optim/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Optim Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/hipparchus-parent/pom.xml b/hipparchus-parent/pom.xml index 9f39830a4..2a408c3c3 100644 --- a/hipparchus-parent/pom.xml +++ b/hipparchus-parent/pom.xml @@ -21,7 +21,7 @@ 4.0.0 org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT pom Hipparchus @@ -568,6 +568,7 @@ 4.11.0 3.0 2.0.0 + 5.5.0.6356 <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" id="MathJax-script"></script> @@ -857,8 +858,13 @@ maven-project-info-reports-plugin ${hipparchus.maven-project-info-reports-plugin.version} - - + + org.sonarsource.scanner.maven + sonar-maven-plugin + ${hipparchus.sonar-maven-plugin.version} + + + diff --git a/hipparchus-samples/pom.xml b/hipparchus-samples/pom.xml index 34b4a1a5a..78f85f150 100644 --- a/hipparchus-samples/pom.xml +++ b/hipparchus-samples/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-samples/src/changes/changes.xml b/hipparchus-samples/src/changes/changes.xml index 5fb82e2a7..d25253617 100644 --- a/hipparchus-samples/src/changes/changes.xml +++ b/hipparchus-samples/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Samples Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/hipparchus-stat/pom.xml b/hipparchus-stat/pom.xml index a8a7ce41f..b3a2a17b0 100644 --- a/hipparchus-stat/pom.xml +++ b/hipparchus-stat/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT ../hipparchus-parent diff --git a/hipparchus-stat/src/changes/changes.xml b/hipparchus-stat/src/changes/changes.xml index 8c4be528c..e389d9748 100644 --- a/hipparchus-stat/src/changes/changes.xml +++ b/hipparchus-stat/src/changes/changes.xml @@ -49,6 +49,8 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Core Release Notes + + No changes directly in this module. However, lower level Hipparchus modules did change, diff --git a/pom.xml b/pom.xml index 629a1465b..34dcf03d6 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.hipparchus hipparchus - 4.1-SNAPSHOT + 5.0-SNAPSHOT hipparchus-parent diff --git a/src/changes/changes.xml b/src/changes/changes.xml index b582b2169..5a05eb083 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -49,6 +49,11 @@ If the output is not quite correct, check for invisible trailing spaces! Hipparchus Release Notes + + + Added Field.isSmall to help convergence checks in Field iterative algorithms. + + Added evaluation of bicubic and tricubic interpolation functions with CalculusFieldElement