양자화학의 언어 — 파동함수와 연산자
양자화학의 언어 — 파동함수와 연산자
입자의 상태를 복소함수로, 측정 가능한 양을 에르미트 연산자로 — 양자화학이 쓰는 두 가지 기본 도구를 가우시안 파속 한 예로 끝까지 따라가 본다.
들어가며
이 책은 14장에 걸쳐 원자 결합에서 띠구조까지를 다루지만, 그 모든 장은 같은 두 개의 도구로 쓰여 있다 — 파동함수와 연산자. 이 장이 끝나면 독자는 “전자의 상태”라는 말이 무엇을 의미하는지, 그리고 “위치를 측정한다”는 행위가 수식으로 어떻게 옮겨지는지를 분명히 말할 수 있어야 한다. 단 하나의 구체적인 파동함수 — 가우시안 파속 — 을 손과 파이썬으로 만져보면서 정규화, 기댓값, 불확정성을 직접 확인하는 것이 이 장의 목표다.
본론 1 — 파동함수와 확률
양자역학은 입자의 상태를 복소수 값을 가지는 함수 (psi, 파동함수)로 기술한다. 고전역학에서 입자의 상태가 위치와 운동량의 쌍 였다면, 양자역학에서는 그 둘 모두를 동시에 가지지 않는다 — 가지는 것은 공간 위에 퍼진 한 장의 복소함수뿐이다.
이 함수는 직접 측정되지 않는다. 측정 가능한 것은 확률 밀도 뿐이다. 부피 요소 안에서 입자를 발견할 확률은
이고, 입자가 어딘가에는 존재한다는 사실은 다음 정규화 조건으로 표현된다:
자체는 관측되지 않는데도 위상(phase)은 사라지지 않는다. 두 파동함수가 합쳐질 때 — 이중 슬릿이나 분자 궤도의 겹침처럼 — 위상이 보강·상쇄 간섭을 결정한다. 하나의 상태를 “측정”할 때만 위상이 보이지 않을 뿐이다.
본론 2 — 관측량과 에르미트 연산자
측정 가능한 모든 양에는 하나의 에르미트 연산자(Hermitian operator) 가 대응한다. 에르미트라는 단어는 지금은 “고윳값이 실수가 되도록 만들어진 선형 변환” 정도로 받아들이면 충분하다. 실수 고윳값이 곧 실제 측정값에 해당하기 때문이다.
- 위치 연산자 (단순한 곱셈)
- 운동량 연산자
- 운동에너지
- 퍼텐셜 (위치의 함수에 의한 곱)
여기서 (h-bar)는 플랑크 상수를 로 나눈 값, 은 입자 질량, 은 라플라시안이다.
상태 에서 연산자 의 기댓값(expectation value) — 같은 상태를 무한히 많이 준비해서 측정했을 때 나오는 평균값 — 은
로 정의된다. 는 의 복소켤레다. 이 적분이 양자화학 계산의 거의 모든 곳에서 다시 등장한다 — 에너지를 구할 때도, 쌍극자모멘트를 구할 때도, 결합 차수를 구할 때도.
본론 3 — 가우시안 파속이라는 구체적인 예
추상을 한 번 구체로 내려놓자. 1차원 상에서 다음 파동함수를 보자:
여기서 (sigma)는 폭을 결정하는 양의 상수다. 는 실수 함수이며 원점에서 가장 큰 값을 가진다. 우선 정규화부터 확인하자:
마지막 등식은 가우시안 적분 에서 따라온다. 다음으로 기댓값. 이 원점에 대해 대칭이므로
그리고 분산은
위치 불확정성 . 즉 폭 매개변수 가 그대로 위치의 불확정성이 된다.
이 결과는 우연이 아니다. 운동량 쪽에서 비슷한 계산을 하면 가 나오고, 두 양을 곱하면
이것이 하이젠베르크 불확정성 원리 의 등호를 정확히 만족시키는 상태 — 가우시안 파속이 “양자역학적으로 가장 좁은” 상태인 이유다. 본격적인 증명은 뒤 장에서 다루겠지만, 이 장의 한 예제만으로도 양자화학의 두 도구가 어떻게 맞물리는지 한 번에 보인다.
파이썬으로 확인
# 가우시안 파속의 정규화·기댓값·불확정성을 수치로 확인한다.
import numpy as np
import matplotlib.pyplot as plt
sigma = 1.5
N = 400
x = np.linspace(-10, 10, N)
dx = x[1] - x[0]
# 해석해(정규화 상수 포함) 그대로 만든다
psi = (2 * np.pi * sigma**2)**(-0.25) * np.exp(-x**2 / (4 * sigma**2))
rho = psi**2
# 수치 정규화: 사다리꼴 적분이 1이 되도록 맞춘다
norm = np.trapz(rho, x)
rho = rho / norm
# 기댓값과 표준편차
x_mean = np.trapz(x * rho, x)
x2_mean = np.trapz(x**2 * rho, x)
dx_num = np.sqrt(x2_mean - x_mean**2)
print(f"<x^2> 수치 = {x2_mean:.4f}, 해석 = {sigma**2:.4f}")
print(f"Δx 수치 = {dx_num:.4f}, 해석 = {sigma:.4f}")
# |ψ|^2 과 ±Δx 위치
plt.plot(x, rho, label=r"$|\psi(x)|^2$")
plt.axvline(+dx_num, color="k", linestyle="--", label=r"$\pm\Delta x$")
plt.axvline(-dx_num, color="k", linestyle="--")
plt.xlabel("x"); plt.ylabel(r"$|\psi|^2$")
plt.legend(); plt.tight_layout()
plt.show()
출력에서 수치 이 와, 수치 가 와 소수점 둘째 자리까지 맞으면 정규화·기댓값·표준편차의 세 정의를 모두 직접 만져본 셈이다.
다음 장으로
2장: 슈뢰딩거 방정식에서는 이 장에서 도구로 둔 연산자들이 어떻게 한 방정식으로 묶여 “시간에 따라 가 어떻게 변하는가”를 결정하는지 본다. 정규화와 기댓값의 정의를 손에 쥐고 들어가면, 슈뢰딩거 방정식이 단지 “에너지 보존을 양자화한 식”임을 어렵지 않게 받아들일 수 있을 것이다.