1차원의 시간 무관 슈뢰딩거 방정식 $H \psi_n = E_n \psi_n$을 고려하자 ($n=0,1,2,\ldots$). 임의의 파동함수 $\psi$에 대해 에너지의 기대값은 $$\left< H \right> = \frac{\int \psi^\ast H \psi ~dx}{\int \psi^\ast \psi ~dx}$$ 인데 이 값은 언제나 바닥 상태 에너지 $E_0$보다 크거나 같으며, 바닥 상태가 유일하면 $\psi = \psi_0$일 때에 성립한다.
그 이유는 아래와 같다: 먼저 $\psi$를 에너지 고유벡터들로 분해하여 쓰자: $\psi = \sum_n c_n \psi_n$. 그러면 \begin{eqnarray} \left< H \right> &=& \frac{\int \psi^\ast H \psi ~dx}{\int \psi^\ast \psi ~dx} = \frac{\sum_n |c_n|^2 E_n}{\sum_n |c_n|^2}\\ &=& E_0 + \frac{\sum_n |c_n|^2 (E_n - E_0)}{\sum_n |c_n|^2} \ge E_0. \end{eqnarray}
그러니까 개념적으로는 시험 삼아 파동함수를 적어보고, 그 모양을 잡아주는 맺음변수들 $\alpha_1, \alpha_2, \ldots, \alpha_r$을 이리저리 바꿔가면서 에너지의 기대값을 최소화하면 될 것이다. 수식으로 적어보면 $\psi = \psi(x;\alpha_1, \alpha_2, \ldots, \alpha_r)$에 대해서 $$E = \frac{\int \psi^\ast H \psi ~dx}{\int \psi^\ast \psi ~dx}$$ 가 정의되고 이를 편미분해서 $$\frac{\partial E}{\partial \alpha_1} = \frac{\partial E}{\partial \alpha_2} = \ldots = \frac{\partial E}{\partial \alpha_r} = 0$$ 으로 하면 될 것이다.
실제 계산에서는 라그랑주 곱수를 사용해서 $E$의 분모에 표현된 규격화 조건을 유지하면서 분자를 최소화하는 쪽이 더 간편하다. 변분의 표현으로는 $$\delta \left( \int \psi^\ast H \psi ~dx - \epsilon \int \psi^\ast \psi ~dx \right) = 0,$$ $$\int \delta\psi^\ast (H-\epsilon) \psi ~dx + \int \psi^\ast (H-\epsilon) \delta \psi ~dx = 0.$$ 여기에서 $H \psi = \epsilon \psi$가 나오므로 라그랑주 곱수의 물리적 의미는 에너지 고유값이다.
라그랑주 곱수를 사용해 범함수 $$G[\psi] = \int \psi^\ast H \psi ~dx - \epsilon \int \psi^\ast \psi ~dx$$ 를 적고 직교정규화된 $N$개의 기저함수로 파동함수를 표현하자. 즉 기저함수 $b_1, b_2, \ldots, b_N$은 $$\int b_i^\ast b_j ~dx = \delta_{ij}$$ 을 만족하며 $\psi \approx \sum_i c_i b_i$로 표현한다.
그러면 범함수는 사실상 $c_1, c_2, \ldots, c_N$의 함수여서 $$G[c_1, \ldots, c_N] = \sum_{ij} c_i^\ast c_j H_{ij} - \epsilon \sum_{ij} c_i^\ast c_j \delta_{ij}$$ 이며 여기서 $$H_{ij} \equiv \int b_i^\ast H b_j ~dx$$ 로 정의된다. $H$가 에르미트 성질을 가지므로 $H_{ij} = H_{ji}^\ast$를 만족해야 한다.
이제 $\partial G / \partial c_i = 0$을 풀어야한다. 위에 적힌 $G[c_1, \ldots, c_N]$을 미분해보면 이는 $$\sum_j (H_{ij} - \epsilon \delta_{ij}) c_j = 0,$$ 행렬식으로 표현하면 $$(H - \epsilon I) \vec{c} = 0$$ 임을 의미한다. 즉 변분의 해 $c_1, c_2, \ldots, c_N$을 찾는 일은 해밀토니안 행렬의 고유값 문제 $H \vec{c} = \epsilon \vec{c}$로 귀착된다.
입자가 $0<x<L$의 상자 안에 갇혀있고 상자에는 $V(x) = V_0 \frac{x}{L} \left( \frac{x}{L}-1 \right)$의 퍼텐셜이 걸려있다. 해밀토니안은 다음처럼 주어지고 $$H = -\frac{-\hbar^2}{2m} \frac{d^2}{dx^2} + V_0 \frac{x}{L} \left( \frac{x}{L}-1 \right).$$ 경계조건은 $\psi(0) = \psi(L) = 0$이다. 기저함수를 평면파 $$b_n = \sqrt{\frac{2}{L}} \sin \frac{n\pi x}{L}$$ 로 고르면, 해밀토니안 행렬은 다음처럼 원소를 가진다. $$H_{nk} = \left\{ \begin{array}{ll} \frac{\hbar^2 \pi^2 n^2}{2mL^2}-V_0 & (n=k)\\ \frac{4V_0 nk [1+(-1)^{k+n}]}{\pi^2 (n-k)^2 (n+k)^2} & (n \neq k) \end{array} \right.$$
이제 코드를 적어보자. <Code:python> from future import print_function,division from math import pi from numpy import array, empty from numpy.linalg import eigvalsh # symmetric or hermitian
hbar = 1.0546e-34 # Planck constant / (2*pi) m, eV = 9.1094e-31, 1.6022e-19 # electron mass and 1eV = 1.6022e-19J L = 5.2918e-11 # box size N = 10 # number of basis functions V0 = 104*eV H = empty([N,N], float) for n in range(N): for k in range(N): n1,k1 = n+1,k+1 # the physical indices start from 1 if n==k: # diagonal elements H[n,k] = hbar2*pi2*n12/(2*m*L2) \ - V0*(pi2*n12+3)/(6*pi2*n12) else: # off-diagonal elements H[n,k] = 4*V0*n1*k1*(1+(-1)(k1+n1))/(pi2*(n1-k1)2*(n1+k1)**2) e = eigvalsh(H) print(e/eV) # output in units of eV </Code>
위 코드의 변분법으로는 $N=10$개의 기저함수만을 사용해도 $E_0 \approx -2128.8767 eV$를 얻는다. 같은 상수값들을 가지고 사격법을 사용할 경우 $E_0 \approx -2128.879 eV$를 얻는다. 분명 변분법의 결과가 더 크기는 하지만 그 차이는 매우 작다.