@Override public Double apply(final Double x) { return FunctionUtils.square((x - 50) / 50.0); } };
private DoubleMatrix getAMatrix(double[][] funcMatrix, double[] invSigmaSqr) { int m = funcMatrix.length; int n = funcMatrix[0].length; double[][] a = new double[m][m]; for (int i = 0; i < m; i++) { double sum = 0; for (int k = 0; k < n; k++) { sum += FunctionUtils.square(funcMatrix[i][k]) * invSigmaSqr[k]; } a[i][i] = sum; for (int j = i + 1; j < m; j++) { sum = 0; for (int k = 0; k < n; k++) { sum += funcMatrix[i][k] * funcMatrix[j][k] * invSigmaSqr[k]; } a[i][j] = sum; a[j][i] = sum; } } return DoubleMatrix.copyOf(a); }
@Test public void testSquare() { for (int i = 0; i < 100; i++) { final double x = Math.random(); assertEquals(FunctionUtils.square(x), x * x, EPS); } }
@Override public Double apply(final DoubleArray x) { final int n = x.size(); if (n % 2 != 0) { throw new IllegalArgumentException("vector length must be even"); } double sum = 0; for (int i = 0; i < n / 2; i++) { sum += FunctionUtils.square(1 - x.get(2 * i)) + 100 * FunctionUtils.square(x.get(2 * i + 1) - FunctionUtils.square(x.get(2 * i))); } return sum; } };
@SuppressWarnings("unused") private DoubleArray getDiagonalCurvatureMatrix(DoubleMatrix jacobian) { int n = jacobian.rowCount(); int m = jacobian.columnCount(); double[] alpha = new double[m]; for (int i = 0; i < m; i++) { double sum = 0.0; for (int k = 0; k < n; k++) { sum += FunctionUtils.square(jacobian.get(k, i)); } alpha[i] = sum; } return DoubleArray.copyOf(alpha); }
temp += w.get(k) * f[k][i]; chiSq += FunctionUtils.square(y.get(i) - temp) * invSigmaSqr[i];
temp += w.get(k) * f[k][i]; chiSq += FunctionUtils.square(y.get(i) - temp) * invSigmaSqr[i];
@Test(dataProvider = "data") public void penaltyMatrix1DTest(double[] x, DoubleArray y, DoubleArray dydx, DoubleArray d2ydx2) { int n = x.length; double expected = 0.0; for (int i = 0; i < n; i++) { if (i > 0 && i < (n - 1)) { // we not not use the end points expected += FunctionUtils.square(d2ydx2.get(i)); } } double scale = Math.pow(2.0, 4); //((2.0-0.0)^2^2) expected *= scale; DoubleMatrix p2 = PenaltyMatrixGenerator.getPenaltyMatrix(x, 2); double r = MA.getInnerProduct(y, MA.multiply(p2, y)); assertEquals(expected, r, 1e-11); }
@Override public DoubleArray apply(DoubleArray x) { int n = x.size(); double[] res = new double[n]; res[0] = 2 * (x.get(0) - 1) + 400 * x.get(0) * (FunctionUtils.square(x.get(0)) - x.get(1)); res[n - 1] = 200 * (x.get(n - 1) - FunctionUtils.square(x.get(n - 2))); for (int i = 1; i < n - 1; i++) { res[i] = 2 * (x.get(i) - 1) + 400 * x.get(i) * (FunctionUtils.square(x.get(i)) - x.get(i + 1)) + 200 * (x.get(i) - FunctionUtils.square(x.get(i - 1))); } return DoubleArray.copyOf(res); } };
double w2 = h[i] + 2. * h[i - 1]; double w12 = w1 + w2; double z2 = 0.5 * w12 / FunctionUtils.square(w1 * delta[i] + w2 * delta[i - 1]); jac[i][i - 1] = -w1 * invH[i - 1] * delta[i] * delta[i] * z2; jac[i][i] = (w1 * invH[i - 1] * delta[i] * delta[i] - w2 * invH[i] * delta[i - 1] * delta[i - 1]) * z2;