\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}