<jupyter_start><jupyter_text>Занятие 9  Прикладная алгебра и численные методы Численное интегрирование<jupyter_code>import numpy as np
import sympy
import scipy.integrate
import pandas as pd
from google.colab import files
#!python -m pip install scipy --upgrade
sympy.__version__, scipy.__version__, np.__version__<jupyter_output><empty_output><jupyter_text>Численное интегрирование

Определенный интеграл функции $f(x)$ есть предел интегральных сумм
при стремлении к нулю диаметра разбиения (если этот предел
существует и конечен):
\begin{align}
&\int_a^b f(x)\,dx=\lim_{d\to0}\sum_{k=1}^n f(\xi_k)\Delta_k,
\quad a=x_0<x_1<\ldots<x_n=b,\\
&\xi_k\in[x_{k-1};x_k],\Delta_k=x_k-x_{k-1},\ d=\max_{1\le k\le n}
\Delta_k.
\end{align}

 Метод  трапеций

Приближенным значением интеграла $\int_a^b f(x)\,dx$ в методе
трапеций считается сумма площадей прямоугольных трапеций высоты
$h_k=x_k-x_{k-1}$ с основаниями длины $f(x_{k-1})$ и $f(x_k)$.



Площадь $S_k$ одной элементарной трапеции
\begin{align*}
S_k=\frac{f(x_{k-1})+f(x_k)}{2}h_k,
\end{align*}
сложив площади всех элементарных трапеций, получим
\begin{align*}
\int_a^b f(x)\,dx\approx\sum_{k=1}^n \frac{f(x_{k-1})+f(x_k)}{2}h_k.
\end{align*}

Пусть задана равномерная сетка $x_k=a+hk$, $k=0,\ldots,n$,
$h=(b-a)/n$, тогда
\begin{align*}
&\int_a^b f(x)\,dx\approx \frac{h }{2}\sum_{k=1}^n
(f(x_{k-1})+f(x_k))=h\Biggl(\frac{f(x_0)+ f(x_n)}{2}+\sum_{k=1}^{n-1}
f(x_k)\Biggr),
\end{align*}
погрешность этого приближения
\begin{align*}
R=-h^2\frac{b-a}{12}f''(\xi),\quad\xi\in[a;b].
\end{align*}
Если функция $f(x)$ имеет ограниченную на $[a;b]$ вторую
производную, то
\begin{align*}
|R|\le h^2M\frac{b-a}{12},\quad M=\max_{[a;b]}f''(x).
\end{align*}


 Метод Симпсона

Приближенным значением интеграла $\int_a^b f(x)\,dx$ в методе
Симпсона считается сумма площадей криволинейных трапеций ширины
$h_k=x_k-x_{k-1}$, ограниченных сверху параболой, проходящей через
точки $A_k(x_{k-1};f(x_{k-1}))$, $B_k(x_{k};f(x_k))$ и
$C_k(x_{k+1};f(x_{k+1}))$.

Обозначим $f_{-1}=f(-h)$,
$f_{0}=f(0)$,$f_{1}=f(h)$. 
Вычислим вначале площадь одной элементарной криволинейной трапеции
при $x_{k-1}=-h$, $x_{k}=0$, $x_{k+1}=h$
\begin{align*}
S=\frac{h}{3}(f_{-1}+4f_0+f_1).
\end{align*}


Пусть задана равномерная сетка $x_k=a+hk$, $k=0,\ldots,2n$,
$h=(b-a)/2n$, тогда 
\begin{align*}
&\int_a^b f(x)\,dx\approx \frac{h }{3}\sum_{k=1}^n
(f_{k-1}+4f_k+f_{k+1})= \frac{h }{3}\Biggl(f_0+f_{2n}+4\sum_{k=1}^n
f_{2k-1}+2\sum_{k=1}^{n-1} f_{2k}\Biggr),
\end{align*}
погрешность этого приближения
\begin{align*}
R=-h^4\frac{b-a}{180}f^{(4)}(\xi),\quad\xi\in[a;b].
\end{align*}
Если функция $f(x)$ имеет ограниченную на $[a;b]$  производную
четвертого порядка, то
\begin{align*}
|R|\le h^4M\frac{b-a}{180},\quad M=\max_{[a;b]}f^{(4)}(x).
\end{align*}



 Уточнение результата численного интегрирования.

В случае, если ничего не известно о производных функции $f(x)$,
можно уточнять значение интеграла $\int_a^b f(x)\,dx$, сравнивая
результаты численного интегрирования $I_h$ и $I_{h/2}$ (шаг
разбиения соответственно $h$ и $h/2$).

Пусть требуется вычислить  $\int_a^b f(x)\,dx$ с точностью $\varepsilon$,
тогда
\begin{align*}
\int_a^b f(x)\,dx\approx I_{h/2},\quad\mbox{ если }
|I_h-I_{h/2}|<\varepsilon,
\end{align*}
если же условие не выполняется, уменьшаем шаг разбиения и вычисляем
$I_{h/4}$. Процесс продолжаем до тех пор, пока не выполнится условие
\begin{align*}
|I_{h_k}-I_{h_{k+1}}|<\varepsilon,
\end{align*}
тогда считаем
\begin{align*}
\int_a^b f(x)\,dx\approx I_{h_{k+1}}.
\end{align*}

 Задание 1
Найти методом трапеций интеграл таблично заданной функции из файла f.xlsx<jupyter_code>uploaded = files.upload()

for fn in uploaded.keys():
  print('User uploaded file "{name}" with length {length} bytes'.format(name=fn, length=len(uploaded[fn])))<jupyter_output><empty_output><jupyter_text>Задание 2
Найти интеграл задания 1 методом Симпсона.<jupyter_code><jupyter_output><empty_output><jupyter_text>Задание 3
Вычислить приближенно интеграл
$$
\int_2^5\sin^3(2x - 1)\,dx
$$
используя scipy.integrate<jupyter_code><jupyter_output><empty_output><jupyter_text>Задание 4
Вычислить аналитически интеграл 
$$
\int_0^{\pi/3}\sin^5(2x)\,dx
$$
с помощью sympy, затем вычислить этот интеграл приближенно,
используя scipy.integrate (scipy.integrate.quad  и  метод Ромберга).<jupyter_code><jupyter_output><empty_output><jupyter_text>Задание 5
Вычислить интеграл задания 4 с помощью метода Симпсона из scipy, использовать равномерную сетку.<jupyter_code><jupyter_output><empty_output><jupyter_text>Задание 6
Написать функцию, которая возвращает определенный интеграл, вычисленный методом трапеций с заданной точностью. Аргументы функции - имя интегрируемой функции, пределы интегрирования и точность. Для достижения заданной точности измельчать сетку X.<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.18153526970954356, 'fraction_numerical': 0.02053941908713693, 'mean_word_length': 6.371559633027523, 'pattern_counts': {'":': 0, '<': 34, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '13342', 'license': 'MIT', 'n_tokens_mistral': 2334, 'n_tokens_neox': 2554, 'n_words': 413, 'path': 'Applied_Alg_sem_9_intergal_task.ipynb', 'repo_name': 'GalinaZh/Appl_alg2021', 'size': '4820'}