MNP02/sprawozdanie/sprawozdanie.tex
2018-05-08 16:36:44 +02:00

203 lines
7.6 KiB
TeX

\documentclass[]{article}
\usepackage[T1]{fontenc}
\usepackage{polski}
\usepackage[utf8]{inputenc}
\usepackage[margin=1.25in]{geometry}
\usepackage{alltt}
\usepackage{titling}
\usepackage{pdfpages}
\usepackage{float}
\usepackage{amsmath}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{amstext}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{xspace}
\usepackage{enumerate}
\usepackage{lmodern}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{alphalph}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{wrapfig}
\usepackage[polish]{babel}
\usepackage{siunitx}
\usepackage{subcaption}
\usepackage{csvsimple} % kurwa
\pgfplotsset{compat=1.15}
\usepgfplotslibrary{groupplots}
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
\usetikzlibrary{decorations.pathmorphing, arrows.meta, positioning}
\usetikzlibrary{shapes.geometric, arrows, intersections}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
% opening
\title{Rozwiązywanie Układów Równań \\ \normalsize Projekt \#2 z \texttt{MN}}
\author{Kacper Donat}
\newenvironment{column}[1]{\noindent\begin{minipage}{#1\linewidth}}{\end{minipage}\vspace{.5\baselineskip}}
\floatname{algorithm}{Program}
\begin{document}
\maketitle
\section{Porównanie metod rozwiązywania układów równań}
\begin{equation*}
\underbrace{\begin{bmatrix}
10 & -1 & -1 & 0 & \cdots & 0 \\
-1 & 10 & -1 & -1 & \cdots & 0 \\
-1 & -1 & 10 & -1 & \cdots & 0 \\
0 & -1 & -1 & 10 & \cdots & 0 \\
\vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\
0 & 0 & 0 & 0 & \cdots & 10
\end{bmatrix}}_{M}
\underbrace{\begin{bmatrix}
-0.048\\
-0.084 \\
-0.12 \\
-0.14 \\
\vdots \\
-0.12 \\
\end{bmatrix}}_{x}
=
\underbrace{\begin{bmatrix}
-0.28 \\
-0.54 \\
-0.75 \\
-0.96 \\
\vdots \\
-0.97 \\
\end{bmatrix}}_{b}
\end{equation*}
\begin{table}[H]
\centering
\begin{tabular}{l|rrr}
& \textbf{Jacobi} & \textbf{Gauss} & \textbf{LU} \\ \hline
\textbf{Czas $[\si{s}]$} & 0.085 & 0.062 & 0.58 \\
\textbf{Iteracje} & 29 & 19 & - \\
\textbf{Residuum} & $3.78 \cdot 10^{-10}$ & $8.21 \cdot 10^{-10}$ & $6.00 \cdot 10^{-16}$
\end{tabular}
\caption{Porównanie czasów oraz ilości iteracji dla pkt. \textbf{A} tj. dla $N = 981$}
\end{table}
Dla danych z podpunktu A, tj. dla $a_1 = 10$ wszystkie metody się zbiegają bez problemu. zadowalające wyniki
najszybciej osiąga metoda Gaussa-Seidla, co nie jest zakoczeniem, dodatkowo metoda Gaussa potrzebuje około $33\%$
iteracji mniej (patrz rys. \ref{fig:A:residuum}). Macierz $M$ wydaje się być dobrze uwarunkowaną macierzą dla obu
metod iteracyjnych. Metoda LU natomiast daje najdokładniejszy wynik - jednak nie jest to wynik dokładny ponieważ
obliczenia zmiennoprzecinkowe nie są dokładne. Dodatkowo, obliczanie metodą LU zajmuje około 10x więcej czasu.
\begin{equation*}
\underbrace{\begin{bmatrix}
3 & -1 & -1 & 0 & \cdots & 0 \\
-1 & 3 & -1 & -1 & \cdots & 0 \\
-1 & -1 & 3 & -1 & \cdots & 0 \\
0 & -1 & -1 & 3 & \cdots & 0 \\
\vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\
0 & 0 & 0 & 0 & \cdots & 3
\end{bmatrix}}_{M}
\underbrace{\begin{bmatrix}
-1.64 \\
-2.18 \\
-2.44 \\
-1.92 \\
\vdots \\
2.26 \\
\end{bmatrix}}_{x}
=
\underbrace{\begin{bmatrix}
-0.28 \\
-0.54 \\
-0.75 \\
-0.96 \\
\vdots \\
-0.97 \\
\end{bmatrix}}_{b}
\end{equation*}
\begin{table}[H]
\centering
\begin{tabular}{l|rrr}
& \textbf{Jacobi} & \textbf{Gauss} & \textbf{LU} \\ \hline
\textbf{Czas $[\si{s}]$} & - & - & 0.79 \\
\textbf{Iteracje} & 100 $\times$ & 100 $\times$ & - \\
\textbf{Residuum} & $7.20 \cdot 10^{13}$ & $1.79 \cdot 10^{31}$ & $5.16 \cdot 10^{-13}$
\end{tabular}
\caption{Porównanie czasów oraz ilości iteracji dla pkt. \textbf{E} tj. dla $a1 = 3$}
\end{table}
Tak skonstruowana macierz $M$ nie jest dobrze uwarunkowana do rozwiązań iteracyjnych, żadna z metod iteracyjnych się
nie zbiegła. Po 100 próbach wyraźnie widać, że metoda gaussa nie tylko szybciej się zbiega - ale w wypadku źle
uwarunkowanej macierzy również szybciej się rozbiega (rys. \ref{fig:C:residuum}), o czym świadczy znacznie większy
wektor residuum. Warto również zauważyć, że dla tego wypadku metoda LU również poradziła sobie zdecydowanie gorzej -
osiągając wynik o 3 rzędy wielkości mniej dokładny (względem normy z residuum)
Po analizie czasu dla różnych $N$, widać że metody Jacobiego oraz Gaussa-Seidla róznią się stosunkowo mało, jednak
różnica między czasem metod iteracyjnych a LU jest znaczna i wynosi nawe 2 rzędy wielkości - rys. \ref{fig:E:time}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{semilogyaxis}[
ylabel={norma z residuum}, axis x line = bottom,
xlabel={iteracja}, axis y line = left,
grid=both, width=.7\textwidth
]
\addplot table [x=iter, y=residuum, col sep=comma] {../zadA_residuum_gauss.csv};
\addlegendentry{Gauss-Seidel}
\addplot table [x=iter, y=residuum, col sep=comma] {../zadA_residuum_jacobi.csv};
\addlegendentry{Jacobi}
\end{semilogyaxis}
\end{tikzpicture}
\caption{Zależność normy z residuum od iteracji dla zadania \textbf{A}}
\label{fig:A:residuum}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{semilogyaxis}[
ylabel={norma z residuum}, axis x line = bottom,
xlabel={iteracja}, axis y line = left,
grid=both, width=.7\textwidth, no marks
]
\addplot table [x=iter, y=residuum, col sep=comma] {../zadC_residuum_gauss.csv};
\addlegendentry{Gauss-Seidel}
\addplot table [x=iter, y=residuum, col sep=comma] {../zadC_residuum_jacobi.csv};
\addlegendentry{Jacobi}
\end{semilogyaxis}
\end{tikzpicture}
\caption{Zależność normy z residuum od iteracji dla zadania \textbf{C}}
\label{fig:C:residuum}
\end{figure}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{semilogyaxis}[
ylabel={czas [$\si{s}$]}, axis x line = bottom,
xlabel={$N$}, axis y line = left,
grid=both, width=.7\textwidth,
smooth
]
\addplot table [x=n, y=lu, col sep=comma] {../zadE.csv};
\addlegendentry{LU}
\addplot table [x=n, y=gauss, col sep=comma] {../zadE.csv};
\addlegendentry{Gauss-Seidel}
\addplot table [x=n, y=jacobi, col sep=comma] {../zadE.csv};
\addlegendentry{Jacobi}
\end{semilogyaxis}
\end{tikzpicture}
\caption{Zależność czasu od wielkości N}
\label{fig:E:time}
\end{figure}
\end{document}