Задача. Метод прямоугольников. Вычислить определенный интеграл [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 |
С работой программы можно ознакомиться здесь.