Esempio n. 1
0
        private void button_trueSolution_Click(object sender, EventArgs e)
        {
            TrueSolution trueSolution = new TrueSolution(Convert.ToDouble(textBox_x_0.Text), Convert.ToDouble(textBox_u_0.Text));

            trueSolution.FindPoints(Convert.ToDouble(textBox_borderRight.Text));
            cartesianChart1.Series.Add(new LineSeries
            {
                Title  = "Истинное решение",
                Values = new ChartValues <ObservablePoint>(trueSolution
                                                           .GetPoints()
                                                           .Select(_ => new ObservablePoint(_.X, _.V))),
                PointGeometry     = DefaultGeometries.Square,
                Stroke            = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(107, 185, 69)),
                PointGeometrySize = 5
            });
        }
Esempio n. 2
0
        private void button_start_Click(object sender, EventArgs e)
        {
            CounterOfTests++;
            if (comboBox_TaskSelect.SelectedIndex == 0 || comboBox_TaskSelect.SelectedIndex == 1)
            {
                Function Func;

                if (comboBox_TaskSelect.SelectedIndex == 0)
                {
                    Func = new TestFunction();
                    InitDataGrid_TestTask();
                }
                else
                {
                    Func = new BasicFunction();
                    InitDataGrid_Task1();
                }

                Func <double, double, double> function = Func.FunctionValue;
                Runge_Kutta_2 RK_2 = new Runge_Kutta_2(Convert.ToDouble(textBox_x_0.Text),
                                                       Convert.ToDouble(textBox_u_0.Text),
                                                       Convert.ToDouble(textBox_h.Text), Convert.ToDouble(textBox_eps.Text),
                                                       Convert.ToDouble(textBox_borderRight.Text),
                                                       Convert.ToDouble(textBox_borderAccuracy.Text), Convert.ToInt32(textBox_max_steps.Text), function,
                                                       checkBox_StepControlChecked.Checked);
                RK_2.Run();

                cartesianChart1.Series.Add(new LineSeries
                {
                    Title  = "Численное решение #" + Convert.ToString(CounterOfTests),
                    Values = new ChartValues <ObservablePoint>(RK_2
                                                               .GetPoints()
                                                               .Select(_ => new ObservablePoint(_.X, _.V))),
                    PointGeometrySize = 5
                });

                List <MetodInfo>     metodInfos     = RK_2.GetMetodInfos();
                List <FunctionValue> functionValues = RK_2.GetFunctionValues();

                if (comboBox_TaskSelect.SelectedIndex == 0)
                {
                    TrueSolution trueSolution = new TrueSolution(Convert.ToDouble(textBox_x_0.Text),
                                                                 Convert.ToDouble(textBox_u_0.Text));
                    for (int index = 0; index < metodInfos.Count; index++)
                    {
                        var metodInfo     = metodInfos[index];
                        var functionValue = functionValues[index];
                        dataGridView_MetodInfo.Rows.Add
                            (metodInfo.Iteration, metodInfo.X, functionValue.V, functionValue.VHalf,
                            functionValue.DeltaV,
                            metodInfo.e, metodInfo.H, metodInfo.CountMinusH, metodInfo.CountPlusH,
                            trueSolution.FunctionValue(metodInfo.X, functionValue.V),
                            Math.Abs(trueSolution.FunctionValue(metodInfo.X, functionValue.V) - functionValue.V)
                            .ToString("F8"));
                    }


                    dataGridView_MetodInfo.AutoResizeColumns();

                    Func <double, double, double> func = trueSolution.FunctionValue;
                    ExperimentInfo experimentInfo      = new ExperimentInfo(metodInfos, functionValues, func);

                    InitDataGrid_TestTaskInfo();
                    dataGridView_TaskInfo.Rows.Add(experimentInfo.StepsCount,
                                                   Convert.ToDouble(textBox_borderRight.Text) - experimentInfo.LastX,
                                                   experimentInfo.MaxE, experimentInfo.HPlusCount, experimentInfo.HMinusCount,
                                                   experimentInfo.MaxH, experimentInfo.XMaxH, experimentInfo.MinH, experimentInfo.XMinH,
                                                   experimentInfo.MaxDeltaUV, experimentInfo.XMaxDeltaUV);
                }
                else
                {
                    for (int index = 0; index < metodInfos.Count; index++)
                    {
                        var metodInfo     = metodInfos[index];
                        var functionValue = functionValues[index];
                        dataGridView_MetodInfo.Rows.Add
                            (metodInfo.Iteration, metodInfo.X, functionValue.V, functionValue.VHalf,
                            functionValue.DeltaV,
                            metodInfo.e, metodInfo.H, metodInfo.CountMinusH, metodInfo.CountPlusH);
                    }
                    dataGridView_MetodInfo.AutoResizeColumns();
                    ExperimentInfo experimentInfo = new ExperimentInfo(metodInfos, functionValues);

                    InitDataGrid_TaskInfo();
                    dataGridView_TaskInfo.Rows.Add(experimentInfo.StepsCount,
                                                   Convert.ToDouble(textBox_borderRight.Text) - experimentInfo.LastX,
                                                   experimentInfo.MaxE, experimentInfo.HMinusCount, experimentInfo.HPlusCount,
                                                   experimentInfo.MaxH, experimentInfo.XMaxH, experimentInfo.MinH, experimentInfo.XMinH);
                }
            }
            else
            {
                InitDataGrid_Task2();
                FunctionF            f      = new FunctionF();
                FunctionG            g      = new FunctionG(Convert.ToDouble(textBox_a.Text), Convert.ToDouble(textBox_b.Text));
                Runge_Kutta_2_System RK_2_s = new Runge_Kutta_2_System(Convert.ToDouble(textBox_x_0.Text),
                                                                       Convert.ToDouble(textBox_u_0.Text), Convert.ToDouble(textBox_y_0.Text),
                                                                       Convert.ToDouble(textBox_h.Text), Convert.ToDouble(textBox_eps.Text),
                                                                       Convert.ToDouble(textBox_borderRight.Text), Convert.ToDouble(textBox_borderAccuracy.Text),
                                                                       Convert.ToInt32(textBox_max_steps.Text), checkBox_StepControlChecked.Checked, g.FunctionValue, f.FunctionValue);
                RK_2_s.Run();

                List <MetodInfo>     metodInfos     = RK_2_s.GetMetodInfos();
                List <Point2D>       functionValues = RK_2_s.GetPoints();
                ExperimentInfoSystem experimentInfo = new ExperimentInfoSystem(metodInfos, functionValues);

                cartesianChart1.Series.Add(new LineSeries
                {
                    Title  = "Численное решение #" + Convert.ToString(CounterOfTests),
                    Values = new ChartValues <ObservablePoint>(RK_2_s
                                                               .GetPoints()
                                                               .Select(_ => new ObservablePoint(_.X, _.V1))),
                    PointGeometrySize = 5
                });
                cartesianChart2.Series.Add(new LineSeries
                {
                    Title  = "Численное решение #" + Convert.ToString(CounterOfTests),
                    Values = new ChartValues <ObservablePoint>(RK_2_s
                                                               .GetPoints()
                                                               .Select(_ => new ObservablePoint(_.X, _.V2))),
                    PointGeometrySize = 5
                });
                cartesianChart3.Series.Add(new LineSeries
                {
                    Title  = "Численное решение #" + Convert.ToString(CounterOfTests),
                    Values = new ChartValues <ObservablePoint>(RK_2_s
                                                               .GetPoints()
                                                               .Select(_ => new ObservablePoint(_.V1, _.V2))),
                    PointGeometrySize = 5
                });

                for (int index = 0; index < metodInfos.Count; index++)
                {
                    var metodInfo     = metodInfos[index];
                    var functionValue = functionValues[index];
                    dataGridView_MetodInfo.Rows.Add
                        (metodInfo.Iteration, metodInfo.X, functionValue.V1, functionValue.V2,
                        metodInfo.e, metodInfo.H, metodInfo.CountMinusH, metodInfo.CountPlusH);
                }
                dataGridView_MetodInfo.AutoResizeColumns();

                InitDataGrid_TaskInfo();
                dataGridView_TaskInfo.Rows.Add(experimentInfo.StepsCount,
                                               Convert.ToDouble(textBox_borderRight.Text) - experimentInfo.LastX,
                                               experimentInfo.MaxE, experimentInfo.HMinusCount, experimentInfo.HPlusCount,
                                               experimentInfo.MaxH, experimentInfo.XMaxH, experimentInfo.MinH, experimentInfo.XMinH);
            }
        }