From cdefceb2b6e1a8b59b28e61b80bb3ddcc28b122d Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Mon, 9 Dec 2024 20:57:04 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20pocz=C4=85tek=20raportu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 3 +- report/first_part/main.pdf | Bin 0 -> 38124 bytes report/first_part/main.tex | 90 +++++++++++++++++++++++++++++++++++++ report/main.tex | 5 --- 4 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 report/first_part/main.pdf create mode 100644 report/first_part/main.tex delete mode 100644 report/main.tex diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 6a3e479e..d482d2b2 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,6 +7,7 @@ "ms-python.black-formatter", "usernamehw.errorlens", "ms-python.debugpy", - "ms-python.vscode-pylance" + "ms-python.vscode-pylance", + "james-yu.latex-workshop" ] } \ No newline at end of file diff --git a/report/first_part/main.pdf b/report/first_part/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3db3463897b1eb8ca5b2ae62884e3e6492400284 GIT binary patch literal 38124 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 literal 0 HcmV?d00001 diff --git a/report/first_part/main.tex b/report/first_part/main.tex new file mode 100644 index 00000000..0a8b0af5 --- /dev/null +++ b/report/first_part/main.tex @@ -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} diff --git a/report/main.tex b/report/main.tex deleted file mode 100644 index adca86a5..00000000 --- a/report/main.tex +++ /dev/null @@ -1,5 +0,0 @@ -\documentclass{article} - -\begin{document} -Hello, World! -\end{document}