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