Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \documentclass[12pt]{article}
- % Эта строка — комментарий, она не будет показана в выходном файле
- \usepackage{ucs}
- \usepackage[utf8]{inputenc} % Включаем поддержку UTF8
- \usepackage[russian]{babel} % Включаем пакет для поддержки русского языка
- \title{Отчёт по численным методам}
- \date{}
- \author{}
- \usepackage{geometry} % А4, примерно 28-31 строк(а) на странице
- \geometry{paper=a4paper}
- \geometry{includehead=false} % Нет верх. колонтитула
- \geometry{includefoot=true} % Есть номер страницы
- \geometry{bindingoffset=0mm} % Переплет : 0 мм
- \geometry{top=20mm} % Поле верхнее: 20 мм
- \geometry{bottom=25mm} % Поле нижнее : 25 мм
- \geometry{left=25mm} % Поле левое : 25 мм
- \geometry{right=25mm} % Поле правое : 25 мм
- \geometry{headsep=10mm} % От края до верх. колонтитула: 10 мм
- \geometry{footskip=20mm} % От края до нижн. колонтитула: 20 мм
- \usepackage{amsmath} % \bar (матрицы и проч. ...)
- \usepackage{amsfonts} % \mathbb (символ для множества действительных чисел и проч. ...)
- \usepackage{mathtools} % \abs, \norm
- \DeclarePairedDelimiter\abs{\lvert}{\rvert}
- \DeclarePairedDelimiter\norm{\lVert}{\rVert}
- \usepackage{listings} %листинги
- %для подсветки листинга javascript
- \usepackage{color}
- \definecolor{lightgray}{rgb}{.9,.9,.9}
- \definecolor{darkgray}{rgb}{.4,.4,.4}
- \definecolor{purple}{rgb}{0.65, 0.12, 0.82}
- \lstdefinelanguage{JavaScript}{
- keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
- keywordstyle=\color{blue}\bfseries,
- ndkeywords={class, export, boolean, throw, implements, import, this},
- ndkeywordstyle=\color{darkgray}\bfseries,
- identifierstyle=\color{black},
- sensitive=false,
- comment=[l]{//},
- morecomment=[s]{/*}{*/},
- commentstyle=\color{purple}\ttfamily,
- stringstyle=\color{red}\ttfamily,
- morestring=[b]',
- morestring=[b]"
- }
- \lstset{
- language=JavaScript,
- %backgroundcolor=\color{lightgray},
- extendedchars=true,
- basicstyle=\footnotesize\ttfamily,
- showstringspaces=false,
- showspaces=false,
- %numbers=left,
- %numberstyle=\footnotesize,
- %numbersep=9pt,
- %tabsize=2,
- breaklines=true,
- showtabs=false,
- captionpos=b
- }
- \begin{document}
- \newpage
- {
- \thispagestyle{empty}
- \centering
- \textbf{
- *** УНИВЕРСИТЕТ ***
- Факультет ***
- Кафедра ***}
- \bigskip
- \bigskip
- \bigskip
- \bigskip
- \bigskip
- \bigskip
- \bigskip
- \vfill
- {\large Лабораторная работа №5}\\
- по курсу <<Численные методы>>\\
- \LARGE{<<Интегрирование методами Симпсона, прямоугольников и трапеций>> }
- \normalsize
- \bigskip
- \vfill
- \hfill\parbox{5cm} {
- Выполнил:\\
- студент группы *** \hfill \\
- ***\hfill \medskip\\
- Проверил:\\
- ***\hfill
- }
- \vspace{\fill}
- Москва \number\year
- \clearpage
- }
- \newpage
- {
- \tableofcontents
- \clearpage
- }
- {
- \section{Постановка задачи}
- }
- Необходимо с заданной точностью $\epsilon$ вычислить значение интеграла с помощью методов Симпсона, прямоугольников и трапеций и сравнить результаты по эффективности вычиления результата.
- В качестве подынтегральной функции возьмем функцию вида:\\
- $$x^4 - 12x^3 + 15x^2 - 6$$
- \bigskip
- {
- \section{Необходимые теоретические сведения}
- }
- Метод Симпсона заключается в приближении подынтегральной функции квадратичным многочленом. Т.е. в приближении графика функции на отрезке интегрирования параболой, проходящей по точкам $(x_{i-1}, f(x_{i-1}))$, $(x_{i-0.5}, f(x_{i-0.5}))$, $(x_i, f(x_i))$
- $$\int_a^b f(x)dx \approx \frac{h}{3} \Bigg( f(x_0) + 4 \sum_{i=1}^n f(x_{i-0.5}) + 2 \sum_{i=1}^{n-1} f(x_i) + f(x_n)\Bigg)$$
- Метод прямоугольников (средних) вычисления интеграла заключается в замене подынтегральной функции на некоторую константу, равную значению функции в центре элементарного отрезка, на которые был предварительно разбит отрезок интегрирования.
- $$\int_a^b f(x)dx = \sum_{i=1}^n f\Big(\frac{x_{i-1}+x_{i}}{2}\Big)(x_i - x_{i-1})$$
- Метод трапеций заключается в замене подынтегральной функции на линейную функцию на каждом элементарном отрезке, на которые был предварительно разбит отрезок интегрирования. Площадь под полученным графиком аппроксимируется прямоугольными трапециями.
- $$\int_a^b f(x)dx = \sum_{i=1}^n \frac{f(x_{i-1}) + f(x_i)}{2} (x_i - x_{i-1})$$
- Для получения результата с заданной точностью воспользуемся правилом Рунге остановки. Это правило заключается в вычислении интеграла по выбранной формуле при числе шагов, равном $n$, а затем при числе, равном $2n$. Погрешность вычисления при числе шагов $2n$ определяется по формуле Рунге:\\
- $$\delta_{2n}\approx \Theta \abs{I_{2n}-I_{n}}$$
- При этом для формул средних прямоугольников и трапеций $\Theta = \frac{1}{3}$, а для формулы Симпсона $\Theta = \frac{1}{15}$.
- Процесс вычислений закачивается, когда для определенного значения числа шагов $N$ будет выполнено $\delta_{2n} < \epsilon$, где $\epsilon$ - заданная точность.
- \clearpage
- {
- \section{Текст программы}
- }
- Для написания программы был использован язык Javascript.
- {
- \lstset{basicstyle=\tiny}
- \begin{lstlisting}
- K1 = 1.0/3.0;
- K2 = 1.0/15.0;
- function fx(x) { return Math.pow(x, 4) - 12*Math.pow(x, 3) + 15*Math.pow(x, 2) - 6; }
- function simpsons(f, a, b, n) {
- var h = (b - a) / n;
- var r, s = 0.0, m = 0;
- for (var x = a; x <= b; x += h) {
- r = f(x);
- if (x == a || x == b) {
- s += r;
- } else {
- m = !m;
- s += r * (m + 1) * 2.0;
- }
- }
- return s * (h / 3.0);
- }
- function rektangles(f, a, b, n) {
- var h = (b - a) / n;
- var s = 0.0;
- for (var i = 0; i < n; i++)
- s += f(a + h*(i + 0.5));
- return s * h;
- }
- function trapezoids(f, a, b, n) {
- var h = (b - a) / n;
- var s = 0.0;
- for (var i = 1; i <= n-1; i++)
- s += f(a + i*h);
- return (h/2) * (f(a) + f(b) + 2*s);
- }
- function Lab5Main() {
- var a = 0, b = 1;
- steps = 1;
- epsilon = 0.001;
- rektStop = false, trapStop = false, simpStop = false;
- do {
- rektDelta = K1 * Math.abs(rektangles(fx, a, b, 2*steps) - rektangles(fx, a, b, steps));
- trapDelta = K1 * Math.abs(trapezoids(fx, a, b, 2*steps) - trapezoids(fx, a, b, steps));
- simpDelta = K2 * Math.abs( simpsons(fx, a, b, 2*steps) - simpsons(fx, a, b, steps));
- if (rektDelta < epsilon && !rektStop) {
- rektStop = true;
- rektSteps = 2*steps;
- }
- if (trapDelta < epsilon && !trapStop) {
- trapStop = true;
- trapSteps = 2*steps;
- }
- if (simpDelta < epsilon && !simpStop) {
- simpStop = true;
- simpSteps = 2*steps;
- }
- steps *= 2;
- } while (!(rektStop && trapStop && simpStop));
- console.log("rektangles I=" + rektangles(fx, a, b, rektSteps) + " n=" + rektSteps);
- console.log("trapezoids I=" + trapezoids(fx, a, b, trapSteps) + " n=" + trapSteps);
- console.log("simpsons I=" + simpsons(fx, a, b, simpSteps) + " n=" + simpSteps);
- }
- \end{lstlisting}
- }
- \clearpage
- \newpage
- {
- \section{Результаты}
- }
- В результате работы программы были получены следующие результаты:\\
- Для подынтегральной функции $x^4 - 12x^3 + 15x^2 - 6$ на отрезке $[0, 1]$ с точностью $\epsilon=0.001$:
- \begin{table}[h!]
- \caption{Результаты работы 1}
- \begin{center}
- \begin{tabular}{|c|c|c|}
- \hline
- Метод & Значение интеграла & Кол-во итераций \\
- \hline
- Прямоугольников & -3.7996740341186523 & 16 \\
- \hline
- Трапеций & -3.8006515502929688 & 16 \\
- \hline
- Симпсона & -3.7994791666666665 & 4 \\
- \hline
- \end{tabular}
- \end{center}
- \end{table}
- Для подынтегральной функции $\exp{x}$ на отрезке $[0, 1]$ с точностью $\epsilon=0.001$:
- \begin{table}[h!]
- \caption{Результаты работы 2}
- \begin{center}
- \begin{tabular}{|c|c|c|}
- \hline
- Метод & Значение интеграла & Кол-во итераций \\
- \hline
- Прямоугольников & 1.71800219205266 & 16 \\
- \hline
- Трапеций & 1.7188411285799947 & 16 \\
- \hline
- Симпсона & 1.718318841921747 & 4 \\
- \hline
- \end{tabular}
- \end{center}
- \end{table}
- Для подынтегральной функции $\sin{x}$ на отрезке $[0, 4]$ с точностью $\epsilon=0.001$:
- \begin{table}[h!]
- \caption{Результаты работы 3}
- \begin{center}
- \begin{tabular}{|c|c|c|}
- \hline
- Метод & Значение интеграла & Кол-во итераций \\
- \hline
- Прямоугольников & 1.6539127992561373 & 64 \\
- \hline
- Трапеций & 1.653105290365576 & 64 \\
- \hline
- Симпсона & 1.6542353517615562 & 8 \\
- \hline
- \end{tabular}
- \end{center}
- \end{table}
- {
- \section{Выводы}
- }
- В ходе работы были реализованы методы Симпсона, прямоугольников и трапеций приближенного интегрирования.
- Как видно из результатов тестирования, метод трапеций показывает схожие с методом прямоугольников результаты, но это достигается бОльшим числом шагов, чем в методе Симпсона, который требует на порядок меньше итераций (4 против 16 для монотонно возрастающих на рассатриваемом отрезке функций и 8 против 64 для периодической функции) в протестированных с одинаковой точностью $\epsilon$ функциях.
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement