Esempio n. 1
0
        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();
            });
        }
Esempio n. 2
0
        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;
        }