정준 변환 — 좋은 좌표를 고르는 기술

해밀턴 방정식의 형태를 보존하는 좌표 변환, 그 변환을 통째로 적어 내는 생성함수, 그리고 위상공간 부피가 보존된다는 리우빌 정리.

들어가며

해밀턴 그림에서는 qqpp 가 둘 다 위상공간의 독립 좌표라서, qqpp서로 섞는 변환까지 정당한 좌표 변환이 된다(10장 끝의 강조). 다만 해밀턴 방정식의 1계 대칭 형태를 망가뜨리는 변환도 얼마든지 있다. 좌표를 바꾸되 방정식의 모양은 그대로 따라오는 변환에만 붙는 이름이 정준 변환(canonical transformation — 해밀턴 방정식의 형태를 보존하는 좌표 변환) 이다.

해밀턴 형식의 진짜 이득은 좋은 좌표를 고르면 운동방정식이 훨씬 쉬워진다는 점이다. 운동량 PP 가 아예 보존량이 되도록 좌표를 잡으면 P˙=0\dot P = 0 이 되고, 거기에 맞춰 QQ 도 등속으로 흐르게 잡으면 운동 전체가 자명해진다.

본론 1은 변환을 받아서 검사하는 쪽이다 — 야코비안 한 줄로 정준인지 판정한다. 본론 2는 변환을 만들어 내는 쪽이다 — 함수 하나에서 정준 변환이 통째로 태어난다. 본론 3은 자연이 스스로 만드는 변환 — 시간 흐름 — 이 정준임을 보고, 거기서 위상공간 부피 보존(리우빌 정리)을 끌어낸다.

본론 1 — 정준이라는 계약

10장의 좌표 qq 와 그 켤레 운동량 ppq˙=H/p\dot q = \partial H/\partial p, p˙=H/q\dot p = -\partial H/\partial q 를 만족했다. 새 좌표 (Q,P)(Q, P)(Q(q,p),P(q,p))(Q(q, p),\, P(q, p)) 처럼 옛 좌표의 함수로 정의한다. 우리가 바라는 것은 어떤 새 해밀토니안 K(Q,P)K(Q, P) 가 존재해서

Q˙=KP,P˙=KQ\dot Q = \frac{\partial K}{\partial P}, \qquad \dot P = -\frac{\partial K}{\partial Q}

다시 성립하는 것이다. 이 조건을 만족하는 변환이 정준 변환이다. 변수 이름만 바꾸는 것이 아니라 방정식의 모양 자체가 같이 따라와야 한다는 계약이다.

라그랑주 쪽에서는 위치 좌표만 바꿀 수 있어서 운동량은 끌려 따라올 뿐이지만, 해밀턴 쪽에서는 위치와 운동량을 동등한 자격으로 — 심지어 서로 섞어 가며 — 다시 고를 수 있다. 원리상 “모든 좌표가 순환 좌표가 되도록” 변환하는 것도 가능하고, 그렇게 되면 모든 운동량이 보존량이 되어 계가 완전히 풀린다.

헷갈리기 쉬운 곳 — 모든 좌표 변환이 정준은 아니다. 물리적 궤적 자체는 어떤 좌표로 적든 같은 운동을 가리킨다. 하지만 그 궤적을 기술하는 방정식의 형태 는 좌표 선택에 민감하다. (Q,P)(Q, P) 를 옛 좌표의 함수로 멋대로 잡으면 — 예를 들어 Q=qQ = q, P=p2P = p^2 처럼 — 새 좌표의 운동방정식은 더 이상 Q˙=K/P\dot Q = \partial K/\partial P 꼴로 정리되지 않는다. 정준 변환은 “물리를 보존하는 변환”이 아니라 — 모든 좌표 변환이 물리는 보존한다 — “해밀턴 형식 을 보존하는 변환”이다. 정준이라는 단어는 형식에 대한 약속이지, 물리에 대한 약속이 아니다.

정준 조건은 두 가지 동등한 형태로 다시 쓸 수 있다.

첫째, 심플렉틱 2-형식(symplectic 2-form — 위상공간 위의 면적 요소) ω=dqdp\omega = dq \wedge dp 가 보존된다는 조건이다.

dQdP=dqdpdQ \wedge dP = dq \wedge dp

여기서 \wedge (웨지) 는 6장에서 도입한 미분형식의 곱이다. 옛 좌표로 적은 심플렉틱 형식과 새 좌표로 적은 심플렉틱 형식이 글자 그대로 같다. 10장 끝에서 “심플렉틱 형식은 좌표와 무관하게 새겨져 있다”고 했던 말의 정확한 의미가 이것이다 — 단, 좌표 변환이 정준일 때만 그렇다.

둘째, 야코비안 M=(Q,P)/(q,p)M = \partial(Q, P)/\partial(q, p)심플렉틱 행렬(symplectic matrix — MTJM=JM^T J M = J 를 만족하는 행렬) 이라는 조건이다.

MTJM=J,J=(0II0)M^{T} J M = J, \qquad J = \begin{pmatrix} 0 & I \\ -I & 0 \end{pmatrix}

JJ 는 위치와 운동량의 “짝짓기”를 담은 2n×2n2n \times 2n 블록 행렬이고, IIn×nn \times n 단위행렬이다. 이 두 번째 형태가 실제 계산에서 가장 쓸 만하다 — 변환의 야코비안을 적고 MTJMM^T J M 을 곱해서 JJ 가 도로 나오는지만 보면 끝이다.

헷갈리기 쉬운 곳 — JJ 는 위치-운동량 짝짓기 행렬이고 반대칭이다. JJ 의 역할은 위상공간에서 누가 누구의 짝인지 를 적어 두는 것이다. 위쪽 블록의 II 는 “각 qq 의 짝은 같은 번호의 pp“라는 정보를, 아래쪽 블록의 I-I 는 그 짝짓기에 방향(부호)이 있다는 정보를 담는다. 핵심은 JT=JJ^T = -J — 즉 JJ반대칭 이라는 점이다. 이 반대칭성이 해밀턴 방정식에서 q˙\dot q 쪽은 +H/p+\partial H/\partial p, p˙\dot p 쪽은 H/q-\partial H/\partial q 로 부호가 갈리는 비대칭의 근원이다. MTJM=JM^T J M = J 라는 조건은 “변환을 거쳐도 이 짝짓기 구조가 그대로 살아남는다”는 요구다.

자유도가 하나뿐인 경우(n=1n = 1)로 손계산을 하자. JJ(0110)\begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} 이고, 야코비안 MM2×22 \times 2 행렬

M=(Q/qQ/pP/qP/p)=(abcd)M = \begin{pmatrix} \partial Q/\partial q & \partial Q/\partial p \\ \partial P/\partial q & \partial P/\partial p \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix}

이다. MTJMM^T J M 을 직접 곱해 보자. JMJ M 을 구하면

JM=(0110)(abcd)=(cdab)J M = \begin{pmatrix} 0 & 1 \\ -1 & 0 \end{pmatrix}\begin{pmatrix} a & b \\ c & d \end{pmatrix} = \begin{pmatrix} c & d \\ -a & -b \end{pmatrix}

이고, 여기에 MT=(acbd)M^T = \begin{pmatrix} a & c \\ b & d \end{pmatrix} 를 앞에서 곱하면

MTJM=(acbd)(cdab)=(accaadcbbcdabddb)=(0adbc(adbc)0)M^T J M = \begin{pmatrix} a & c \\ b & d \end{pmatrix}\begin{pmatrix} c & d \\ -a & -b \end{pmatrix} = \begin{pmatrix} ac - ca & ad - cb \\ bc - da & bd - db \end{pmatrix} = \begin{pmatrix} 0 & ad - bc \\ -(ad - bc) & 0 \end{pmatrix}

가 된다. 이게 J=(0110)J = \begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} 와 같아지려면 adbc=1ad - bc = 1 이어야 한다. adbcad - bcdetM\det M 이다. 1자유도에서 심플렉틱 조건 MTJM=JM^T J M = J

detM=1\det M = 1

과 같다. 야코비안의 행렬식이 1이라는 것은 변환이 위상공간의 면적을 보존한다 는 뜻이다.

이 판정 기준을 두 변환에 직접 쓰자. 회전 변환 Q=qcosϕ+psinϕQ = q\cos\phi + p\sin\phi, P=qsinϕ+pcosϕP = -q\sin\phi + p\cos\phi. 야코비안은 a=cosϕa = \cos\phi, b=sinϕb = \sin\phi, c=sinϕc = -\sin\phi, d=cosϕd = \cos\phi 이고 detM=cos2ϕ+sin2ϕ=1\det M = \cos^2\phi + \sin^2\phi = 1 — 정준이다. 반면 Q=qQ = q, P=p2P = p^2. 야코비안은 a=1a = 1, b=0b = 0, c=0c = 0, d=2pd = 2p 이고 detM=2p\det M = 2p — 위치마다 값이 다르고 11 이 아니다. 정준이 아니다. P=p2P = p^2 같은 비선형 운동량 변환은 위상공간을 운동량 방향으로 불균등하게 늘리거나 줄여서, 작은 사각형의 면적이 자리마다 달라진다.

헷갈리기 쉬운 곳 — 1자유도에서는 정준 ⟺ 면적 보존이다. n=1n = 1 에서 심플렉틱 조건은 행렬식 조건 하나로 완전히 무너져 내리고, 면적 보존이 정준의 필요충분조건이다. 두 가지를 조심하자. 첫째, 이 동치는 1자유도라서 성립한다. n2n \ge 2 이면 야코비안의 행렬식이 1인 것 — 즉 2n2n 차원 부피가 보존되는 것 — 은 정준의 필요조건 일 뿐, 충분조건이 아니다. MTJM=JM^T J M = J 라는 2n×2n2n \times 2n 행렬 등식 전체를 봐야 한다. 둘째, “면적 보존”은 부호 있는 면적이다 — detM=1\det M = 1 이지 detM=1|\det M| = 1 이 아니다. detM=1\det M = -1 인 변환은 면적 크기는 보존하지만 방향을 뒤집고, 정준이 아니다.

본론 2 — 생성함수

MTJM=JM^T J M = J 를 만족하는 정준 변환은 연속적인 무리를 이룬다. 그 모든 변환을 단 하나의 함수 — 옛 변수와 새 변수를 섞은 함수 — 로 적어 낼 수 있다. 이 함수가 생성함수(generating function — 옛 변수와 새 변수의 한 쌍을 독립변수로 갖는 함수로, 미분에서 정준 변환이 떨어진다) 다.

생성함수는 옛 변수만의 함수도, 새 변수만의 함수도 아니다. 옛것 하나와 새것 하나를 골라 독립변수로 삼는데, 어떤 쌍을 고르느냐에 따라 네 가지 표준형이 있다.

  • 1형 F1(q,Q)F_1(q, Q): p=F1q,P=F1Q\displaystyle p = \frac{\partial F_1}{\partial q}, \quad P = -\frac{\partial F_1}{\partial Q}.
  • 2형 F2(q,P)F_2(q, P): p=F2q,Q=F2P\displaystyle p = \frac{\partial F_2}{\partial q}, \quad Q = \frac{\partial F_2}{\partial P}.
  • 3형 F3(p,Q)F_3(p, Q), 4형 F4(p,P)F_4(p, P) 도 부호만 다른 같은 패턴.

헷갈리기 쉬운 곳 — 생성함수는 옛 변수와 새 변수를 섞은 함수다. 생성함수 F1(q,Q)F_1(q, Q) 는 옛 좌표 qq 와 새 좌표 QQ동시에 독립변수로 쓴다. ”QQqqpp 의 함수인데, qqQQ 를 어떻게 독립으로 두느냐”는 의문이 들 수 있다. 생성함수를 쓸 때는 변환을 먼저 주어진 것 으로 보지 않는다. FF먼저 던지고, 거기서 변환을 끌어낸다. F1(q,Q)F_1(q, Q) 를 아무 함수나 하나 적으면, 위의 두 식 p=F1/qp = \partial F_1/\partial qP=F1/QP = -\partial F_1/\partial Q(q,p)(q, p)(Q,P)(Q, P) 사이의 관계를 암묵적으로 정의해 준다. 그리고 이렇게 태어난 변환은 자동으로 정준 이다. 본론 1의 MTJM=JM^T J M = J 를 일일이 검산할 필요 없이, 함수 하나만 적으면 정준 변환이 따라 나온다.

가장 단순한 예 — 항등 변환. F2=qPF_2 = qP 로 두면 2형의 규칙 p=F2/qp = \partial F_2/\partial q, Q=F2/PQ = \partial F_2/\partial P 를 그대로 적용해

p=F2q=P,Q=F2P=qp = \frac{\partial F_2}{\partial q} = P, \qquad Q = \frac{\partial F_2}{\partial P} = q

가 된다. (Q,P)=(q,p)(Q, P) = (q, p) — 좌표도 운동량도 그대로다. F2=qPF_2 = qP 가 항등 변환에 해당하고, 거기에 항을 더하면 진짜 변환이 만들어진다.

헷갈리기 쉬운 곳 — F2(q,P)F_2(q, P)qqPP 가 독립변수다 — ppQQ 는 미분으로 나온다. F2=qPF_2 = qP 라는 식을 보면 네 변수 q,p,Q,Pq, p, Q, P 가 다 들어 있는 것 같지만, 실제로 적힌 것은 qqPP 뿐이다. 2형 생성함수의 독립변수는 옛 좌표 qq새 운동량 PP 이다. 나머지 둘 — 옛 운동량 pp 와 새 좌표 QQ — 은 F2F_2 에 등장하지 않는다. 대신 F2F_2미분해서 나온다. ppF2F_2qq 로 편미분한 것, QQF2F_2PP 로 편미분한 것이다. F2F_2 를 적을 때는 반드시 qqPP 만 써서 적어야 하고, 거기에 ppQQ 가 섞여 들어가면 안 된다. 표준형 번호 — 1형, 2형, 3형, 4형 — 는 “어느 두 변수를 독립으로 잡았는가”의 라벨이다.

F2=qP+α2q2F_2 = qP + \tfrac{\alpha}{2} q^{2} 로 둔다. α\alpha (알파) 는 작은 상수다. QQF2F_2PP 로 편미분한 것이다 — F2F_2 에서 PP 가 들어간 항은 qPqP 뿐이고 α2q2\tfrac{\alpha}{2}q^2PP 와 무관하므로,

Q=F2P=qQ = \frac{\partial F_2}{\partial P} = q

이다. ppF2F_2qq 로 편미분한 것이다 — qPqPqq 로 미분하면 PP, α2q2\tfrac{\alpha}{2}q^2qq 로 미분하면 αq\alpha q 이므로,

p=F2q=P+αqp = \frac{\partial F_2}{\partial q} = P + \alpha\, q

이다. 변환은 Q=qQ = q, p=P+αqp = P + \alpha q — 새 변수로 풀어 쓰면 Q=qQ = q, P=pαqP = p - \alpha q — 이다. 위치 qq 는 손대지 않고 운동량 축만 위치 축 쪽으로 비스듬히 기울이는 전단(shear — 한 축은 그대로 두고 다른 축을 비스듬히 기울이는 선형 변환) 이다. 좌표격자가 마름모꼴로 비스듬해지지만 면적은 그대로다 — 야코비안으로 검산하면 a=1,b=0,c=α,d=1a = 1, b = 0, c = -\alpha, d = 1 이라 detM=adbc=1\det M = ad - bc = 1, 정준이다.

생성함수가 왜 항상 존재하는가. 정준 변환의 조건 dQdP=dqdpdQ \wedge dP = dq \wedge dp 를 옮기면 pdqPdQp\,dq - P\,dQ 라는 1-형식이 — 적당한 부호 약속 아래 — 어떤 함수의 전미분 dFdF 와 같아진다는 것을 보일 수 있다. 그 함수가 생성함수다. 생성함수의 존재는 정준 조건과 동치 다. 변환이 정준이면 그것을 낳는 생성함수가 반드시 하나 있고, 거꾸로 생성함수에서 나온 변환은 반드시 정준이다. 이 양방향성 덕분에 본론 1의 행렬 검산을 건너뛰고 함수만 적어 정준 변환을 설계 할 수 있다.

헷갈리기 쉬운 곳 — 네 표준형은 르장드르 변환으로 서로 연결된다. 네 개는 서로 독립인 별개의 것 이 아니다. 같은 정준 변환을 어느 변수쌍의 눈으로 보느냐의 차이이고, 한 표준형에서 다른 표준형으로 넘어가는 다리가 10장에서 배운 르장드르 변환이다. F1(q,Q)F_1(q, Q) 에서 독립변수를 QQ 대신 PP 로 바꾸고 싶으면 F2=F1+QPF_2 = F_1 + QP 처럼 항을 하나 더해 르장드르 변환을 한 번 굴리면 된다 — QQ 를 짝꿍 PP 로 갈아 끼우는 조작이, 10장에서 q˙\dot qpp 로 갈아 끼운 것과 똑같은 르장드르 변환이다. 하나의 정준 변환을 적는 네 가지 언어 가 있고, 르장드르 변환이 그 언어들 사이의 번역기다. 어떤 변환은 특정 표준형으로 적으면 깔끔하고 다른 표준형으로는 적기 어렵거나 아예 불가능한 경우도 있어서 — 가령 항등 변환은 F1F_1 으로는 적을 수 없다 — 네 가지를 갖춰 두는 것이다.

본론 3 — 리우빌 정리

해밀턴 흐름을 시간 tt 만큼 적분한 사상을 생각하자. 위상공간의 한 점 (q0,p0)(q_0, p_0) 를 초기 조건으로 두고 해밀턴 방정식을 따라 시간 tt 만큼 흘려 보내면, 그 점은 새로운 점 (q(t),p(t))(q(t), p(t)) 로 옮겨 간다. 이 “초기점 \mapsto tt 초 후의 점” 대응이

Φt:(q0,p0)    (q(t),p(t))\Phi_{t}: (q_0, p_0) \;\longmapsto\; (q(t), p(t))

이다. Φt\Phi_t 는 임의의 tt 에서 정준 변환이다(흐름 사상(flow map) — 위상공간 한 점을 해밀턴 방정식에 따라 시간 tt 만큼 진화시키는 함수). 본론 1의 정의 “새 해밀토니안 KK 가 존재해 새 좌표에서도 해밀턴 방정식이 성립하면 정준”에서, 흐름의 경우 옛 좌표 (q0,p0)(q_0, p_0) 도 새 좌표 (q(t),p(t))(q(t), p(t))같은 HH 를 따르니, K=HK = H 로 두면 정의가 충족된다.

정준 변환의 야코비안은 심플렉틱이고 그 행렬식은 1이므로, 위상공간의 부피요소 dnqdnpd^{n}q\, d^{n}p 가 흐름을 따라가도 변하지 않는다. 이것이 리우빌의 정리(Liouville’s theorem — 해밀턴 흐름이 위상공간 부피를 보존한다는 정리) 다.

직관적으로는 이렇다. 초기 조건의 작은 상자 — 위치는 q0±Δqq_0 \pm \Delta q, 운동량은 p0±Δpp_0 \pm \Delta p 범위의, 가능한 초기 상태들이 빼곡히 든 작은 부피 — 를 시간이 지남에 따라 통째로 따라가 보자. 상자 안의 점 하나하나가 제각기 해밀턴 흐름을 타고 움직이니, 상자는 모양이 변한다 — 늘어나고, 휘어지고, 한쪽으로 가늘고 길게 뽑혀 나가며, 나중에는 알아보기 힘든 띠나 실타래로 변할 수 있다. 그러나 부피만은 절대 늘지도 줄지도 않는다. 모양은 자유롭게 변하되 부피는 동결되어 있다.

헷갈리기 쉬운 곳 — 부피 보존은 모양 보존이 아니다. 변하지 않는 것은 부피 라는 숫자 하나뿐이지 상자의 모양 이 아니다. 모양은 격렬하게 변한다. 처음에 정사각형이던 영역이 시간이 지나면 머리카락처럼 가늘고 긴 가닥으로 늘어나, 위상공간 곳곳을 휘감으며 퍼질 수 있다. 한 방향으로 두 배 늘어났으면 다른 방향으로 정확히 절반으로 눌려서, 곱한 부피만 그대로다. 이 “가늘고 길게 늘어남”이 통계역학에서 초기의 질서 있는 상태가 시간이 지나며 위상공간 전체에 “골고루 퍼진 것처럼” 보이는 혼합(mixing) 의 그림이다. 부피가 보존되는데도 계가 평형에 다가가는 것처럼 보이는 역설이, 모양은 보존되지 않는다는 사실로 풀린다. 리우빌 정리를 그릴 때는 “변하지 않는 사각형”이 아니라 “부피만 동결된 채 마구 휘어지는 아메바”를 떠올리는 게 맞다.

이 정리가 왜 중요한지 두 갈래. 첫째, 통계역학의 출발점이다. 통계역학은 위상공간에 빼곡히 흩뿌려진 미시상태들의 밀도 를 다루는데, 리우빌 정리는 그 밀도가 “비압축성 유체처럼” 흘러간다고 보장한다. 부피가 보존되니 밀도를 유체로 보면 압축도 팽창도 없는 흐름이고, 이 비압축성이 통계역학의 기본 방정식들을 떠받친다. 둘째, 수치 계산. 위상공간을 격자로 잘라 운동을 셈하는 모든 수치 적분기는, 진짜 해밀턴 계를 정확히 흉내 낸다면 부피를 보존해야 한다. 보통의 룽게–쿠타 같은 적분기는 이걸 보장하지 않아서 — 긴 시간을 돌리면 에너지가 슬금슬금 새거나 쌓인다 — 부피를 정확히 보존하도록 특별히 설계된 심플렉틱 적분기(symplectic integrator — 각 스텝의 사상이 정확히 심플렉틱이 되도록 짠 수치 적분기) 라는 수치 기법의 한 갈래가 여기서 갈라져 나온다.

헷갈리기 쉬운 곳 — 리우빌 정리는 해밀턴 계에만 성립한다. 리우빌 정리가 성립하는 것은 운동이 해밀턴 방정식 을 따를 때 — 즉 흐름이 정준 변환일 때 — 뿐이다. 마찰이 있으면 이야기가 완전히 달라진다. 마찰력은 운동량을 줄이는 방향으로 작용하니, 위상공간에서 모든 궤적이 점점 낮은 에너지 쪽으로 빨려 들어간다. 마찰이 있는 진자는 시간이 지나면 어떤 초기 조건에서 출발했든 결국 정지 상태 (q,p)=(0,0)(q, p) = (0, 0) 한 점으로 모인다 — 처음에 아무리 큰 부피를 차지하던 초기 조건들이 끝에는 한 점으로 쪼그라드는 것이다. 이렇게 부피가 수축 하는 흐름을 흩어지는 계(dissipative system — 에너지가 외부로 빠져나가 위상공간 부피가 수축하는 계) 라 부르고, 거기서는 리우빌 정리가 깨진다. 부피 수축이 일어나는지 보존되는지가 해밀턴 계와 그렇지 않은 계를 가르는 시금석이다.

심플렉틱 적분기는 설계 단계에서부터 각 스텝의 사상이 정확히 심플렉틱이 되도록 — 즉 부피를 정확히 보존하도록 — 만들어진다. 단계마다의 오차는 있어도 그 오차가 한 방향으로 쌓이지 않고, 행성 궤도처럼 수십억 스텝을 돌려야 하는 계산에서 결정적인 차이를 낸다. 10장의 단진자 코드에서 룽게–쿠타를 썼던 것을 떠올려 보자 — 그 정도 짧은 적분에서는 부피 새는 양이 눈에 안 띄지만, 같은 코드로 수백만 주기를 돌리면 궤적이 슬며시 안쪽으로 감기거나 바깥으로 풀린다. 심플렉틱 적분기는 그런 가짜 감김/풀림이 없도록 부피를 못 박아 두는 도구다.

본론 1에서 “변환의 야코비안이 심플렉틱이면 면적/부피가 보존된다”고 했던 한 줄이, 흐름 Φt\Phi_t 에 적용되는 순간 리우빌 정리라는 물리의 큰 명제가 된다.

파이썬으로 확인

# F_2 = q*P + (alpha/2) q^2 로 생성되는 전단 변환이 정준인지 수치로 확인.
# 격자에서 푸아송 괄호 {Q, P} = ∂q Q · ∂p P − ∂p Q · ∂q P 를 계산하면
# 정준 변환에서는 1이 나와야 한다.
import numpy as np

alpha = 0.3
N = 201
qs = np.linspace(-1.0, 1.0, N)
ps = np.linspace(-1.0, 1.0, N)
q, p = np.meshgrid(qs, ps, indexing="xy")   # q는 가로축, p는 세로축

# 새 좌표: Q = q,  P = p − α q
Q = q
P = p - alpha * q

# np.gradient는 (행, 열) 방향으로 미분을 돌려준다.
# 우리 격자에서 행 = p 방향, 열 = q 방향이므로 두 번째 반환값이 ∂/∂q.
dQ_dp, dQ_dq = np.gradient(Q, ps, qs)
dP_dp, dP_dq = np.gradient(P, ps, qs)

PB = dQ_dq * dP_dp - dQ_dp * dP_dq
print(f"{{Q, P}} mean = {PB.mean():.6f}")
print(f"{{Q, P}} std  = {PB.std():.2e}")

이 코드는 본론 2의 전단 변환 Q=qQ = q, P=pαqP = p - \alpha q 가 정준인지를 위상공간 격자 전체에서 수치로 검산한다. 검산 도구가 푸아송 괄호(Poisson bracket — 두 함수에서 만들어지는 위상공간 위의 반대칭 곱, 정식 정의는 12장) {Q,P}\{Q, P\} 인데, 1자유도에서 이 양은 야코비안 행렬식 detM\det M 과 같다. 격자의 모든 점에서 {Q,P}=1\{Q, P\} = 1 이 나오면 변환이 면적을 보존하는 정준 변환이라는 것이 — “1자유도: 정준 ⟺ 면적 보존” 그대로 — 확인된다.

np.linspacenp.meshgrid[1,1]×[1,1][-1, 1] \times [-1, 1] 의 위상공간 영역을 201×201201 \times 201 격자로 깐다. 그 위에 새 좌표 Q=qQ = q, P=pαqP = p - \alpha qα=0.3\alpha = 0.3 으로 얹는다. np.gradientQQPP 를 격자 방향으로 수치 미분해서 네 개의 부분 도함수 Q/q\partial Q/\partial q, Q/p\partial Q/\partial p, P/q\partial P/\partial q, P/p\partial P/\partial p 를 모두 얻는다. 우리 격자에서는 행이 pp 방향, 열이 qq 방향이라 np.gradient두 번째 반환값이 /q\partial/\partial q 가 된다 — 이 순서를 헷갈리면 부호가 어긋난다. 네 도함수를 {Q,P}=qQpPpQqP\{Q, P\} = \partial_q Q \cdot \partial_p P - \partial_p Q \cdot \partial_q P 라는 조합으로 묶어 격자 전체에서 계산하고, 평균과 표준편차를 출력한다.

평균이 11, 표준편차가 101210^{-12} 수준이면 격자 전체에서 변환의 야코비안이 곧 11 임이 손으로 확인된 셈이다 — 면적을 보존하는 정준 변환이다. 표준편차가 정확히 0이 아니라 101210^{-12} 인 것은 np.gradient 가 도함수를 유한 차분으로 근사하기 때문이고, 그 정도의 오차는 변환이 진짜로 정준이라는 결론을 흔들지 못한다.

다음 장으로

12장: 푸아송 괄호와 적분가능성에서는 이 장 끝에서 도구로만 빌려 쓴 푸아송 괄호 {Q,P}\{Q, P\} 를 정식으로 도입한다. “변환이 정준이다     \iff 기본 괄호 {Qi,Pj}=δij\{Q_i, P_j\} = \delta_{ij} 가 보존된다”가 본론 1의 심플렉틱 조건 MTJM=JM^T J M = J 의 다른 얼굴임이 밝혀진다. 거기서부터 보존량들이 서로 괄호를 이루며 닫힌 대수를 만들 때 계가 적분가능(integrable) 하다는, 해석역학 1권 마무리 장의 그림으로 이어진다.