public void CheckHessianDeterminantsTests()
        {
            var func  = new FunctionDefinition("f(x1,x2) = x1^2 +x2^2");
            var point = new Point(5, 4);

            var StatCondition = Hessian.ChceckHessianDeterminants(func, point);

            Assert.AreEqual(Hessian.StationaryConditions.Minimum, StatCondition);
        }
Exemplo n.º 2
0
        private void CalculateMinimum()
        {
            try
            {
                StartCalculating();

                var value = Variables.Select(v => v.Value).ToArray();
                var x0    = new Point(value);
                var NS    = new FastestFallAlgorithm(_functionDefinition, x0, InputParameters.Beta, InputParameters.Tau, InputParameters.LIteration, InputParameters.Epsilon1, InputParameters.Epsilon2, InputParameters.Epsilon3);

                calcucatedPoints = NS.Run();
                var result = calcucatedPoints.Last();

                var hessianResult = Hessian.ChceckHessianDeterminants(_functionDefinition, result, InputParameters.Epsilon1);

                UpdateDataTable(calcucatedPoints);

                if (hessianResult == Hessian.StationaryConditions.Minimum)
                {
                    _messageDialogService.ShowInfoDialog($"Znaleziono minimum lokalne w punkcie : {result} \nWartość : { _functionDefinition.GetValue(result)}");
                }
                if (hessianResult != Hessian.StationaryConditions.Minimum)
                {
                    _messageDialogService.ShowInfoDialog($"Obliczono resultat, który nie jest minimum lokalnym w punkcie : {result} \nWartość : { _functionDefinition.GetValue(result)}");
                }
            }
            catch (InvalidTauException)
            {
                _messageDialogService.ShowInfoDialog("Nie można obliczyć minimum dla podaego tau. Podaj inny parametr");
            }
            catch (UnfortunateFunctionCaseException fex)
            {
                calcucatedPoints = fex.Points;
                UpdateDataTable(fex.Points);
                var lastPoint = fex.Points.Last();
                _messageDialogService.ShowInfoDialog($"Algorytm zakończył działanie z powodu zbyt dużej ilości obliczeń. \nOstatni obliczony punkt wynosi : {lastPoint} \nWartość : { _functionDefinition.GetValue(lastPoint)}");
            }
            catch (Exception ex)
            {
                _messageDialogService.ShowInfoDialog(ex.ToString());
            }
        }