/** * Creates an instance. * <p> * This creates the concatenated function, in the order that the sub functions are given. * * @param functions the sub functions */ public ConcatenatedVectorFunction(VectorFunction[] functions) { ArgChecker.noNulls(functions, "functions"); this.functions = functions; this.nPartitions = functions.length; this.xPartition = new int[nPartitions]; this.yPartition = new int[nPartitions]; int m = 0; int n = 0; for (int i = 0; i < nPartitions; i++) { xPartition[i] = functions[i].getLengthOfDomain(); yPartition[i] = functions[i].getLengthOfRange(); m += xPartition[i]; n += yPartition[i]; } this.sizeDom = m; this.sizeRange = n; }
@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); } }