Advertisement
Ladies_Man

#NumMeth Lab 5 Report

May 22nd, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 12.03 KB | None | 0 0
  1. \documentclass[12pt]{article}
  2. % Эта строка — комментарий, она не будет показана в выходном файле
  3. \usepackage{ucs}
  4. \usepackage[utf8]{inputenc} % Включаем поддержку UTF8
  5. \usepackage[russian]{babel}  % Включаем пакет для поддержки русского языка
  6. \title{Отчёт по численным методам}
  7. \date{}
  8. \author{}
  9.  
  10. \usepackage{geometry} % А4, примерно 28-31 строк(а) на странице   
  11.     \geometry{paper=a4paper}
  12.    \geometry{includehead=false} % Нет верх. колонтитула
  13.     \geometry{includefoot=true}  % Есть номер страницы
  14.     \geometry{bindingoffset=0mm} % Переплет    : 0  мм
  15.     \geometry{top=20mm}          % Поле верхнее: 20 мм
  16.     \geometry{bottom=25mm}       % Поле нижнее : 25 мм
  17.     \geometry{left=25mm}         % Поле левое  : 25 мм
  18.     \geometry{right=25mm}        % Поле правое : 25 мм
  19.     \geometry{headsep=10mm}  % От края до верх. колонтитула: 10 мм
  20.     \geometry{footskip=20mm} % От края до нижн. колонтитула: 20 мм
  21. \usepackage{amsmath}    % \bar    (матрицы и проч. ...)
  22. \usepackage{amsfonts}   % \mathbb (символ для множества действительных чисел и проч. ...)
  23. \usepackage{mathtools}  % \abs, \norm
  24.     \DeclarePairedDelimiter\abs{\lvert}{\rvert}
  25.    \DeclarePairedDelimiter\norm{\lVert}{\rVert}
  26. \usepackage{listings} %листинги
  27.  
  28.  %для подсветки листинга javascript
  29.  \usepackage{color}
  30. \definecolor{lightgray}{rgb}{.9,.9,.9}
  31. \definecolor{darkgray}{rgb}{.4,.4,.4}
  32. \definecolor{purple}{rgb}{0.65, 0.12, 0.82}
  33.  
  34. \lstdefinelanguage{JavaScript}{
  35.  keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
  36.  keywordstyle=\color{blue}\bfseries,
  37.  ndkeywords={class, export, boolean, throw, implements, import, this},
  38.  ndkeywordstyle=\color{darkgray}\bfseries,
  39.  identifierstyle=\color{black},
  40.  sensitive=false,
  41.  comment=[l]{//},
  42.  morecomment=[s]{/*}{*/},
  43.  commentstyle=\color{purple}\ttfamily,
  44.  stringstyle=\color{red}\ttfamily,
  45.  morestring=[b]',
  46.  morestring=[b]"
  47. }
  48.  
  49. \lstset{
  50.    language=JavaScript,
  51.    %backgroundcolor=\color{lightgray},
  52.    extendedchars=true,
  53.    basicstyle=\footnotesize\ttfamily,
  54.    showstringspaces=false,
  55.    showspaces=false,
  56.    %numbers=left,
  57.    %numberstyle=\footnotesize,
  58.    %numbersep=9pt,
  59.    %tabsize=2,
  60.    breaklines=true,
  61.    showtabs=false,
  62.    captionpos=b
  63. }
  64.  
  65.  
  66. \begin{document}
  67.    \newpage
  68.    {
  69.        \thispagestyle{empty}
  70.        \centering
  71.        
  72.        \textbf{
  73.        *** УНИВЕРСИТЕТ ***
  74.        Факультет ***
  75.        Кафедра ***}
  76.        \bigskip
  77.        \bigskip
  78.        \bigskip
  79.        \bigskip
  80.        \bigskip
  81.        \bigskip
  82.        \bigskip
  83.  
  84.        \vfill
  85.  
  86.        {\large Лабораторная работа №5}\\
  87.        по курсу <<Численные методы>>\\
  88.     \LARGE{<<Интегрирование методами Симпсона, прямоугольников и трапеций>> }
  89.     \normalsize
  90.  
  91.        \bigskip
  92.        \vfill
  93.        \hfill\parbox{5cm} {
  94.            Выполнил:\\
  95.            студент группы *** \hfill \\
  96.            ***\hfill \medskip\\
  97.            Проверил:\\
  98.            ***\hfill
  99.        }
  100.        \vspace{\fill}
  101.  
  102.        
  103.        Москва \number\year
  104.        \clearpage
  105.    }
  106.     \newpage
  107.     {
  108.         \tableofcontents
  109.         \clearpage
  110.     }
  111.    {
  112.        \section{Постановка задачи}
  113.    }
  114.    
  115.     Необходимо с заданной точностью $\epsilon$ вычислить значение интеграла с помощью методов Симпсона, прямоугольников и трапеций и сравнить результаты по эффективности вычиления результата.
  116.  
  117.     В качестве подынтегральной функции возьмем функцию вида:\\
  118.     $$x^4 - 12x^3 + 15x^2 - 6$$
  119.    
  120.    \bigskip
  121.    
  122.    {
  123.        \section{Необходимые теоретические сведения}
  124.    }
  125.     Метод Симпсона заключается в приближении подынтегральной функции квадратичным многочленом. Т.е. в приближении графика функции на отрезке интегрирования параболой, проходящей по точкам $(x_{i-1}, f(x_{i-1}))$, $(x_{i-0.5}, f(x_{i-0.5}))$, $(x_i, f(x_i))$
  126.     $$\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)$$
  127.    
  128.     Метод прямоугольников (средних) вычисления интеграла заключается в замене подынтегральной функции на некоторую константу, равную значению функции в центре элементарного отрезка, на которые был предварительно разбит отрезок интегрирования.
  129.     $$\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})$$
  130.    
  131.     Метод трапеций заключается в замене подынтегральной функции на линейную функцию на каждом элементарном отрезке, на которые был предварительно разбит отрезок интегрирования. Площадь под полученным графиком аппроксимируется прямоугольными трапециями.
  132.     $$\int_a^b f(x)dx = \sum_{i=1}^n \frac{f(x_{i-1}) + f(x_i)}{2} (x_i - x_{i-1})$$
  133.    
  134.     Для получения результата с заданной точностью воспользуемся правилом Рунге остановки. Это правило заключается в вычислении интеграла по выбранной формуле при числе шагов, равном $n$, а затем при числе, равном $2n$. Погрешность вычисления при числе шагов $2n$ определяется по формуле Рунге:\\
  135.     $$\delta_{2n}\approx \Theta \abs{I_{2n}-I_{n}}$$
  136.    
  137.     При этом для формул средних прямоугольников и трапеций $\Theta = \frac{1}{3}$, а для формулы Симпсона $\Theta = \frac{1}{15}$.
  138.    
  139.     Процесс вычислений закачивается, когда для определенного значения числа шагов $N$ будет выполнено $\delta_{2n} < \epsilon$, где $\epsilon$ - заданная точность.
  140.    
  141.    \clearpage
  142.    
  143.        {
  144.        \section{Текст программы}
  145.    }
  146.    
  147.    Для написания программы был использован язык Javascript.
  148.    
  149.    {
  150.        \lstset{basicstyle=\tiny}
  151.        \begin{lstlisting}
  152. K1 = 1.0/3.0;
  153. K2 = 1.0/15.0;
  154. function fx(x) { return Math.pow(x, 4) - 12*Math.pow(x, 3) + 15*Math.pow(x, 2) - 6; }
  155. function simpsons(f, a, b, n) {
  156.         var h = (b - a) / n;
  157.         var r, s = 0.0, m = 0;
  158.         for (var x = a; x <= b; x += h) {
  159.             r = f(x);
  160.             if (x == a || x == b) {
  161.                     s += r;
  162.             } else {
  163.                     m = !m;
  164.                     s += r * (m + 1) * 2.0;
  165.             }
  166.     }
  167.         return s * (h / 3.0);
  168. }
  169. function rektangles(f, a, b, n) {
  170.         var h = (b - a) / n;
  171.         var s = 0.0;
  172.         for (var i = 0; i < n; i++)
  173.             s += f(a + h*(i + 0.5));
  174.         return s * h;
  175. }
  176. function trapezoids(f, a, b, n) {
  177.         var h = (b - a) / n;
  178.     var s = 0.0;
  179.     for (var i = 1; i <= n-1; i++)
  180.             s += f(a + i*h);
  181.    
  182.         return (h/2) * (f(a) + f(b) + 2*s);
  183. }
  184. function Lab5Main() {
  185.     var a = 0, b = 1;
  186.     steps = 1;
  187.     epsilon = 0.001;
  188.     rektStop = false, trapStop = false, simpStop = false;
  189.     do {
  190.             rektDelta = K1 * Math.abs(rektangles(fx, a, b, 2*steps) - rektangles(fx, a, b, steps));
  191.         trapDelta = K1 * Math.abs(trapezoids(fx, a, b, 2*steps) - trapezoids(fx, a, b, steps));
  192.         simpDelta = K2 * Math.abs(  simpsons(fx, a, b, 2*steps) -   simpsons(fx, a, b, steps));
  193.        
  194.         if (rektDelta < epsilon && !rektStop) {
  195.             rektStop = true;
  196.             rektSteps = 2*steps;
  197.         }
  198.         if (trapDelta < epsilon && !trapStop) {
  199.             trapStop = true;
  200.             trapSteps = 2*steps;
  201.         }
  202.         if (simpDelta < epsilon && !simpStop) {
  203.             simpStop = true;
  204.             simpSteps = 2*steps;
  205.         }
  206.         steps *= 2;
  207.        
  208.     } while (!(rektStop && trapStop && simpStop));
  209.    
  210.     console.log("rektangles I=" + rektangles(fx, a, b, rektSteps) + " n=" + rektSteps);
  211.     console.log("trapezoids I=" + trapezoids(fx, a, b, trapSteps) + " n=" + trapSteps);
  212.     console.log("simpsons   I=" +   simpsons(fx, a, b, simpSteps) + " n=" + simpSteps);
  213. }
  214.        \end{lstlisting}
  215.    }
  216.    
  217.    \clearpage
  218. \newpage
  219.    {
  220.        \section{Результаты}
  221.    }
  222.    В результате работы программы были получены следующие результаты:\\
  223.    
  224.    Для подынтегральной функции $x^4 - 12x^3 + 15x^2 - 6$ на отрезке $[0, 1]$ с точностью $\epsilon=0.001$:
  225.    \begin{table}[h!]
  226.    \caption{Результаты работы 1}
  227. \begin{center}
  228. \begin{tabular}{|c|c|c|}
  229. \hline
  230. Метод & Значение интеграла & Кол-во итераций \\
  231. \hline
  232. Прямоугольников & -3.7996740341186523 & 16 \\
  233. \hline
  234. Трапеций & -3.8006515502929688 & 16 \\
  235. \hline
  236. Симпсона & -3.7994791666666665 & 4 \\
  237. \hline
  238. \end{tabular}
  239. \end{center}
  240.    \end{table}
  241. Для подынтегральной функции $\exp{x}$ на отрезке $[0, 1]$ с точностью $\epsilon=0.001$:
  242.     \begin{table}[h!]
  243.      \caption{Результаты работы 2}
  244.     \begin{center}
  245. \begin{tabular}{|c|c|c|}
  246. \hline
  247. Метод & Значение интеграла & Кол-во итераций \\
  248. \hline
  249. Прямоугольников & 1.71800219205266 & 16 \\
  250. \hline
  251. Трапеций & 1.7188411285799947 & 16 \\
  252. \hline
  253. Симпсона & 1.718318841921747 & 4 \\
  254. \hline
  255. \end{tabular}
  256. \end{center}
  257.    \end{table}
  258. Для подынтегральной функции $\sin{x}$ на отрезке $[0, 4]$ с точностью $\epsilon=0.001$:    
  259. \begin{table}[h!]
  260.      \caption{Результаты работы 3}
  261.     \begin{center}
  262. \begin{tabular}{|c|c|c|}
  263. \hline
  264. Метод & Значение интеграла & Кол-во итераций \\
  265. \hline
  266. Прямоугольников & 1.6539127992561373 & 64 \\
  267. \hline
  268. Трапеций & 1.653105290365576 & 64 \\
  269. \hline
  270. Симпсона & 1.6542353517615562 & 8 \\
  271. \hline
  272. \end{tabular}
  273. \end{center}
  274.    \end{table}    
  275.    
  276.    
  277.    {
  278.        \section{Выводы}
  279.        
  280.    }
  281.     В ходе работы были реализованы методы Симпсона, прямоугольников и трапеций приближенного интегрирования.
  282.    
  283.     Как видно из результатов тестирования, метод трапеций показывает схожие с методом прямоугольников результаты, но это достигается бОльшим числом шагов, чем в методе Симпсона, который требует на порядок меньше итераций (4 против 16 для монотонно возрастающих на рассатриваемом отрезке функций и 8 против 64 для периодической функции) в протестированных с одинаковой точностью $\epsilon$ функциях.
  284.    
  285.  
  286.    \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement