public void Maximum_In_0(double startPoint, double step) { var optimization = new UnconditionalOptimization(MaximizationFunction); var(leftBound, rightBound) = optimization.GetBoundForMaximization(startPoint, step); Assert.True(leftBound <= 0); Assert.True(rightBound >= 0); }
static void Main(string[] args) { var optimization = new UnconditionalOptimization(MinimizationFunction); var(leftBound, rightBound) = optimization.GetBoundForMinimization(startPoint, h); Console.WriteLine("Первичные границы: [{0}; {1}]", leftBound, rightBound); Console.WriteLine("///Уточнение границ методом деления пополам///"); var halvingMethod = new HalvingMethod(MinimizationFunction); var result = halvingMethod.Calculation(leftBound, rightBound); Console.WriteLine("Границы: [{0}; {1}] Итераций = {2}", halvingMethod.LeftBound, halvingMethod.RightBound, halvingMethod.Iteration); Console.WriteLine("x = {0:f3}\nЗначение функции {1:f3}", result, MinimizationFunction(result)); Console.ReadKey(); }
static void Main(string[] args) { const double eps = 0.001; Console.WriteLine("Установление первоначальных границ"); var boundFoundary = new UnconditionalOptimization(MaximizationFunction); boundFoundary.OnIteration += BoundFoundary_OnIteration; var(startLeftBound, startRightBound) = boundFoundary.GetBoundForMaximization(5, .5); DisplayResult((startLeftBound, startRightBound), boundFoundary.Iterations, eps); Console.WriteLine("Уточнение границ методом Золотого сечения"); var goldenSection = new GoldenSection(MaximizationFunction); goldenSection.OnIteration += BoundFoundary_OnIteration; var goldenSectionBounds = goldenSection.FindMax(startLeftBound, startRightBound, eps); DisplayResult(goldenSectionBounds, goldenSection.Iterations, eps); Console.WriteLine("Квадратичная апроксимация"); var quadraticApproximation = new QuadraticApproximation(MaximizationFunction); quadraticApproximation.OnIteration += BoundFoundary_OnIteration; var quadApproxBounds = quadraticApproximation.Calculate(startLeftBound, startRightBound, eps); DisplayResult(quadApproxBounds, quadraticApproximation.Iterations, eps); Console.WriteLine("Метод Ньютона"); var newtonsMethod = new NewtonsMethod(MaximizationFunctionDerivative1, MaximizationFunctionDerivative2); var rootNewtoon = newtonsMethod.Newton(-9, eps); Console.WriteLine($"Корень {rootNewtoon}"); Console.WriteLine(); Console.ReadLine(); }