public override void Execute() { var nvars = Fh.Point.Count; var x0 = Fh.Point; //Стартовая точка IterationCount = 0; var delta = new DenseVector(nvars); for (var i = 0; i < nvars; i++) { delta[i] = _rho; } DenseVector originalDelta = delta; while (delta.AbsoluteMinimum() > Eps && IterationCount < MaxIterations) { Vector<double> x1 = ExplanotorySearch(x0, delta); if (Fh.Y(x1) < Fh.Y(x0)) { //x1 лучше чем x0 delta = originalDelta; while (true) { Vector<double> x2 = x0 + 2* (x1 - x0); x2 = ExplanotorySearch(x2, delta); if (Fh.Y(x2) < Fh.Y(x1)) { //х2 лучше чем х1 x0 = x1; x1 = x2; } else { //x2 хуже чем х1 x0 = x1; break; } } } else { // x1 хуже чем х0 delta /= 2; } IterationCount++; } Answer = x0; }