public UniformSearch(double beg, double end, int calculations, SingleVarFunc functionHandler) { beginInterval = beg; endInterval = end; this.calculations = calculations; this.functionHandler = functionHandler; }
public Bisection(Interval interval, double l, SingleVarFunc functionHandler) { aArr.Add(interval.Begin); bArr.Add(interval.End); this.l = l; this.functionHandler = functionHandler; }
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; }
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; }
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); }
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); }
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); }
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; }
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(); } }
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); }
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); }