--- title: "Gram-Schmidt method" sort_title: "Gram-Schmidt method" date: 2021-02-22 categories: - Mathematics - Algorithms layout: "concept" --- 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{\inprod{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} \inprod{n_1}{V_j} - \ket{n_2} \inprod{n_2}{V_j} - ... - \ket{n_{j-1}} \inprod{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{\inprod{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/). ## References 1. R. Shankar, *Principles of quantum mechanics*, 2nd edition, Springer.