private double[] CalculateNextPoint(double[] pX, double[] pGrad, GeneralMatrix hessian) { int i = 0; double xmin = 0; double step = _step; GeneralMatrix alfaX = new GeneralMatrix(_nDim, 1); GeneralMatrix prevX = new GeneralMatrix(pX, _nDim); GeneralMatrix prevGrad = new GeneralMatrix(pGrad, _nDim); double[] intermediate = new double[_nDim];; alfaX = hessian.Multiply(prevGrad); //doing a line search to minimize alpha OneDWrapper wrapper = new OneDWrapper(_f, prevX, alfaX); LineSearch search = new LineSearch(); double[] interval = new double[Constants.BRACKET_POINTS]; int it1 = search.FindMinInterval(wrapper, _alpha, step, 50, ref interval); int it2 = search.FindMinimumViaBrent(wrapper, interval[0], interval[1], interval[2], 50, _epsilon, ref xmin); for (i = 0; i < _nDim; i++) { intermediate[i] = prevX.GetElement(i, 0) - xmin * alfaX.GetElement(i, 0); } _alpha = xmin; return(intermediate); }
private double[] CalculateNextPoint(double[] pX, double[] pGrad, GeneralMatrix hessian) { int i=0; double xmin=0; double step = _step; GeneralMatrix alfaX = new GeneralMatrix(_nDim,1); GeneralMatrix prevX = new GeneralMatrix(pX,_nDim); GeneralMatrix prevGrad = new GeneralMatrix(pGrad,_nDim); double[] intermediate = new double[_nDim];; alfaX = hessian.Multiply(prevGrad); //doing a line search to minimize alpha OneDWrapper wrapper = new OneDWrapper(_f,prevX,alfaX); LineSearch search = new LineSearch(); double[] interval = new double[Constants.BRACKET_POINTS]; int it1 = search.FindMinInterval(wrapper,_alpha,step,50,ref interval); int it2 = search.FindMinimumViaBrent(wrapper,interval[0],interval[1],interval[2],50,_epsilon, ref xmin); for (i=0;i<_nDim; i++) intermediate[i] = prevX.GetElement(i,0) - xmin*alfaX.GetElement(i,0); _alpha = xmin; return intermediate; }