Метод прямоугольников

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Метод прямоугольников — метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах. Алгебраический порядок точности равен 0. (Для формулы средних прямоугольников равен 1).

Если отрезок \left[ a, b \right]\,\! является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по

  1. Формуле левых прямоугольников: \int^b_a f(x)\,dx \approx f(a) (b - a).
  2. Формуле правых прямоугольников: \int^b_a f(x)\,dx \approx f(b) (b - a).
  3. Формуле прямоугольников (средних): \int^b_a f(x)\,dx \approx f\left(\frac{a + b}{2}\right) (b - a).

Составные квадратурные формулы[править | править вики-текст]

В случае разбиения отрезка интегрирования на n\,\! элементарных отрезков приведённые выше формулы применяются на каждом из этих элементарных отрезков между двумя соседними узлами. В результате, получаются составные квадратурные формулы

  1. Для левых прямоугольников: \int^b_a f(x)\,dx \approx \sum_{i=0}^{n-1} f(x_i) (x_{i+1} - x_i).
  2. Для правых прямоугольников: \int^b_a f(x)\,dx \approx \sum_{i=1}^n f(x_i) (x_i - x_{i-1}).
  3. Для средних прямоугольников: \int^b_a f(x)\,dx \approx \sum_{i=0}^{n-1} f\left(\frac{x_i + x_{i+1}}{2}\right) (x_{i+1} - x_i) = \sum_{i=1}^n f\left(\frac{x_{i-1} + x_i}{2}\right) (x_i - x_{i-1}).

Формулу с вычислением значения в средней между двумя узлами точке можно применять лишь тогда, когда подынтегральная функция задана аналитически, либо каким-нибудь иным способом, допускающим вычисление значения в произвольной точке. В задачах, где функция задана таблицей значений остаётся лишь вычислять среднее значение между интегралами, посчитанными по формулам левых и правых прямоугольников соответственно, что приводит к составной квадратурной формуле трапеций.

Поскольку составные квадратурные формулы являются ни чем иным, как суммами, входящими в определение интеграла Римана, при n \to \infty\,\! они сходятся к точному значению интеграла. Соответственно, с увеличением n\,\! точность получаемого по приближённым формулам результата возрастает.


Метод средних прямоугольников

Составные формулы для равномерных сеток[править | править вики-текст]

Равномерную сетку можно описать следующим набором формул:

x_i = a + i h, \qquad h = \frac{b - a}{n},

где h\,\! — шаг сетки.

Для равномерных сеток формулы прямоугольников можно записать в виде следующих формул Котеса:

  1. Составная формула левых прямоугольников: \int^b_a f(x)\,dx \approx h \sum_{i=0}^{n-1} f_i = h (f_0 + f_1 + \ldots + f_{n-1}).
  2. Составная формула правых прямоугольников: \int^b_a f(x)\,dx \approx h \sum_{i=1}^{n} f_i = h (f_1 + f_2 + \ldots + f_{n}).
  3. Составная формула средних прямоугольников [1] \int^b_a f(x)\,dx \approx h \sum_{i=1}^{n} f(x_i-h/2) .

Погрешность метода[править | править вики-текст]

Для формул правых и левых прямоугольников погрешность составляет

E(f) = \frac{f'(\xi)}{2n} (b - a)^2.

Для формулы прямоугольников (средних)

E(f) = \frac{f''(\xi)}{24n} (b - a)^3.

Для составных формул правых и левых прямоугольников на равномерной сетке:

E(f) = \frac{f'(\xi)}{2} (b - a) h.

Для составной формулы прямоугольников:

E(f) = \frac{f''(\xi)}{24} (b - a) h^2.

Пример реализации[править | править вики-текст]

Формула средних прямоугольников для аналитически заданной функции, написанная на С

#include <stdio.h>
#include <math.h>
 
double InFunction(double x)
{ 	//Подынтегральная функция
	return sin(x); //Например, sin(x)
}
 
double CalcIntegral(double a, double b, int n)
{
	double result, h;
	int i;
 
	h = (b-a)/n; //Шаг сетки
	result = 0;
 
	for(i=1; i <= n; i++)
	{
		result += InFunction(a + h * i - h/2); //Вычисляем в средней точке и добавляем в сумму
	}
	result *= h;
 
	return result;
}
 
int main(void)
{
	double integral;
 
	integral = CalcIntegral(0,2,500);
	printf("The value of the integral is: %lf \n", integral);
	return 0;
}

См. также[править | править вики-текст]