/** * Inverse transform from the N "model" parameters to the N-1 "fit" parameters. * Used mainly to find the start position of a optimisation routine. * * @param modelParms The N "model" parameters. <b>These must sum to one</b> * @return The N-1 "fit" parameters */ public DoubleArray inverseTransform(DoubleArray modelParms) { return DoubleArray.copyOf(inverseTransform(modelParms.toArray())); }
@Test public void inverseTransformTest() { for (int n = 2; n < 13; n++) { double[] theta = new double[n - 1]; for (int j = 0; j < n - 1; j++) { theta[j] = RANDOM.nextDouble() * Math.PI / 2; } SumToOne trans = new SumToOne(n); DoubleArray w = trans.transform(DoubleArray.copyOf(theta)); DoubleArray theta2 = trans.inverseTransform(w); for (int j = 0; j < n - 1; j++) { assertEquals("element " + j + ", of vector length " + n, theta[j], theta2.get(j), 1e-9); } } }
double[] expected = trans.inverseTransform(w); for (int i = 0; i < n - 1; i++) {