\section*{Problem 5}

\subsection*{a)}
We used the Jacobi's rotation method to solve $\boldsymbol{A} \vec{v} = \lambda \vec{v}$, for $\boldsymbol{A}_{(N \cross N)}$ with $N \in [5, 100]$, 
and increased the matrix size by $3$ rows and columns for every new matrix generated. The number of similarity transformations performed for a tridiagonal matrix 
of is presented in Figure \ref{fig:transform}. We chose to run the program using dense matrices of same size as the tridiagonal matrices, to compare the scaling data.
What we see is that the number of similarity transformations necessary to solve the system is proportional to the matrix size. 
\begin{figure}[h]
    \centering 
    \includegraphics[width=0.8\textwidth]{images/transform.pdf}
    \caption{Similarity transformations performed as a function of matrix size (N), data is presented in a logarithmic scale.}
    \label{fig:transform}
\end{figure}

\subsection*{b)}
For both the tridiagonal and dense matrices we are checking off-diagonal elements above the main diagonal, since these are symmetric matrices.
The max value is found at index $(k,l)$ and for every rotation of the matrix, we update the remaining elements along row $k$ and $l$. This can lead to an increased 
value of off-diagonal elements, that previously were close to zero, and extra rotations has to be performed due to these elements. Which suggest that the 
number of similarity transformations perfomed on a matrix does not depend on its initial number of non-zero elements, making the Jacobi's rotation algorithm as 
computationally expensive for both dense and tridiagonal matrices of size $N \cross N$.