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