package org.freehep.math.minuit; /** * * @version $Id: SimplexSeedGenerator.java 8584 2006-08-10 23:06:37Z duns $ */ class SimplexSeedGenerator implements MinimumSeedGenerator { public MinimumSeed generate(MnFcn fcn, GradientCalculator gc, MnUserParameterState st, MnStrategy stra) { int n = st.variableParameters(); MnMachinePrecision prec = st.precision(); // initial starting values MnAlgebraicVector x = new MnAlgebraicVector(n); for(int i = 0; i < n; i++) x.set(i,st.intParameters().get(i)); double fcnmin = fcn.valueOf(x); MinimumParameters pa = new MinimumParameters(x, fcnmin); InitialGradientCalculator igc = new InitialGradientCalculator(fcn, st.trafo(), stra); FunctionGradient dgrad = igc.gradient(pa); MnAlgebraicSymMatrix mat = new MnAlgebraicSymMatrix(n); double dcovar = 1.; for(int i = 0; i < n; i++) mat.set(i,i, Math.abs(dgrad.g2().get(i)) > prec.eps2() ? 1./dgrad.g2().get(i) : 1.); MinimumError err = new MinimumError(mat, dcovar); double edm = new VariableMetricEDMEstimator().estimate(dgrad, err); MinimumState state = new MinimumState(pa, err, dgrad, edm, fcn.numOfCalls()); return new MinimumSeed(state, st.trafo()); } }