public MainWindowVM() { model = new SomethingModel(); Run = new DelegateCommand(async() => { IsBusy = true; Data0.Clear(); var j0 = model.RunSin((d) => { Data0.AddRange(d); RaisePropertyChanged(nameof(Data0)); }); Data1.Clear(); var j1 = model.RunCos((d) => { Data1.AddRange(d); RaisePropertyChanged(nameof(Data1)); }); Data2.Clear(); var j2 = model.RunRect((d) => { Data2.AddRange(d); RaisePropertyChanged(nameof(Data2)); }); Data3.Clear(); var j3 = model.RunSinc((d) => { Data3.AddRange(d); RaisePropertyChanged(nameof(Data3)); }); await Task.WhenAll(j0, j1, j2, j3); IsBusy = false; }); Stop = new DelegateCommand(async() => { await model.Cancel(); }); }
private void Button_Click(object sender, RoutedEventArgs e) { //Расстановка исходных точек Data2.Clear(); foreach (Axes a in Data1) { Data2.Add(new KeyValuePair <double, double>(a.XValue, a.YValue)); } lineSeries1.DataContext = Data2; //Линейная функция var solver = SolverContext.GetContext(); solver.ClearModel(); var model = solver.CreateModel(); Decision a0 = new Decision(Domain.Real, "a0"); Decision a1 = new Decision(Domain.Real, "a1"); model.AddDecision(a0); model.AddDecision(a1); Term generalError = 0; //функция которую минимизируем foreach (Axes a in Data1) { Term error = Model.Power(a0 + a1 * a.XValue - a.YValue, 2); generalError += error; } model.AddGoal("ComplicatedGoal", GoalKind.Minimize, generalError); var solution = solver.Solve(); var solutions = solution.Decisions.ToList(); var linearB = Math.Round(solutions[0].ToDouble(), 3); var linearA = Math.Round(solutions[1].ToDouble(), 3); solver.ClearModel(); //Квадратичная функция var model2 = solver.CreateModel(); Decision b0 = new Decision(Domain.Real, "b0"); Decision b1 = new Decision(Domain.Real, "b1"); Decision b2 = new Decision(Domain.Real, "b2"); model2.AddDecision(b0); model2.AddDecision(b1); model2.AddDecision(b2); generalError = 0; //функция которую минимизируем foreach (Axes a in Data1) { Term error = Model.Power(b0 + b1 * a.XValue + b2 * a.XValue * a.XValue - a.YValue, 2); generalError += error; } model2.AddGoal("ComplicatedGoal", GoalKind.Minimize, generalError); solution = solver.Solve(); solutions = solution.Decisions.ToList(); var squaredC = Math.Round(solutions[0].ToDouble(), 3); var squaredB = Math.Round(solutions[1].ToDouble(), 3); var squaredA = Math.Round(solutions[2].ToDouble(), 3); textBlock1.Text = "Коэффициенты полинома 1й степени"; textBlock2.Text = $"a = {linearA} "; textBlock3.Text = $"b = {linearB}"; textBlock4.Text = "Коэффициенты полинома 2й степени"; textBlock5.Text = $"a = {squaredA}"; textBlock6.Text = $"b = {squaredB}"; textBlock7.Text = $"c = {squaredC}"; // Отрисовка полиномов double minX = Data1[0].XValue; double maxX = Data1[0].XValue; foreach (Axes a in Data1) { if (a.XValue < minX) { minX = a.XValue; } if (a.XValue > maxX) { maxX = a.XValue; } } Data3.Clear(); for (double i = minX - 2; i <= maxX + 2; i += 0.1) { Data3.Add(new KeyValuePair <double, double>(i, linearA * i + linearB)); } lineSeries2.DataContext = Data3; Data4.Clear(); for (double i = minX - 2; i <= maxX + 2; i += 0.1) { Data4.Add(new KeyValuePair <double, double>(i, squaredA * i * i + squaredB * i + squaredC)); } lineSeries3.DataContext = Data4; }