feat: początek raportu

This commit is contained in:
Krzysztof Rudnicki 2024-12-09 20:57:04 +01:00
parent 2112036e56
commit cdefceb2b6
4 changed files with 92 additions and 6 deletions

View File

@ -7,6 +7,7 @@
"ms-python.black-formatter", "ms-python.black-formatter",
"usernamehw.errorlens", "usernamehw.errorlens",
"ms-python.debugpy", "ms-python.debugpy",
"ms-python.vscode-pylance" "ms-python.vscode-pylance",
"james-yu.latex-workshop"
] ]
} }

BIN
report/first_part/main.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,90 @@
\documentclass[12pt]{article}
\usepackage[polish]{babel}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=blue,
pdfpagemode=FullScreen,
}
\usepackage{listings}
\lstset{
basicstyle=\ttfamily\small,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{green!60!black},
stringstyle=\color{red},
numbers=left,
numberstyle=\tiny,
stepnumber=1,
numbersep=5pt,
frame=lines,
breaklines=true,
captionpos=b
}
\title{Rozwiązanie układu równań liniowych iteracyjną metodą Richardsona \\
Sprawozdanie, Etap I}
\author{Kacper Górka, Krzysztof Rudnicki, Aleksandra Sobala}
\begin{document}
\maketitle
\section{Zadanie}
\paragraph{Metoda Richardsona}
Metoda Richardsona służy do iteracyjnego rozwiązywania systemów równań liniowych postaci $Ax = b$.
\\
Pojedyńcza iteracja wygląda następująco:
\[
x^{(k+1)} = x^{(k)} + \omega (b - Ax^{(k)})
\]
Gdzie $\omega$ to skalar wybrany tak by $x^{(k)}$ zbiegało
\paragraph{Wymagania}
Mieliśmy za zadanie stworzyć program rozwiązujący układ równań dla wygenerowanych
macierzy gęstych oraz dla macierzy rzadkich: \\
\href{https://sparse.tamu.edu/Nemeth/nemeth12}{nemeth12} \\
i \\
\href{https://sparse.tamu.edu/Grund/poli3}{poli3}
\section{Baza}
\paragraph{Generowanie i zapisywanie macierzy}
Macierze gęste są przez nas generowane przy użyciu biblioteki \textbf{numpy},
aby przyśpieszyć obliczenia zapewniamy \textbf{bewzględna dominację wierszową głównej przekątnej} i
upewniamy się że wygenerowana macierz jest \textbf{symetryczna i dodatnio określona} \\
Macierze są potem zapisywane do pliku w
formacie .npz, łącznie z ich wartościami własnymi, tak by
skrócić działanie programu i ujednolicić testy
\\ \null \\
Macierze nemeth12 i poli3 są pobierane ze strony podanej wyżej, dla macierzy nemeth12 aby spełnić
warunki stosowalności metody musieliśmy przemnożyć ją przez -1
\paragraph{Testy}
Do testów wykorzystujemy biblioteki \textbf{numpy} oraz \textbf{pytest} oraz wbudowane w Pythona
narzędzia do mierzenia czasu. \\
Sprawdzamy popawność naszych algorytmów poprzez porównanie naszych wyników z wynikami policzonymi przy
wykorzystaniu funkcji np.linalg.norm z biblioteki numpy. Jeżeli nasze rozwiązanie różni się od
rozwiązania numpy o mniej niż $8 \times 10^{-3}$ akceptujemy je jako poprawne \\
Zarówno wielkośc macierzy, jej typ i typ metody użytej do zrównoleglenia Richardsona jest podawana jako
parametr testów, pozwala nam to łatwo dodawać nowe metody zrównoleglenia bez zmiany kodu testów.
\paragraph{Funkcje pomocnicze}
Wszelkie podstawowe metody operacji na macierzach takie jak mnożenie wektorów, macierzy itp,
napisaliśmy od zera, bez użycia zewnętrznych bibliotek, funkcje są zdefiniowane w pliku
\textbf{linear\_algebra\_utils.py}
\paragraph{Metoda Richardsona}
Metoda Richardsona jest zaimplementowana w pliku \textbf{richardson\_method.py}, sprowadza się ona do
pętli:
\begin{lstlisting}[language=Python, basicstyle=\ttfamily\small, breaklines=true, caption=Python Code for Iterative Solver]
for iteration in range(self.max_iterations):
Ax = self.LinAlg.matrix_vector_multiply(self.A, x)
residual = self.LinAlg.vector_vector_subtraction(self.b, Ax)
x = self.LinAlg.vector_vector_addition(
x,
self.LinAlg.scalar_vector_multiply(self.omega, residual)
)
if self.LinAlg.SequentialLinearAlgebraUtils.vector_norm(residual) < self.tol:
break
\end{lstlisting}
Dla różnych metod zrównoleglenia stosujemy różne implementacje podstawowych funkcji odpowiedzialnych za
mnożenie macierzy przez wektor, odejmowanie wektorów itp. Ponownie, dzięki temu możemy łatwo dodawać nowe
metody zrównoleglenia bez zmiany podstawowego kodu Richardsona
\section{Zrównoleglenie}
\end{document}

View File

@ -1,5 +0,0 @@
\documentclass{article}
\begin{document}
Hello, World!
\end{document}