203 lines
7.6 KiB
TeX
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}
|