summaryrefslogtreecommitdiff
path: root/latex/know/concept/gram-schmidt-method/source.md
blob: b0c7b3bd30f6071bdb37471491d11a8ce1b1774b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
% Gram-Schmidt method


# Gram-Schmidt method

Given a set of linearly independent non-orthonormal vectors
$\ket*{V_1}, \ket*{V_2}, ...$ from a 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}}$.