Ю11.8

Метод Симпсона.  Вычислить определённый интеграл [latex]I=\int_{a}^{b}{f\left(x \right)}dx[/latex] по формуле Симпсона: [latex]I\approx \frac{b-a}{6n}\left(y_{0}+4y_{1}+2y_{2}+\cdot \cdot \cdot +4y_{2n-1}+y_{2n} \right)[/latex], где [latex]2n[/latex] — количество отрезков разбиения, [latex]y_{0}[/latex], [latex]y_{1}[/latex], …, [latex]y_{2n}[/latex] — значение функции [latex]f\left(x \right)[/latex] на концах отрезков.
В задачах на численное интегрирование определённый интеграл требуется найти с заданной точностью, для чего вычисление по формуле метода рекомендуется проводить многократно, каждый раз уменьшая шаг интегрирования в два раза, пока разница между соседними приближениями не станет меньше заданной погрешности.

Функция [latex]a[/latex] [latex]b[/latex] [latex]eps[/latex] Интеграл Комментарий
[latex]f\left(x \right)=\sin \left(x^{2}+2x \right)[/latex] 1 3 0.0001 -0.143058 Тест пройден.
[latex]\ln \left(1+x \right)[/latex] 1 3 0.0001 2.15888 Тест пройден.
[latex]\tan \left(3x^{3} \right)[/latex] 2 15 0.01 0.0256033 Тест пройден.
[latex]x\left( x^{2}-1\right)\left(x+1 \right)[/latex] -1 1 0.3 -0.265625 Тест пройден.

C++:

Java:

С помощью программы можно вычислить интеграл любой непрерывной на  [latex]\left[a;b \right][/latex]  функции, для этого нужно изменить 7 строку.

В условии главного цикла [latex]N\leq 4[/latex], так как важно, чтобы цикл выполнился хотя бы дважды. Потому что первый раз мы сравниваем новое значение интеграла не с предыдущим вычисленным, а с нулём, и если новое значение интеграла будет меньше погрешности, то цикл прекратится после первого же выполнения (без условия [latex]N\leq 4[/latex]).

Задача на Ideone:
C++
Java

Related Images:

Ю11.6

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

Введена функция, которая подсчитывает значение в точке.  Согласно формуле в условии, вычисляем требуемое значение.

В условии приведена более точная формула, чем в учебнике.

С помощью программы можем наблюдать увеличение точности при увеличении количества отрезков разбиения. Сведем некоторые результаты в таблицу:

Количество отрезков разбиения на [a,b] Результат
50 2.0032
500 2.000032
1000 2.000008
5000 2.00000032

С работой программы можно ознакомиться здесь.

Related Images:

Ю11.7

Метод трапеций. Вычислить определенный интеграл [latex]I=\int_{b}^{a}f(x)dx [/latex] методом трапеций:[latex] I\approx \frac{b-a}{2n}(y_{0}+2y_{1}+\dots+2y_{n-1}+y_{n}), [/latex] где [latex] n [/latex] — количество отрезков разбиения; [latex]y_{0},y_{1},\ldots,y_{n} [/latex] — значения функции [latex]f(x) [/latex] на концах отрезков.

Вычислим определенный интеграл для функции [latex]y=-3x^2+2x+9[/latex] [latex] \int_{-1}^{2}(-3x^2+2x+9)dx=21 [/latex]

Решение:

Ссылка на ideone C++: http://ideone.com/RJpYSw

Ссылка на ideone Java: http://ideone.com/AfEDeq

 

В условии самой задачи весь алгоритм решения расписан.

Related Images: