/** * /check individual functions first */ @Test public void functionsTest() { for (int i = 0; i < 3; i++) { DoubleArray y = F[i].apply(X[i]); DoubleMatrix jac = F[i].calculateJacobian(X[i]); AssertMatrix.assertEqualsVectors(Y_EXP[i], y, 1e-15); AssertMatrix.assertEqualsMatrix(JAC_EXP[i], jac, 1e-15); } }
@Test public void zeroOrderSinglePointTest() { double[] x = new double[] {0.2}; DoubleMatrix p1 = PenaltyMatrixGenerator.getPenaltyMatrix(x, 0); AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(1), p1, 1e-15); }
AssertMatrix.assertEqualsVectors(DoubleArray.of(-2.5, -2.0, -0.5), y, 1e-15); f = pro.from(l); y = f.apply(parms); AssertMatrix.assertEqualsVectors(DoubleArray.of(-2.0, 2.0, 10.0), y, 1e-15);
@Test public void matrixTransposeMultipleMatrixTest() { DoubleMatrix a = DoubleMatrix.copyOf(new double[][] { {1.0, 2.0, 3.0}, {-3.0, 1.3, 7.0}}); DoubleMatrix aTa = ALGEBRA.matrixTransposeMultiplyMatrix(a); DoubleMatrix aTaRef = (DoubleMatrix) ALGEBRA.multiply(ALGEBRA.getTranspose(a), a); AssertMatrix.assertEqualsMatrix(aTaRef, aTa, 1e-15); }
@Test(dataProvider = "data") public void derivativeMatrix1DTest(double[] x, DoubleArray y, DoubleArray dydx, DoubleArray d2ydx2) { int n = x.length; DoubleMatrix d0 = PenaltyMatrixGenerator.getDerivativeMatrix(x, 0, true); AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(n), d0, 1e-14); DoubleMatrix d1 = PenaltyMatrixGenerator.getDerivativeMatrix(x, 1, true); DoubleMatrix d2 = PenaltyMatrixGenerator.getDerivativeMatrix(x, 2, true); DoubleArray d1y = (DoubleArray) MA.multiply(d1, y); DoubleArray d2y = (DoubleArray) MA.multiply(d2, y); AssertMatrix.assertEqualsVectors(dydx, d1y, 1e-13); AssertMatrix.assertEqualsVectors(d2ydx2, d2y, 1e-13); }
@Test public void test() { final ParameterizedCurveVectorFunctionProvider pro = new ParameterizedCurveVectorFunctionProvider(s_PCurve); final double[] points = new double[] {-1.0, 0.0, 1.0 }; final VectorFunction f = pro.from(points); assertEquals(2, f.getLengthOfDomain()); assertEquals(3, f.getLengthOfRange()); final DoubleArray x = DoubleArray.of(0.5, 2.0); //the parameters a & b final DoubleArray y = f.apply(x); assertEquals(0.5 * Math.sinh(-2.0), y.get(0), 1e-14); assertEquals(0.0, y.get(1), 1e-14); assertEquals(0.5 * Math.sinh(2.0), y.get(2), 1e-14); final DoubleMatrix jac = f.calculateJacobian(x); final DoubleMatrix fdJac = (new VectorFieldFirstOrderDifferentiator().differentiate(f)).apply(x); AssertMatrix.assertEqualsMatrix(fdJac, jac, 1e-9); } }
@Test public void conCatTest() { DoubleArray cx = X[0].concat(X[1]).concat(X[2]); DoubleArray cyExp = Y_EXP[0].concat(Y_EXP[1]).concat(Y_EXP[2]); ConcatenatedVectorFunction cf = new ConcatenatedVectorFunction(F); DoubleArray cy = cf.apply(cx); AssertMatrix.assertEqualsVectors(cyExp, cy, 1e-15); DoubleMatrix cJac = cf.calculateJacobian(cx); DoubleMatrix fdJac = DIFF.differentiate(cf).apply(cx); AssertMatrix.assertEqualsMatrix(fdJac, cJac, 1e-10); }
@Test public void penaltyMatrix1DTest() { int n = 10; DoubleMatrix p0 = PenaltyMatrixGenerator.getPenaltyMatrix(n, 0); //zeroth order AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(n), p0, 1e-15); //constant DoubleArray x = DoubleArray.filled(n, 2.0); DoubleMatrix p = PenaltyMatrixGenerator.getPenaltyMatrix(n, 2); double r = MA.getInnerProduct(x, MA.multiply(p, x)); assertEquals(0.0, r); DoubleArray x2 = DoubleArray.of(n, i -> i); r = MA.getInnerProduct(x2, MA.multiply(p, x2)); assertEquals(0.0, r); DoubleArray x3 = DoubleArray.of(n, i -> 0.4 + 0.4 * i + i * i); r = MA.getInnerProduct(x3, MA.multiply(p, x3)); //The second order diff is 2; for 2nd order difference use 8 values (n-2), so expect 8 * 2^2 = 32 assertEquals(32.0, r, 1e-11); p = PenaltyMatrixGenerator.getPenaltyMatrix(n, 3); r = MA.getInnerProduct(x3, MA.multiply(p, x3)); assertEquals(0.0, r, 1e-13); }
AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(n), d0, 1e-15); assertEquals(n, d1.rowCount()); assertEquals(n, d1.columnCount()); AssertMatrix.assertEqualsVectors(zeroVector, d1.row(0), 1e-15); //first row should be zero AssertMatrix.assertEqualsVectors(zeroVector, d1x, 1e-14); AssertMatrix.assertEqualsVectors(zeroVector, d2.row(0), 1e-15); //first two rows should be zero AssertMatrix.assertEqualsVectors(zeroVector, d2.row(1), 1e-15); AssertMatrix.assertEqualsVectors(ones, d1x, 1e-14); AssertMatrix.assertEqualsVectors(zeroVector, d2x, 1e-14); AssertMatrix.assertEqualsVectors(zeroVector, d3.row(0), 1e-15); //first three rows should be zero AssertMatrix.assertEqualsVectors(zeroVector, d3.row(1), 1e-15); AssertMatrix.assertEqualsVectors(zeroVector, d3.row(2), 1e-15); AssertMatrix.assertEqualsVectors(exp, d1x, 1e-14); AssertMatrix.assertEqualsVectors(exp, d2x, 1e-14); AssertMatrix.assertEqualsVectors(zeroVector, d3x, 1e-14);
AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(nx * ny), p0, 1e-14); p0 = PenaltyMatrixGenerator.getPenaltyMatrix(new double[][] {x, y}, 0, 1); AssertMatrix.assertEqualsMatrix(DoubleMatrix.identity(nx * ny), p0, 1e-14); AssertMatrix.assertEqualsVectors(dzdx, (DoubleArray) MA.multiply(diffX2DFirstOrder, z), 1e-12); AssertMatrix.assertEqualsVectors(dzdy, (DoubleArray) MA.multiply(diffY2DFirstOrder, z), 1e-12); AssertMatrix.assertEqualsVectors(d2zdx2, (DoubleArray) MA.multiply(diffX2DSecOrder, z), 1e-12); AssertMatrix.assertEqualsVectors(d2zdy2, (DoubleArray) MA.multiply(diffY2DSecOrder, z), 1e-12);