Задача. Метод прямоугольников. Вычислить определенный интеграл [latex]I=\int_{a}^{b}{f(x)dx}[/latex] методом прямоугольников: [latex]\int^b_a f(x)\,dx \approx h (\frac{y_0}{2} + y_1 + \ldots + y_{n-1}+\frac{y_{n}}{2})[/latex], где [latex]n[/latex] — количество отрезков разбиения; [latex]y_{0},y_{1},…,y_{n}[/latex] — значения функции на концах отрезков.
Вычислим для функции [latex] f(x)=2x^{3}-7x+4[/latex]:
[latex] \int_{0}^{2}{(2x^{3}-7x+4)dx}=2[/latex]| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> using namespace std; double f(double x) { 	return (2*x*x*x-7*x+4); } int main()  { 	double a,b; 	int n; 	cin>>a>>b>>n; 	double s=(f(a)+f(b))/2; 	double h=(b-a)/n; 	for (int i=1; i<=n-1; i++) 	{  		s+=f(a+i*h); 	} 	double I=h*s; 	cout<<setprecision(10)<<I<<endl; 	return 0; } | 
Введена функция, которая подсчитывает значение в точке. Согласно формуле в условии, вычисляем требуемое значение.
В условии приведена более точная формула, чем в учебнике.
С помощью программы можем наблюдать увеличение точности при увеличении количества отрезков разбиения. Сведем некоторые результаты в таблицу:
| Количество отрезков разбиения на [a,b] | Результат | 
| 50 | 2.0032 | 
| 500 | 2.000032 | 
| 1000 | 2.000008 | 
| 5000 | 2.00000032 | 
С работой программы можно ознакомиться здесь.
