package org.freehep.math.minuit.example.tutorial; import java.util.List; import junit.framework.TestCase; import org.freehep.math.minuit.FunctionMinimum; import org.freehep.math.minuit.MnContours; import org.freehep.math.minuit.MnMigrad; import org.freehep.math.minuit.MnUserParameters; import org.freehep.math.minuit.Point; /** * * @version $Id: Quad2FMainTest.java 8584 2006-08-10 23:06:37Z duns $ */ public class Quad2FMainTest extends TestCase { public Quad2FMainTest(String testName) { super(testName); } public static junit.framework.Test suite() { junit.framework.TestSuite suite = new junit.framework.TestSuite(Quad2FMainTest.class); return suite; } /** * Test of main method, of class org.freehep.math.minuit.tests.tutorial.Quad1FMain. */ public void testQuad2F1() { Quad2F fcn = new Quad2F(); MnUserParameters upar = new MnUserParameters(); upar.add("x", 1., 0.1); upar.add("y", 1., 0.1); MnMigrad migrad = new MnMigrad(fcn, upar); migrad.setUseAnalyticalDerivatives(false); FunctionMinimum min = migrad.minimize(); assertTrue(min.isValid()); assertEquals(20,min.nfcn()); assertEquals(3.9075e-20,min.fval(),1e-25); assertEquals(3.9075e-20,min.edm(), 1e-25); } public void testQuad2F2() { // using VariableMetricMinimizer, analytical derivatives Quad2F fcn = new Quad2F(); double[] par = {1., 1.}; double[] err = {0.1, 0.1}; MnMigrad migrad = new MnMigrad(fcn, par, err); FunctionMinimum min = migrad.minimize(); assertTrue(min.isValid()); assertEquals(24,min.nfcn()); assertEquals(8.87469e-31,min.fval(),1e-36); assertEquals(8.87483e-31,min.edm(), 1e-36); } public void testQuad2F3() { // test Contours for two parameters Quad2F fcn = new Quad2F(); double[] par = { 1., 1.}; double[] err = { 0.1, 0.1}; MnMigrad migrad = new MnMigrad(fcn, par, err); FunctionMinimum min = migrad.minimize(); MnContours contours = new MnContours(fcn, min); //1-sigma around the minimum List<Point> cont = contours.points(0, 1, 1, 20); assertEquals(-1,cont.get(0).first,1e-7); assertEquals(6.66134e-16,cont.get(0).second,1e-21); assertEquals(-0.92388,cont.get(19).first,1e-6); assertEquals(0.382683,cont.get(19).second,1e-6); //2-sigma around the minimum System.out.println("2-sigma contours"); List<Point> cont4 = contours.points(0, 1, 4, 20); assertEquals(-2,cont4.get(0).first,1e-7); assertEquals(6.66134e-16,cont4.get(0).second,1e-21); assertEquals(-1.84776,cont4.get(19).first,1e-6); assertEquals(0.765367,cont4.get(19).second,1e-6); } }