Ejemplo n.º 1
0
        static void VerifyIntegrals()
        {
            string integrand        = "x*x";
            double startValue       = -1;
            double endValue         = 1;
            int    iterationsNumber = 1000;
            string parameterName    = "x";

            Integral.IntegralInputParameters inputParameters = new IntegralInputParameters
            {
                IntegrandExpression = integrand,
                StartValue          = startValue,
                EndValue            = endValue,
                IterationsNumber    = iterationsNumber,
                ParameterName       = parameterName
            };

            Integral.Integral integral                 = Integral.Integral.GetIntegral(CalculationType.LeftRectangle, inputParameters);
            double            resultLeftRectangle      = integral.Calculate();
            double            resultLeftRectangleAsync = integral.CalculateAsync();

            integral = Integral.Integral.GetIntegral(CalculationType.RightRectangle, inputParameters);
            double resultRightRectangle      = integral.Calculate();
            double resultRightRectangleAsync = integral.CalculateAsync();

            integral = Integral.Integral.GetIntegral(CalculationType.AverageRectangle, inputParameters);
            double resultAverageRectangle      = integral.Calculate();
            double resultAverageRectangleAsync = integral.CalculateAsync();

            integral = Integral.Integral.GetIntegral(CalculationType.Trapezium, inputParameters);
            double resultTrapezium      = integral.Calculate();
            double resultTrapeziumAsync = integral.CalculateAsync();

            integral = Integral.Integral.GetIntegral(CalculationType.Simpson, inputParameters);
            double resultSimpson      = integral.Calculate();
            double resultSimpsonAsync = integral.CalculateAsync();

            Console.WriteLine($"Left rectangle: {resultLeftRectangle}");
            Console.WriteLine($"Left rectangle async: {resultLeftRectangleAsync}");
            Console.WriteLine($"Right rectangle: {resultRightRectangle}");
            Console.WriteLine($"Right rectangle async: {resultRightRectangleAsync}");
            Console.WriteLine($"Average rectangle: {resultAverageRectangle}");
            Console.WriteLine($"Average rectangle async: {resultAverageRectangleAsync}");
            Console.WriteLine($"Trapezium: {resultTrapezium}");
            Console.WriteLine($"Trapezium async: {resultTrapeziumAsync}");
            Console.WriteLine($"Simpson: {resultSimpson}");
            Console.WriteLine($"Simpson async: {resultSimpsonAsync}");

            Console.ReadKey();
        }
Ejemplo n.º 2
0
        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            if (double.TryParse(textBoxA.Text, out double a) && double.TryParse(textBoxB.Text, out a) &&
                double.Parse(textBoxA.Text) < double.Parse(textBoxB.Text) && comboBoxMethods.SelectedIndex > -1)
            {
                List <string> sections      = listBox1.Items.Cast <string>().ToList();
                List <double> times         = new List <double>();
                List <double> parallelTimes = null;
                if (checkBoxParallelMode.Checked)
                {
                    parallelTimes = new List <double>();
                }


                CalculationType currentMethod;
                switch (comboBoxMethods.SelectedIndex)
                {
                case 0: currentMethod = CalculationType.AverageRectangle; break;

                case 1: currentMethod = CalculationType.Trapezium; break;

                case 2: currentMethod = CalculationType.Simpson; break;

                default: MessageBox.Show("Метод не был выбран!"); return;
                }

                IntegralInputParameters inputParameters = new IntegralInputParameters
                {
                    IntegrandExpression = textBoxFunction.Text,
                    StartValue          = int.Parse(textBoxA.Text),
                    EndValue            = int.Parse(textBoxB.Text),
                    ParameterName       = "x"
                };

                Integral currentIntegral = Integral.GetIntegral(currentMethod, inputParameters);

                double    result    = 0.0;
                Stopwatch stopwatch = new Stopwatch();

                foreach (string section in sections)
                {
                    currentIntegral.IterationsNumber = Convert.ToInt32(section);

                    stopwatch.Reset();
                    stopwatch.Start();
                    result = currentIntegral.Calculate();
                    stopwatch.Stop();

                    times.Add(stopwatch.ElapsedMilliseconds / 1000.0);

                    if (checkBoxParallelMode.Checked)
                    {
                        stopwatch.Reset();
                        stopwatch.Start();
                        currentIntegral.CalculateAsync();
                        stopwatch.Stop();

                        parallelTimes.Add(stopwatch.ElapsedMilliseconds / 1000.0);
                    }
                }

                labelResult.Text = $"Результат: {result.ToString()}";

                this.chartResult.Series.Clear();
                this.chartResult.Titles.Clear();

                this.chartResult.Titles.Add("Зависимость времени выполнения от количества разбиений.");

                Series series = this.chartResult.Series.Add("Время выполнения");
                series.ChartType = SeriesChartType.Line;

                for (int i = 0; i < times.Count; i++)
                {
                    series.Points.AddXY(sections[i], times[i]);
                }

                if (checkBoxParallelMode.Checked)
                {
                    Series parallelSeries = this.chartResult.Series.Add("Параллельный вариант");
                    parallelSeries.ChartType = SeriesChartType.Line;

                    for (int i = 0; i < parallelTimes.Count; i++)
                    {
                        parallelSeries.Points.AddXY(sections[i], parallelTimes[i]);
                    }
                }
            }
            else
            {
                MessageBox.Show("Параметры A и B заданы не корректно!");
            }
        }