Esempio n. 1
0
 public UniformSearch(double beg, double end, int calculations, SingleVarFunc functionHandler)
 {
     beginInterval        = beg;
     endInterval          = end;
     this.calculations    = calculations;
     this.functionHandler = functionHandler;
 }
Esempio n. 2
0
 public Bisection(Interval interval, double l, SingleVarFunc functionHandler)
 {
     aArr.Add(interval.Begin);
     bArr.Add(interval.End);
     this.l = l;
     this.functionHandler = functionHandler;
 }
Esempio n. 3
0
 public GoldenRatio(Interval interval, double l, SingleVarFunc functionHandler)
 {
     aArr.Add(interval.Begin);
     bArr.Add(interval.End);
     lArr.Add(bArr[k] - aArr[k]);
     this.l = l;
     this.functionHandler = functionHandler;
 }
Esempio n. 4
0
 public Fibonacci(Interval interval, double e, double l, SingleVarFunc functionHandler)
 {
     aArr.Add(interval.Begin);
     bArr.Add(interval.End);
     this.e = e;
     this.l = l;
     this.functionHandler = functionHandler;
 }
Esempio n. 5
0
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var fibonacci       = new Fibonacci(new Interval(0, 10), 0.01, 1, functionHandler);

            var result = Math.Round(fibonacci.Calculate() * 10000) / 10000;

            Assert.AreEqual(2.6923, result);
        }
 public EquationOptions(
     SingleVarFunc functionHandler,
     Dictionary <string, double> options)
 {
     this.functionHandler = functionHandler ??
                            throw new ArgumentNullException(nameof(functionHandler));
     this.options = options ??
                    throw new ArgumentNullException(nameof(options));
 }
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var dichotomy       = new Dichotomy(new Interval(0, 10), 0.2, 1, functionHandler);

            var result = Math.Round(dichotomy.Calculate() * 1000) / 1000;

            Assert.AreEqual(2.856, result);
        }
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var uniformSearch   = new UniformSearch(0, 10, 9, functionHandler);

            var result = uniformSearch.Calculate();

            Assert.AreEqual(3, result);
        }
Esempio n. 9
0
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var goldenRatio     = new GoldenRatio(new Interval(0, 10), 1, functionHandler);

            var result = Math.Round(goldenRatio.Calculate() * 100) / 100;

            Assert.AreEqual(2.81, result);
        }
Esempio n. 10
0
        public void Calculate_ShouldReturnXPosWhereFunctionResultIsMinimum()
        {
            var functionHandler = new SingleVarFunc("2 * x ^ 2 - 12 * x");
            var bisection       = new Bisection(new Interval(0, 10), 1, functionHandler);

            var result = Math.Round(bisection.Calculate() * 1000) / 1000;

            Assert.AreEqual(3.125, result);
        }
Esempio n. 11
0
 public Dichotomy(Interval interval, double e, double l, SingleVarFunc functionHandler)
 {
     aArr.Add(interval.Begin);
     bArr.Add(interval.End);
     lArr.Add(bArr[k] - aArr[k]);
     this.e = e;
     this.l = l;
     this.functionHandler = functionHandler;
 }
Esempio n. 12
0
        private IMethod GetMethod(Interval interval, InputModel input, SingleVarFunc functionHandler)
        {
            switch (input.SelectedMethod)
            {
            case MethodType.Bisection:
                return(new Bisection(interval, input.L, functionHandler));

            case MethodType.Dichotomy:
                return(new Dichotomy(interval, input.E, input.L, functionHandler));

            case MethodType.Fibonacci:
                return(new Fibonacci(interval, input.E, input.L, functionHandler));

            case MethodType.GoldenRatio:
                return(new GoldenRatio(interval, input.L, functionHandler));

            case MethodType.UniformSearch:
                return(new UniformSearch(interval.Begin, interval.End, input.C, functionHandler));

            default:
                throw new NotImplementedException();
            }
        }
Esempio n. 13
0
 public void Draw(SingleVarFunc functionHandler, double x0, double x1)
 {
     this.MyModel.Series.Add(new FunctionSeries(functionHandler.Calculate, x0, x1, 0.1, "Current func"));
     this.MyModel.InvalidatePlot(true);
 }
Esempio n. 14
0
        public void InitializeCalculations()
        {
            InputModel    input           = default;
            SingleVarFunc functionHandler = default;
            Interval      interval        = default;
            IMethod       method          = default;

            try
            {
                input = new InputModel(MainWindow.OptionsInputControl.ViewModel);
            }
            catch
            {
                MessageBox.Show(
                    "Ввод параметров неверный, невозможно спарсить!",
                    "Ошибка ввода данных",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
                return;
            }
            try
            {
                functionHandler = new SingleVarFunc(MainWindow.EquationInputControl.ViewModel.EquationInput);
            }
            catch
            {
                MessageBox.Show(
                    "Ввод уравнения неверный, невозможно спарсить!",
                    "Ошибка ввода уравнения",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
                return;
            }
            try
            {
                interval = new SwannAlg(functionHandler).FindInterval(input.X0, input.T);
                if (interval == null)
                {
                    throw new ArgumentNullException();
                }
            }
            catch
            {
                MessageBox.Show(
                    "Интервал не был найден!",
                    "Ошибка нахождения интервала",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
            try
            {
                MainWindow.OxyPlotControl.ViewModel.Draw(functionHandler, interval.Begin, interval.End);
            }
            catch
            {
                MessageBox.Show("Не удолось нарисовать!",
                                "Ошибка отрисовки графика",
                                MessageBoxButton.OK,
                                MessageBoxImage.Error);
            }
            try
            {
                method = GetMethod(interval, input, functionHandler);
            }
            catch
            {
                MessageBox.Show(
                    "Выбор метода неверный, невозможно спарсить!",
                    "Ошибка выбора метода",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
                return;
            }
            double result = default;

            try
            {
                result = method.Calculate();
            }
            catch
            {
                MessageBox.Show(
                    "Ошибка в вычислениях, невозможно закончить вычисление!",
                    "Ошибка вычисления",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
                return;
            }
            MainWindow.OutputControl.ViewModel.PrintResult(result);
        }