--- title: "Gram-Schmidt method" firstLetter: "G" publishDate: 2021-02-22 categories: - Mathematics date: 2021-02-22T21:36:08+01:00 draft: false markup: pandoc --- # Gram-Schmidt method Given a set of linearly independent non-orthonormal vectors $\ket*{V_1}, \ket*{V_2}, ...$ from a [Hilbert space](/know/concept/hilbert-space/), the **Gram-Schmidt method** turns them into an orthonormal set $\ket*{n_1}, \ket*{n_2}, ...$ as follows: 1. Take the first vector $\ket*{V_1}$ and normalize it to get $\ket*{n_1}$: $$\begin{aligned} \ket*{n_1} = \frac{\ket*{V_1}}{\sqrt{\braket*{V_1}{V_1}}} \end{aligned}$$ 2. Begin loop. Take the next non-orthonormal vector $\ket*{V_j}$, and subtract from it its projection onto every already-processed vector: $$\begin{aligned} \ket*{n_j'} = \ket*{V_j} - \ket*{n_1} \braket*{n_1}{V_j} - \ket*{n_2} \braket*{n_2}{V_j} - ... - \ket*{n_{j-1}} \braket*{n_{j-1}}{V_{j-1}} \end{aligned}$$ This leaves only the part of $\ket*{V_j}$ which is orthogonal to $\ket*{n_1}$, $\ket*{n_2}$, etc. This why the input vectors must be linearly independent; otherwise $\ket{n_j'}$ may become zero at some point. 3. Normalize the resulting ortho*gonal* vector $\ket*{n_j'}$ to make it ortho*normal*: $$\begin{aligned} \ket*{n_j} = \frac{\ket*{n_j'}}{\sqrt{\braket*{n_j'}{n_j'}}} \end{aligned}$$ 4. Loop back to step 2, taking the next vector $\ket*{V_{j+1}}$. If you are unfamiliar with this notation, take a look at [Dirac notation](/know/concept/dirac-notation/).