/* * Copyright 2015 Alexander Nozik. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ru.inr.mass.minuit import space.kscience.kmath.optimization.minuit.MINUITPlugin /** * * @version $Id$ */ internal object MnPosDef { fun test(st: MinimumState, prec: MnMachinePrecision): MinimumState { val err: MinimumError = test(st.error(), prec) return MinimumState(st.parameters(), err, st.gradient(), st.edm(), st.nfcn()) } fun test(e: MinimumError, prec: MnMachinePrecision): MinimumError { val err: MnAlgebraicSymMatrix = e.invHessian().copy() if (err.size() === 1 && err[0, 0] < prec.eps()) { err[0, 0] = 1.0 return MinimumError(err, MnMadePosDef()) } if (err.size() === 1 && err[0, 0] > prec.eps()) { return e } // std::cout<<"MnPosDef init matrix= "<