\subsection{Gram-Schmid algorithm} \begin{simplechar} \begin{lstlisting} % performs QR or QRdash decomposition of a matrix function [Q, R] = gramSchmidtAlgorithm(Matrix) [columns, Q, R, d] = initializeGramSchmid(Matrix); [Q, R] = factorizeColumnsOfQ(columns, Q, Matrix, R, d); [Q, R] = normalizeColumns(columns, Q, R); end \end{lstlisting} \end{simplechar} \subsubsection{initializeGramSchmid} \begin{simplechar} \begin{lstlisting} function [columns, Q, R, d] = initializeGramSchmid(Matrix) % We start with empty matrices [rows, columns] = size(Matrix); Q = zeros(rows, columns); R = zeros(columns, columns); d = zeros(1, columns); end \end{lstlisting} \end{simplechar} \subsubsection{factorizeColumnsOfQ} \begin{simplechar} \begin{lstlisting} function [Q, R] = factorizeColumnsOfQ(columns, Q, Matrix, R, d) for i = 1 : columns Q(:, i) = Matrix(:, i); R(i, i) = 1; d(i) = Q(:, i)' * Q(:, i); for i2 = i + 1 : columns R(i, i2) = (Q(:, i)' * Matrix(:, i2)) / d(i); Matrix(:, i2) = Matrix(:, i2) - R(i, i2) * Q(:, i); end end end \end{lstlisting} \end{simplechar} \subsubsection{normalizeColumns} \begin{simplechar} \begin{lstlisting} function [Q, R] = normalizeColumns(columns, Q, R) for i = 1 : columns dd = norm(Q(:, i)); Q(:, i) = Q(:, i) / dd; R(i, i:columns) = R(i, i : columns) * dd; end end \end{lstlisting} \end{simplechar}