Задача. Метод прямоугольников. Вычислить определенный интеграл [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 |
С работой программы можно ознакомиться здесь.
— В интеграле забыли dx
— В задачнике ошибка в формуле. Укажите, пожалуйста, это в отчёте и приведите правильную формулу. Программировать нужно правильную формулу. Ошибка такая. Для левых треугольников из суммы нужно исключить первое слагаемое, для правых — последнее. Для более точной формулы средних прямоугольников крайние слагаемые делятся пополам. Её и используйте, пожалуйста: [latex]\int^b_a f(x)\,dx \approx h (\frac{f_0}{2} + f_1 + \ldots + f_{n-1}+\frac{f_{n}}{2}).[/latex]
Фактически это уже получается не формула прямоугольников, а более точная формула — трапеций.
— В метках даже «метод прямоугольников» отсутствует.
Исправлено.
У Вас указан фактически только один тест \int_{0}^{2}{(2x^{3}-7x+4)dx}=2 — этого маловато, чтобы проверить корректность работы программы. Даже для a=0, b=2 не показано, как точность повышается с увеличением количества отрезков разбиения n.
Решение дополнено.
Засчитано, 10 баллов.