From fcb00cd96982ba34252046fa35cd0d13ef4387bc Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Mon, 6 Nov 2023 08:52:40 -0700 Subject: [PATCH] nov 3 notes --- doc/software_manual.org | 4 +- doc/software_manual.pdf | Bin 179781 -> 185665 bytes doc/software_manual.tex | 293 ++++++++++++++++++++++++++++++++-------- homeworks/hw-5.org | 2 +- homeworks/hw-5.pdf | Bin 81313 -> 81812 bytes homeworks/hw-5.tex | 22 +-- notes/Nov-3.org | 62 +++++++++ 7 files changed, 312 insertions(+), 71 deletions(-) create mode 100644 notes/Nov-3.org diff --git a/doc/software_manual.org b/doc/software_manual.org index eebcf17..383b0c5 100644 --- a/doc/software_manual.org +++ b/doc/software_manual.org @@ -27,7 +27,7 @@ MacOS as well as ~x86~ Arch Linux. 2. ~make~ Then, as of homework 5, the testing routines are provided in ~test~ and utilize the -utest microlibrary. They compile to a binary in ~./dist/lizfcm.test~. +~utest~ "micro"library. They compile to a binary in ~./dist/lizfcm.test~. Execution of the Makefile will perform compilation of individual routines. @@ -39,7 +39,7 @@ produce an object file: gcc -Iinc/ -lm -Wall -c src/.c -o build/.o \end{verbatim} -Which is then bundled into a static library in ~lib/lizfcm.a~ which can be linked +Which is then bundled into a static library in ~lib/lizfcm.a~ and can be linked in the standard method. * The LIZFCM API diff --git a/doc/software_manual.pdf b/doc/software_manual.pdf index 8cd70f44d3246a6c57671a2c7571cdb848f117fb..d6c03b3744fde976ec7f57301174cc940907bf03 100644 GIT binary patch delta 43916 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

wO)G(~7#xc8NNNw*#ygPQOr{=Mbq8 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

iS@B3qZ8bU~)t( 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 + 1, 0.0); + for (size_t i = 0; i < v->size; ++i) + pushed->data[i] = v->data[i]; + pushed->data[v->size] = x; + return pushed; +} +\end{verbatim} + +\subsubsection{\texttt{slice\_element}} +\label{sec:orga743fd5} +\begin{itemize} +\item Author: Elizabeth Hunt +\item Name: \texttt{slice\_element} +\item Location: \texttt{src/vector.c} +\item Input: a pointer to an \texttt{Array\_double} +\item Output: a new \texttt{Array\_double} with element \texttt{x} sliced. +\end{itemize} + +\begin{verbatim} +Array_double *slice_element(Array_double *v, size_t x) { + Array_double *sliced = InitArrayWithSize(double, v->size - 1, 0.0); + for (size_t i = 0; i < v->size - 1; ++i) + sliced->data[i] = i >= x ? v->data[i + 1] : v->data[i]; + return sliced; +} +\end{verbatim} + \subsubsection{\texttt{copy\_vector}} -\label{sec:org57afc74} +\label{sec:org8918aa7} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{copy\_vector} @@ -416,7 +456,7 @@ Array_double *copy_vector(Array_double *v) { \end{verbatim} \subsubsection{\texttt{format\_vector\_into}} -\label{sec:orgc346c3c} +\label{sec:org744df1b} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{format\_vector\_into} @@ -446,9 +486,9 @@ void format_vector_into(Array_double *v, char *s) { \end{verbatim} \subsection{Matrix Routines} -\label{sec:org3b053ab} +\label{sec:orge1c8a5a} \subsubsection{\texttt{lu\_decomp}} -\label{sec:org5553968} +\label{sec:org19cc6a1} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{lu\_decomp} @@ -457,7 +497,7 @@ void format_vector_into(Array_double *v, char *s) { matrix \(L\), \(U\), respectively such that \(LU = m\). \item Output: a pointer to the location in memory in which two \texttt{Matrix\_double}'s reside: the first representing \(L\), the second, \(U\). -\item Errors: Exits and throws a status code of \texttt{-1} when encountering a matrix that cannot be +\item Errors: Fails assertions when encountering a matrix that cannot be decomposed \end{itemize} @@ -468,15 +508,14 @@ Matrix_double **lu_decomp(Matrix_double *m) { Matrix_double *u = copy_matrix(m); Matrix_double *l_empt = InitMatrixWithSize(double, m->rows, m->cols, 0.0); Matrix_double *l = put_identity_diagonal(l_empt); - free(l_empt); - + free_matrix(l_empt); Matrix_double **u_l = malloc(sizeof(Matrix_double *) * 2); for (size_t y = 0; y < m->rows; y++) { if (u->data[y]->data[y] == 0) { printf("ERROR: a pivot is zero in given matrix\n"); - exit(-1); + assert(false); } } @@ -487,7 +526,7 @@ Matrix_double **lu_decomp(Matrix_double *m) { if (denom == 0) { printf("ERROR: non-factorable matrix\n"); - exit(-1); + assert(false); } double factor = -(u->data[y]->data[x] / denom); @@ -509,7 +548,7 @@ Matrix_double **lu_decomp(Matrix_double *m) { } \end{verbatim} \subsubsection{\texttt{bsubst}} -\label{sec:org253efdc} +\label{sec:org786580f} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{bsubst} @@ -534,7 +573,7 @@ Array_double *bsubst(Matrix_double *u, Array_double *b) { } \end{verbatim} \subsubsection{\texttt{fsubst}} -\label{sec:orge0c7bc6} +\label{sec:org1d422c6} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{fsubst} @@ -561,8 +600,8 @@ Array_double *fsubst(Matrix_double *l, Array_double *b) { } \end{verbatim} -\subsubsection{\texttt{solve\_matrix}} -\label{sec:orgbcd445a} +\subsubsection{\texttt{solve\_matrix\_lu\_bsubst}} +\label{sec:orgbf1dbcb} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{src/matrix.c} @@ -577,7 +616,7 @@ Here we make use of forward substitution to first solve \(Ly = b\) given \(L\) a Then, \(LUx = b\), thus \(x\) is a solution. \begin{verbatim} -Array_double *solve_matrix(Matrix_double *m, Array_double *b) { +Array_double *solve_matrix_lu_bsubst(Matrix_double *m, Array_double *b) { assert(b->size == m->rows); assert(m->rows == m->cols); @@ -592,13 +631,105 @@ Array_double *solve_matrix(Matrix_double *m, Array_double *b) { free_matrix(u); free_matrix(l); + free(u_l); return x; } \end{verbatim} +\subsubsection{\texttt{gaussian\_elimination}} +\label{sec:orgc3ceb7b} +\begin{itemize} +\item Author: Elizabeth Hunt +\item Location: \texttt{src/matrix.c} +\item Input: a pointer to a \texttt{Matrix\_double} \(m\) +\item Output: a pointer to a copy of \(m\) in reduced echelon form +\end{itemize} + +This works by finding the row with a maximum value in the column \(k\). Then, it uses that as a pivot, and +applying reduction to all other rows. The general idea is available at \url{https://en.wikipedia.org/wiki/Gaussian\_elimination}. + +\begin{verbatim} +Matrix_double *gaussian_elimination(Matrix_double *m) { + uint64_t h = 0; + uint64_t k = 0; + + Matrix_double *m_cp = copy_matrix(m); + + while (h < m_cp->rows && k < m_cp->cols) { + uint64_t max_row = 0; + double total_max = 0.0; + + for (uint64_t row = h; row < m_cp->rows; row++) { + double this_max = c_max(fabs(m_cp->data[row]->data[k]), total_max); + if (c_max(this_max, total_max) == this_max) { + max_row = row; + } + } + + if (max_row == 0) { + k++; + continue; + } + + Array_double *swp = m_cp->data[max_row]; + m_cp->data[max_row] = m_cp->data[h]; + m_cp->data[h] = swp; + + for (uint64_t row = h + 1; row < m_cp->rows; row++) { + double factor = m_cp->data[row]->data[k] / m_cp->data[h]->data[k]; + m_cp->data[row]->data[k] = 0.0; + + for (uint64_t col = k + 1; col < m_cp->cols; col++) { + m_cp->data[row]->data[col] -= m_cp->data[h]->data[col] * factor; + } + } + + h++; + k++; + } + + return m_cp; +} +\end{verbatim} + +\subsubsection{\texttt{solve\_matrix\_gaussian}} +\label{sec:orgb8fc210} +\begin{itemize} +\item Author: Elizabeth Hunt +\item Location: \texttt{src/matrix.c} +\item Input: a pointer to a \texttt{Matrix\_double} \(m\) and a target \texttt{Array\_double} \(b\) +\item Output: a pointer to a vector \(x\) being the solution to the equation \(mx = b\) +\end{itemize} + +We first perform \texttt{gaussian\_elimination} after augmenting \(m\) and \(b\). Then, as \(m\) is in reduced echelon form, it's an upper +triangular matrix, so we can perform back substitution to compute \(x\). + +\begin{verbatim} +Array_double *solve_matrix_gaussian(Matrix_double *m, Array_double *b) { + assert(b->size == m->rows); + assert(m->rows == m->cols); + + Matrix_double *m_augment_b = add_column(m, b); + Matrix_double *eliminated = gaussian_elimination(m_augment_b); + + Array_double *b_gauss = col_v(eliminated, m->cols); + Matrix_double *u = slice_column(eliminated, m->rows); + + Array_double *solution = bsubst(u, b_gauss); + + free_matrix(m_augment_b); + free_matrix(eliminated); + free_matrix(u); + free_vector(b_gauss); + + return solution; +} +\end{verbatim} + + \subsubsection{\texttt{m\_dot\_v}} -\label{sec:orga9b1f68} +\label{sec:org304f5e5} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{src/matrix.c} @@ -620,7 +751,7 @@ Array_double *m_dot_v(Matrix_double *m, Array_double *v) { \end{verbatim} \subsubsection{\texttt{put\_identity\_diagonal}} -\label{sec:org33ead5e} +\label{sec:orga145f39} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{src/matrix.c} @@ -638,8 +769,56 @@ Matrix_double *put_identity_diagonal(Matrix_double *m) { } \end{verbatim} +\subsubsection{\texttt{slice\_column}} +\label{sec:org1ea6d1a} +\begin{itemize} +\item Author: Elizabeth Hunt +\item Location: \texttt{src/matrix.c} +\item Input: a pointer to a \texttt{Matrix\_double} +\item Output: a pointer to a copy of the given \texttt{Matrix\_double} with column at \texttt{x} sliced +\end{itemize} + +\begin{verbatim} +Matrix_double *slice_column(Matrix_double *m, size_t x) { + Matrix_double *sliced = copy_matrix(m); + + for (size_t row = 0; row < m->rows; row++) { + Array_double *old_row = sliced->data[row]; + sliced->data[row] = slice_element(old_row, x); + free_vector(old_row); + } + sliced->cols--; + + return sliced; +} +\end{verbatim} + +\subsubsection{\texttt{add\_column}} +\label{sec:org733cc61} +\begin{itemize} +\item Author: Elizabet Hunt +\item Location: \texttt{src/matrix.c} +\item Input: a pointer to a \texttt{Matrix\_double} and a new vector representing the appended column \texttt{x} +\item Output: a pointer to a copy of the given \texttt{Matrix\_double} with a new column \texttt{x} +\end{itemize} + +\begin{verbatim} +Matrix_double *add_column(Matrix_double *m, Array_double *v) { + Matrix_double *pushed = copy_matrix(m); + + for (size_t row = 0; row < m->rows; row++) { + Array_double *old_row = pushed->data[row]; + pushed->data[row] = add_element(old_row, v->data[row]); + free_vector(old_row); + } + + pushed->cols++; + return pushed; +} +\end{verbatim} + \subsubsection{\texttt{copy\_matrix}} -\label{sec:org34b3f5b} +\label{sec:orge8936ce} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{src/matrix.c} @@ -659,7 +838,7 @@ Matrix_double *copy_matrix(Matrix_double *m) { \end{verbatim} \subsubsection{\texttt{free\_matrix}} -\label{sec:org9c91101} +\label{sec:orgf7b674e} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{src/matrix.c} @@ -678,7 +857,7 @@ void free_matrix(Matrix_double *m) { \end{verbatim} \subsubsection{\texttt{format\_matrix\_into}} -\label{sec:org51f3e27} +\label{sec:org22902bd} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{format\_matrix\_into} @@ -705,9 +884,9 @@ void format_matrix_into(Matrix_double *m, char *s) { } \end{verbatim} \subsection{Root Finding Methods} -\label{sec:org0e83d47} +\label{sec:org6c22e6c} \subsubsection{\texttt{find\_ivt\_range}} -\label{sec:org3e4e34e} +\label{sec:org43ba5e5} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{find\_ivt\_range} @@ -737,7 +916,7 @@ double *find_ivt_range(double (*f)(double), double start_x, double delta, } \end{verbatim} \subsubsection{\texttt{bisect\_find\_root}} -\label{sec:org48f0967} +\label{sec:orgf8a3f0e} \begin{itemize} \item Author: Elizabeth Hunt \item Name(s): \texttt{bisect\_find\_root} @@ -765,7 +944,7 @@ double bisect_find_root(double (*f)(double), double a, double b, } \end{verbatim} \subsubsection{\texttt{bisect\_find\_root\_with\_error\_assumption}} -\label{sec:org15e3c2d} +\label{sec:orgeb72b17} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{bisect\_find\_root\_with\_error\_assumption} @@ -789,9 +968,9 @@ double bisect_find_root_with_error_assumption(double (*f)(double), double a, \end{verbatim} \subsection{Linear Routines} -\label{sec:org98cb54b} +\label{sec:org4e14ee5} \subsubsection{\texttt{least\_squares\_lin\_reg}} -\label{sec:org0c0c5d7} +\label{sec:orge0ed136} \begin{itemize} \item Author: Elizabeth Hunt \item Name: \texttt{least\_squares\_lin\_reg} @@ -821,12 +1000,12 @@ Line *least_squares_lin_reg(Array_double *x, Array_double *y) { } \end{verbatim} \subsection{Appendix / Miscellaneous} -\label{sec:orge34af18} +\label{sec:org0130d70} \subsubsection{Data Types} -\label{sec:org0f2f877} +\label{sec:org8aa1c01} \begin{enumerate} \item \texttt{Line} -\label{sec:org3f27166} +\label{sec:org596b0e7} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/types.h} @@ -839,7 +1018,7 @@ typedef struct Line { } Line; \end{verbatim} \item The \texttt{Array\_} and \texttt{Matrix\_} -\label{sec:org83fc1f3} +\label{sec:org9d1c7c3} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/types.h} @@ -871,10 +1050,10 @@ typedef struct { \end{enumerate} \subsubsection{Macros} -\label{sec:org2bf9bf0} +\label{sec:orgb835bfa} \begin{enumerate} \item \texttt{c\_max} and \texttt{c\_min} -\label{sec:orgcaa569e} +\label{sec:org9ca763b} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/macros.h} @@ -888,7 +1067,7 @@ typedef struct { \end{verbatim} \item \texttt{InitArray} -\label{sec:org5805999} +\label{sec:org3454dab} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/macros.h} @@ -909,7 +1088,7 @@ typedef struct { \end{verbatim} \item \texttt{InitArrayWithSize} -\label{sec:org264d6b7} +\label{sec:orga4ec165} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/macros.h} @@ -930,7 +1109,7 @@ typedef struct { \end{verbatim} \item \texttt{InitMatrixWithSize} -\label{sec:org310d41a} +\label{sec:org0748f30} \begin{itemize} \item Author: Elizabeth Hunt \item Location: \texttt{inc/macros.h} diff --git a/homeworks/hw-5.org b/homeworks/hw-5.org index d650375..a2339f9 100644 --- a/homeworks/hw-5.org +++ b/homeworks/hw-5.org @@ -19,7 +19,7 @@ Unless the following are met, the resulting solution will be garbage. 1. The matrix $U$ must be not be singular. 2. $U$ must be square (or it will fail the ~assert~). 3. The system created by $Ux = b$ must be consistent. -4. $U$ is in (obviously) upper-triangular form. +4. $U$ is (quite obviously) in upper-triangular form. Thus, the actual calculation performing the $LU$ decomposition (in ~lu_decomp~) does a sanity diff --git a/homeworks/hw-5.pdf b/homeworks/hw-5.pdf index ce43787173cae4e212e33dec66774d0cc299410e..a7773bc781d78965cc247a5adc71d35f493a7702 100644 GIT binary patch delta 7112 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 delta 6777 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 P{360Y78baMBJh6zKat3; diff --git a/homeworks/hw-5.tex b/homeworks/hw-5.tex index 8b9d24b..98cca2e 100644 --- a/homeworks/hw-5.tex +++ b/homeworks/hw-5.tex @@ -1,4 +1,4 @@ -% Created 2023-10-30 Mon 19:05 +% Created 2023-11-01 Wed 20:49 % Intended LaTeX compiler: pdflatex \documentclass[11pt]{article} \usepackage[utf8]{inputenc} @@ -29,7 +29,7 @@ \setlength\parindent{0pt} \section{Question One} -\label{sec:org88abf18} +\label{sec:org4e80298} See LIZFCM \(\rightarrow\) Matrix Routines \(\rightarrow\) \texttt{lu decomp} \& \texttt{bsubst}. The test \texttt{UTEST(matrix, lu\_decomp)} is a unit test for the \texttt{lu\_decomp} routine, @@ -39,14 +39,14 @@ and \texttt{UTEST(matrix, bsubst)} verifies back substitution on an upper triang Both can be found in \texttt{tests/matrix.t.c}. \section{Question Two} -\label{sec:org098a7f1} +\label{sec:orga73d05c} Unless the following are met, the resulting solution will be garbage. \begin{enumerate} \item The matrix \(U\) must be not be singular. \item \(U\) must be square (or it will fail the \texttt{assert}). \item The system created by \(Ux = b\) must be consistent. -\item \(U\) is in (obviously) upper-triangular form. +\item \(U\) is (quite obviously) in upper-triangular form. \end{enumerate} Thus, the actual calculation performing the \(LU\) decomposition @@ -55,41 +55,41 @@ check for 1-3 will fail an assert, should a point along the diagonal (pivot) be zero, or the matrix be non-factorable. \section{Question Three} -\label{sec:org40d5983} +\label{sec:org35163c5} See LIZFCM \(\rightarrow\) Matrix Routines \(\rightarrow\) \texttt{fsubst}. \texttt{UTEST(matrix, fsubst)} verifies forward substitution on a lower triangular 3 \texttimes{} 3 matrix with a known solution that can be verified manually. \section{Question Four} -\label{sec:orgf7d23bb} +\label{sec:org79d9061} See LIZFCM \(\rightarrow\) Matrix Routines \(\rightarrow\) \texttt{gaussian\_elimination} and \texttt{solve\_gaussian\_elimination}. \section{Question Five} -\label{sec:org54e966c} +\label{sec:orgc6ac464} See LIZFCM \(\rightarrow\) Matrix Routines \(\rightarrow\) \texttt{m\_dot\_v}, and the \texttt{UTEST(matrix, m\_dot\_v)} in \texttt{tests/matrix.t.c}. \section{Question Six} -\label{sec:org413b527} +\label{sec:org66fedab} See \texttt{UTEST(matrix, solve\_gaussian\_elimination)} in \texttt{tests/matrix.t.c}, which generates a diagonally dominant 10 \texttimes{} 10 matrix and shows that the solution is consistent with the initial matrix, according to the steps given. Then, we do a dot product between each row of the diagonally dominant matrix and the solution vector to ensure it is near equivalent to the input vector. \section{Question Seven} -\label{sec:orgd3d7443} +\label{sec:org6897ff2} See \texttt{UTEST(matrix, solve\_matrix\_lu\_bsubst)} which does the same test in Question Six with the solution according to \texttt{solve\_matrix\_lu\_bsubst} as shown in the Software Manual. \section{Question Eight} -\label{sec:orgf8ac9bf} +\label{sec:org5d529dd} No, since the time complexity for Gaussian Elimination is always less than that of the LU factorization solution by \(O(n^2)\) operations (in LU factorization we perform both backwards and forwards substitutions proceeding the LU decomp, in Gaussian Elimination we only need back substitution). \section{Question Nine, Ten} -\label{sec:orgb270171} +\label{sec:org0fb8e09} See LIZFCM Software manual and shared library in \texttt{dist} after compiling. \end{document} \ No newline at end of file diff --git a/notes/Nov-3.org b/notes/Nov-3.org new file mode 100644 index 0000000..5a65d2a --- /dev/null +++ b/notes/Nov-3.org @@ -0,0 +1,62 @@ +* eigenvalues \rightarrow power method + +we iterate on the x_{k+1} = A x_k + +y = Av_0 +v_1 = \frac{1}{|| y ||} (y) +\lambda_0 = v_0^T A v_0 = v_0^T y + +Find the largest eigenvalue; + +#+BEGIN_SRC c + while (error > tol && iter < max_iter) { + v_1 = (1 / magnitude(y)) * y; + w = m_dot_v(a, v_1); + lambda_1 = v_dot_v(transpose(v_1), w); + error = abs(lambda_1 - lambda_0); + iter++; + lambda_0 = lambda_1; + y = v_1; + } + + return [lambda_1, error]; +#+END_SRC + +Find the smallest eigenvalue: + +** We know: +If \lambda_1 is the largest eigenvalue of $A$ then \frac{1}{\lambda_1} is the smallest eigenvalue of $A^{-1}$. + +If \lambda_n is the smallest eigenvalue of $A$ then \frac{1}{\lambda_n} is the largest eigenvalue of $A^{-1}$. +*** However, calculating $A^{-1}$ is inefficient +So, transform $w = A^{-1} v_1 \Rightarrow$ Solve $Aw = v_1$ with LU or GE (line 3 of above snippet). + +And, transform $y = A^{-1} v_0 \Rightarrow$ Solve $Ay = v_0$ with LU or GE. + +** Conclusions + +We have the means to compute the approximations of \lambda_1 and \lambda_n. + +(\lambda_1 \rightarrow power method) + +(\lambda_n \rightarrow inverse power method) + +* Eigenvalue Shifting + +If (\lambda, v) is an eigen pair, (v \neq 0) + +Av = \lambdav + +Thus for any \mu \in R + +(Av - \mu I v) = (A - \mu I)v = \lambda v - \mu I v + = (\lambda - \mu)v + \Rightarrow \lambda - \mu is an eigenvalue of (A - \mu I) + +(A - \mu I)v = (\lambda - \mu)v + +Idea is to choose \mu close to our eigenvalue. We can then inverse iterate to +construct an approximation of \lambda - \mu and then add \mu back to get \lambda. + +v_0 = a_1 v_1 + a_2 v_2 + \cdots + a_n v_n +A v_0 = a_1 (\lambda_1 v_1) + \cdots