Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }