/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.minimization; import static com.opengamma.analytics.math.minimization.MinimizationTestFunctions.COUPLED_ROSENBROCK; import static com.opengamma.analytics.math.minimization.MinimizationTestFunctions.COUPLED_ROSENBROCK_GRAD; import static com.opengamma.analytics.math.minimization.MinimizationTestFunctions.ROSENBROCK; import static com.opengamma.analytics.math.minimization.MinimizationTestFunctions.ROSENBROCK_GRAD; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.analytics.math.matrix.DoubleMatrix1D; import com.opengamma.util.test.TestGroup; /** * Abstract test. */ @Test(groups = TestGroup.UNIT) public abstract class MultidimensionalMinimizerWithGradientTestCase { protected void assertSolvingRosenbrock(final MinimizerWithGradient<Function1D<DoubleMatrix1D, Double>, Function1D<DoubleMatrix1D, DoubleMatrix1D>, DoubleMatrix1D> minimzer, final double tol) { final DoubleMatrix1D start = new DoubleMatrix1D(new double[] {-1.0, 1.0}); final DoubleMatrix1D solution = minimzer.minimize(ROSENBROCK, ROSENBROCK_GRAD, start); assertEquals(1.0, solution.getEntry(0), tol); assertEquals(1.0, solution.getEntry(1), tol); } protected void assertSolvingRosenbrockWithoutGradient(final MinimizerWithGradient<Function1D<DoubleMatrix1D, Double>, Function1D<DoubleMatrix1D, DoubleMatrix1D>, DoubleMatrix1D> minimzer, final double tol) { final DoubleMatrix1D start = new DoubleMatrix1D(new double[] {-1.0, 1.0}); final DoubleMatrix1D solution = minimzer.minimize(ROSENBROCK, start); assertEquals(1.0, solution.getEntry(0), tol); assertEquals(1.0, solution.getEntry(1), tol); } protected void assertSolvingCoupledRosenbrock(final MinimizerWithGradient<Function1D<DoubleMatrix1D, Double>, Function1D<DoubleMatrix1D, DoubleMatrix1D>, DoubleMatrix1D> minimzer, final double tol) { final DoubleMatrix1D start = new DoubleMatrix1D(new double[] {-1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0}); final DoubleMatrix1D solution = minimzer.minimize(COUPLED_ROSENBROCK, COUPLED_ROSENBROCK_GRAD, start); for (int i = 0; i < solution.getNumberOfElements(); i++) { assertEquals(1.0, solution.getEntry(i), tol); } } protected void assertSolvingCoupledRosenbrockWithoutGradient(final MinimizerWithGradient<Function1D<DoubleMatrix1D, Double>, Function1D<DoubleMatrix1D, DoubleMatrix1D>, DoubleMatrix1D> minimzer, final double tol) { final DoubleMatrix1D start = new DoubleMatrix1D(new double[] {-1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0}); final DoubleMatrix1D solution = minimzer.minimize(COUPLED_ROSENBROCK, start); for (int i = 0; i < solution.getNumberOfElements(); i++) { assertEquals(1.0, solution.getEntry(i), tol); } } }