예제 #1
0
        //Простейшая формула трапеций
        public static double TrapezoidalRule(PostfixNotation func_notation, double left_bound, double right_bound, int subint_count)
        {
            //Вычисляем шаг разбиения
            double norm = (right_bound - left_bound) / subint_count;

            //Получаем, собственно, разбиение (мн-во точек)
            double[] x = GetPartition(left_bound, right_bound, subint_count);

            double sum = 0;

            //Проходим циклом по мн-ву точек
            //Замечание: число точек на единицу больше, чем число отрезков разбиения
            for (int i = 0; i <= subint_count; i++)
            {
                //На концах интервала
                if (i == 0 || i == subint_count)
                {
                    //берем по половине значения ф-ции
                    sum += func_notation.Calculate(x[i]) / 2;
                }
                //В остальных точках - целиком
                else
                {
                    sum += func_notation.Calculate(x[i]);
                }
            }

            //Возвращаем полученную сумму, предварительно умножив на шаг разбиения
            return(norm * sum);
        }
예제 #2
0
        //Формула средних прямоугольников
        public static double RectangleRule(PostfixNotation func_notation, double left_bound, double right_bound, int subint_count)
        {
            //Вычисляем шаг разбиения
            double norm = (right_bound - left_bound) / subint_count;

            //Получаем, собственно, разбиение (мн-во точек)
            double[] x = GetPartition(left_bound, right_bound, subint_count);

            double sum = 0;

            //Проходим циклом по мн-ву точек
            //Замечание: число точек на единицу больше, чем число отрезков разбиения
            for (int i = 0; i < subint_count; i++)
            {
                //На каждом шагу добавляем полусумму значений ф-ции в текущей и следующей точках
                sum += func_notation.Calculate((x[i] + x[i + 1]) / 2);
            }

            //Возвращаем полученную сумму, предварительно умножив на шаг разбиения
            return(norm * sum);
        }