구면 조화: 구 위의 푸리에

이 장의 물음

신호를 한 칸 밀어 넣어도 똑같이 작동하는 필터는 모두 사인·코사인 물결을 고유 벡터로 가졌다(평행이동 대칭). 물결 하나를 넣으면 같은 물결이 크기만 바뀌어 나오므로, 신호를 물결로 나눠 두면 필터는 물결마다 수 하나를 곱하는 일이 된다. 대칭을 모은 것(군)을 바꾸면 그 대칭에 맞는 「푸리에」도 바뀌어서, 그림을 90°씩 돌리는 대칭에는 점 네 개짜리 이산 푸리에 변환이 그 노릇을 했다.

그런데 값이 놓인 바탕이 줄이나 바둑판이 아니라 공의 겉면인 신호가 많다. 지구 표면의 기온, 밤하늘의 밝기, 방 한가운데에서 방향마다 들어오는 빛의 세기가 그렇다. 지구본을 위도·경도로 펴서 평평한 지도로 만들면 바둑판의 푸리에를 쓸 수 있을 것 같다. 하지만 펴는 순간 북극 한 점이 지도 맨 윗줄 전체로 늘어나고, 지도 맨 위와 맨 아래는 실제로는 지구 반대편이다. 구에는 구에 맞는 물결이 따로 있어야 하지 않을까?

ML에서도 같은 바탕이 나온다. 사진 수십 장으로 3차원 장면을 다시 짓는 모델은 공간에 흩뿌린 작은 덩어리마다 「어느 방향에서 보면 무슨 색인가」를 숫자 몇 개로 적어 둔다. 분자의 에너지를 예측하는 모델은 분자를 어떻게 돌려 놓아도 같은 답을 내야 하는데, 두 모델 모두 방향의 함수를 다룬다.

이 장은 다음 물음에 차례로 답한다.

구면 조화: 작은 원 평균이 모양을 바꾸지 않는 함수

날씨 지도를 매끈하게 다듬고 싶다고 하자. 관측소마다 잰 기온에는 노이즈가 섞여 있으니, 각 지점의 값을 그 둘레 일정한 거리에 있는 지점들의 평균으로 바꾼다. 서울의 값은 서울에서 300 km 떨어진 원 위의 평균으로, 남극 기지의 값은 그 기지에서 300 km 떨어진 원 위의 평균으로 바꾼다. 어디서나 같은 규칙을 쓰므로 지구본을 어떻게 돌려 놓고 해도 결과가 같다. 줄 위의 이웃 평균은 사인 물결을 모양 그대로 두고 크기만 줄였는데, 구 위의 이 평균에도 모양을 그대로 두는 무늬가 있을까? 있다면 그 무늬가 구의 「물결」일 것이다.

역사: 행성의 모양과 바깥 점까지의 거리

구 위의 물결은 기온이 아니라 중력에서 처음 나왔다. 18세기 학자들은 지구와 행성이 완전한 공이 아니라 적도 쪽으로 조금 부푼 회전 타원체라는 것을 알았고, 그런 덩어리가 바깥의 한 점을 얼마나 세게 끄는지 계산하려 했다. 점 하나와 덩어리의 모든 조각 사이의 거리를 하나하나 적분해야 하는 일이라 어려웠다.

르장드르(Adrien-Marie Legendre)는 1780년대 초 파리 왕립 과학원에 낸 논문 「균질한 회전 타원체의 인력에 관하여」(1785년 인쇄)에서, 바깥 점까지의 거리의 역수를 두 점 사이 각도의 코사인에 대한 다항식들로 펼쳤다. 지금 「르장드르 다항식」이라 부르는 것이다. 같은 무렵 라플라스(Pierre-Simon Laplace)도 1782년 과학원에 낸 「회전 타원체의 인력과 행성의 모양에 관한 이론」에서 같은 함수들을 썼다. 르장드르 자신은 펼치는 출발점이 된 함수를 라플라스가 먼저 내놓았고 펼치기는 자기가 했다고 적었다. 이 펼침 덕에 덩어리의 인력은 「각도에 따라 얼마나 출렁이는 성분이 얼마만큼 있나」의 합이 되었다. 공에서 멀어질수록 빨리 출렁이는 성분일수록 더 빨리 약해지므로, 멀리서는 앞의 몇 항만 남는다.

르장드르 다항식 P0 … P4. 가로축은 바깥 점과 덩어리 조각이 중심에서 이루는 각도의 코사인이다. 번호가 클수록 많이 출렁인다(sources/spherical-harmonics/figs.py)
르장드르 다항식 P0 … P4. 가로축은 바깥 점과 덩어리 조각이 중심에서 이루는 각도의 코사인이다. 번호가 클수록 많이 출렁인다(sources/spherical-harmonics/figs.py)

이 함수들을 구 위의 어느 방향으로나 쓸 수 있게 넓힌 것이 오늘의 구면 조화다. 「구면 조화(spherical harmonics)」라는 이름은 톰슨(William Thomson, 뒤의 켈빈 경)과 테이트(Peter Guthrie Tait)가 1867년 『자연철학 논고』에서 처음 쓴 것으로 알려져 있다(2차 자료 기준이고, 원문은 확인하지 못했다).

작은 원 평균을 직접 해 보면

손으로 계산할 수 있게 지구를 반지름 1인 공으로 놓고, 방향을 길이 1인 벡터 (x, y, z)로 적는다. z는 북극 쪽, x는 경도 0°, y는 경도 90° 쪽이다. 극에서도 값이 하나로 정해지기 때문에 위도·경도 대신 x, y, z를 쓴다(북극의 경도는 정할 수 없지만 북극의 x, y, z는 (0, 0, 1) 하나다).

구 위의 함수 몇 개에 대해, 점 세 곳에서 「반지름 30° 작은 원 위의 평균」을 그 점의 값으로 나눠 보았다. 점 가는 북위 37.5°·동경 127°(서울쯤), 나는 적도·경도 0°, 다는 북위 60°·경도 45°다.

함수 점 가 점 나 점 다
1 (어디서나 같은 값) 1.0000 1.0000 1.0000
z 0.8660 (값이 0) 0.8660
x 0.8660 0.8660 0.8660
3z² − 1 0.6250 0.6250 0.6250
x² − y² 0.6250 0.6250 (값이 0)
x² 1.1733 0.7500 1.6250

상수, z, x, 3z² − 1, x² − y²는 어느 점에서 재도 비가 같다. 평균을 내면 모든 점의 값에 같은 수가 곱해지니, 무늬의 모양은 그대로이고 크기만 준다. x²은 다르다. 점마다 비가 1.17, 0.75, 1.63으로 제각각이니 평균을 내면 무늬의 모양이 바뀐다. 2차 단항식인데 왜 모양이 바뀌는지는 아래 문제 2에서 따진다.

곱해지는 수에도 규칙이 있다. z와 x는 0.8660 = cos 30°이고, 3z² − 1과 x² − y²는 0.6250 = (3 cos² 30° − 1)/2다. 역사 소절에서 본 르장드르 다항식 P1과 P2에 cos 30°를 넣은 값이다. 모양을 지키는 1차 함수(z, x)는 P1을, 모양을 지키는 2차 함수(3z² − 1, x² − y²)는 P2를 곱받는다.

원을 아주 작게 줄이면 무엇이 남을까? 평균과 그 점의 값의 차이를 α²/4로 나누면, 원의 반지름 α가 0으로 갈 때 z는 −2, 3z² − 1은 −6, z(5z² − 3)은 −12에 다가간다(α = 1° 에서 −1.9999, −5.9994, −11.9974). 이렇게 작은 원 평균이 그 점의 값에서 벗어나는 정도를 재는 연산을 구의 라플라시안 ΔS라 한다(줄 위에서 이웃 평균과 자기 값의 차이가 2계 도함수가 되는 것과 같은 계산이다).

(반지름 α 작은 원 위 평균)−f(u)α2/4  → α→0   ΔSf(u),ΔS Ylm=λl Ylm,λl=−l(l+1)\frac{(\text{반지름 } \textcolor{#ff1eff}{\alpha} \text{ 작은 원 위 평균}) - \textcolor{#1b9e77}{f}(\textcolor{#a67a63}{\mathbf{u}})}{\textcolor{#ff1eff}{\alpha}^2/4} \;\xrightarrow{\ \textcolor{#ff1eff}{\alpha}\to 0\ }\; \Delta_S \textcolor{#1b9e77}{f}(\textcolor{#a67a63}{\mathbf{u}}), \qquad \Delta_S\, \textcolor{#9467bd}{Y}_{\textcolor{#0078e1}{l}}^{\textcolor{#0078e1}{m}} = \textcolor{#0093b8}{\lambda}_{\textcolor{#0078e1}{l}}\, \textcolor{#9467bd}{Y}_{\textcolor{#0078e1}{l}}^{\textcolor{#0078e1}{m}}, \quad \textcolor{#0093b8}{\lambda}_{\textcolor{#0078e1}{l}} = -\textcolor{#0078e1}{l}(\textcolor{#0078e1}{l}+1)
u구 위의 방향: 길이 1인 벡터 (x,y,z)f(u)구 위의 함수: 방향마다 값 하나 (기온, 밝기 …)α알파: 작은 원의 반지름 (중심에서 본 각도, 라디안)ΔS구의 라플라시안: 작은 원 평균이 제자리 값에서 벗어나는 정도Ylm구면 조화: 차수 l, 번호 m 인 기저 함수l, m차수 l=0,1,2,… 와 차수 안의 번호 m=−l,…,lλl람다: 차수 l 의 고윳값\begin{array}{ll} \textcolor{#a67a63}{\mathbf{u}} & \text{구 위의 방향: 길이 1인 벡터 } (x, y, z) \\ \textcolor{#1b9e77}{f}(\textcolor{#a67a63}{\mathbf{u}}) & \text{구 위의 함수: 방향마다 값 하나 (기온, 밝기 …)} \\ \textcolor{#ff1eff}{\alpha} & \text{알파: 작은 원의 반지름 (중심에서 본 각도, 라디안)} \\ \Delta_S & \text{구의 라플라시안: 작은 원 평균이 제자리 값에서 벗어나는 정도} \\ \textcolor{#9467bd}{Y}_{\textcolor{#0078e1}{l}}^{\textcolor{#0078e1}{m}} & \text{구면 조화: 차수 } l \text{, 번호 } m \text{ 인 기저 함수} \\ \textcolor{#0078e1}{l},\ \textcolor{#0078e1}{m} & \text{차수 } l = 0, 1, 2, \ldots \text{ 와 차수 안의 번호 } m = -l, \ldots, l \\ \textcolor{#0093b8}{\lambda}_{\textcolor{#0078e1}{l}} & \text{람다: 차수 } l \text{ 의 고윳값} \end{array}

구의 라플라시안을 해도 모양이 그대로이고 수 하나만 곱해지는 함수, 곧 구의 라플라시안의 고유 함수를 구면 조화 (구의 라플라시안의 고유 함수 / spherical harmonics)라 한다. 「조화」는 라플라시안이 0인 함수를 부르는 「조화 함수」에서 온 이름이고, 음악의 화음과는 상관이 없다. 곱해지는 수 λ = −l(l + 1)의 l을 차수라 부르는데, 차수는 무늬가 구를 한 바퀴 도는 동안 몇 번 출렁이는가를 센다. 구면 조화를 x, y, z의 다항식으로 적으면 차수는 그 다항식의 차수와 같다(최적화에서 말하는 1차·2차 방법의 「차수」와는 다른 말이다).

차수 l의 구면 조화는 몇 개일까? x, y, z로 만드는 l차 단항식은 x, y, z 세 글자에서 중복을 허락해 l개를 고르는 수만큼 있다. l = 2면 x², y², z², xy, yz, zx 여섯 개다. 그런데 구 위에서는 x² + y² + z²이 늘 1이라서 그 조합은 상수(차수 0)일 뿐 새 함수가 아니다. 그래서 하나를 빼면 다섯 개가 남는다. 일반적으로는 l차 단항식 수에서 (l − 2)차 단항식에 x² + y² + z²을 곱한 수를 빼고, 단항식 수의 차이가 늘 2l + 1이다. 차수 0은 1개, 1은 3개(y, z, x), 2는 5개, 3은 7개이고, 차수 l까지 모두 모으면 (l + 1)²개다. 다르게 적힌 무늬가 같은 차수에 여럿인 것은, 구에는 정해진 방향이 없어서 한 무늬를 돌려 놓은 것들이 모두 같은 λ를 갖기 때문이다.

차수 0 부터 3 까지의 구면 조화. 빨강은 양수, 파랑은 음수다. 차수 l 마다 2l + 1 개가 있고, 아래 글자는 같은 무늬를 x, y, z 다항식으로 적은 것이다(구 전체에서 제곱 적분이 1 이 되게 곱한 수는 뺐다. figs.py)
차수 0 부터 3 까지의 구면 조화. 빨강은 양수, 파랑은 음수다. 차수 l 마다 2l + 1 개가 있고, 아래 글자는 같은 무늬를 x, y, z 다항식으로 적은 것이다(구 전체에서 제곱 적분이 1 이 되게 곱한 수는 뺐다. figs.py)
직접 움직여 보기구면 조화 고르기새 창에서 열기 ↗

ML에서: 구 위의 날씨를 구면 조화로 계산하는 신경망

날씨 예보 신경망은 지구 전체의 기온·바람·기압을 위도·경도 격자에 담아 몇 시간 뒤의 격자를 내놓는다. 평평한 그림에 쓰던 푸리에 신경 연산자는 격자를 2차원 푸리에 변환으로 바꾼 뒤 주파수마다 배운 수를 곱한다. 보네프(Boris Bonev)와 동료들의 구면 푸리에 신경 연산자(2023)는 이 방법이 구 위의 자료를 평평하다고 보고 계산하는 탓에 가짜 무늬가 생기고 무늬가 지나치게 뭉개진다고 짚었다. 그래서 2차원 푸리에 변환 자리에 구면 조화 변환을 넣었다. 구 위의 작은 원 평균이 차수마다 수 하나를 곱하는 일이었듯, 구를 어떻게 돌려 놓고 해도 결과가 같은 연산은 모두 차수마다 수를 곱하는 일이 된다. 이렇게 만든 모델은 6시간 스텝을 1,460번 이어 붙여 1년치 대기를 굴려도 무너지지 않았다고 논문은 보고했다. 격자 점과 계수가 각각 몇 개인지는 아래 문제 3에서 센다.

문제 1. 아이스크림 세 맛

아이스크림 가게에 바닐라, 초코, 딸기 세 맛이 있는데, 컵에 담는 순서는 따지지 않고 같은 맛을 여러 번 담아도 된다. (가) 두 스쿱 컵은 몇 가지인가? (나) 세 스쿱 컵은? (다) k 스쿱 컵의 가짓수를 k 로 적어라.

김민준 M01
김민준

(가)는 3 × 3 = 9가지요.

선생님 T01
선생님

「바닐라 다음 초코」와 「초코 다음 바닐라」를 따로 셌네요. 컵에 담긴 아이스크림이 다른가요?

김민준 M04
김민준

아, 같은 컵이에요. 다른 맛 둘은 세 쌍, 같은 맛 둘은 세 가지니까 6가지요. 세 스쿱은 하나씩 적어 보니 10가지예요.

이서연 S01
이서연

스쿱이 많아지면 하나씩 적기 힘들겠다. 맛 순서를 바닐라, 초코, 딸기로 정해 두고, 세 칸에 스쿱을 나눠 담는다고 보면 어때?

선생님 T01
선생님

칸과 칸 사이에는 무엇이 있죠?

이서연 S07
이서연

칸막이 두 개요. 스쿱 k개와 칸막이 두 개를 한 줄에 놓으면, (k + 2)개 자리 가운데 칸막이 자리 둘을 고르는 거네요. (k + 2)(k + 1)/2요.

김민준 M01
김민준

세 스쿱에 넣어 보면 내가 센 10가지랑 맞네.

이서연 S01
이서연

네 스쿱이면 15가지야.

이서연 S08
이서연

맛을 x, y, z로 바꾸면 이게 l차 단항식의 개수예요. 두 스쿱 여섯 가지가 x², y², z², xy, yz, zx고요.

김민준 M11
김민준

그리고 구 위에서는 x² + y² + z²이 늘 1이라 여섯 가지 가운데 하나가 빠지는 거죠. 칸막이로 나누는 건 조별 과제에서 발표 다섯 꼭지를 세 사람에게 나눠 맡기는 경우의 수 셀 때 써 봤어요.

문제 2. xyz 와 x², 그리고 큰 원

(가) xyz 는 구면 조화인가? 점 가(북위 37.5°·동경 127°)에서 반지름 30° 작은 원 평균 ÷ 그 점의 값을 구하고, 다른 점에서도 같은지 말하라. (나) x² 는 왜 구면 조화가 아닌가? x² 를 구면 조화들의 합으로 적어라. (다) 3z² − 1 의 북극 값은 2 인데, 북극에서 반지름 60° 원 위의 평균은 얼마이고, 비는 얼마인가? (위젯 1의 「문제 2 (가)」「문제 2 (다)」 불러오기로 확인해 보자.)

김민준 M01
김민준

(가)는 위젯에 넣어 보니 점 가에서 0.3248이고 점 다에서도 0.3248이에요. 구면 조화네요. 차수는… 1차 곱하기 셋이라 3이요.

이서연 S01
이서연

확인해 보면 P3(cos 30°) = (5 cos³ 30° − 3 cos 30°)/2 = 0.3248로 맞아. 차수 3이면 비가 P3(cos α)인 거지.

선생님 T01
선생님

(나)는요?

김민준 M01
김민준

x²은 2차니까 차수 2요. 0.625가 나와야 하는데 점마다 다르게 나오네요.

이서연 S06
이서연

2차 단항식이어도 x² 하나로는 안 되나 봐. 아, 구 위에서는 x² + y² + z² = 1이라 x²에 상수가 숨어 있어.

선생님 T01
선생님

그 상수를 떼어 내 볼래요?

이서연 S01
이서연

x² = (x² − 1/3) + 1/3이요. x² − 1/3은 3x² − 1을 3으로 나눈 거라 3z² − 1을 돌려 놓은 꼴이니까 차수 2, 1/3은 차수 0이에요.

김민준 M03
김민준

그럼 평균을 내면 어떻게 돼?

이서연 S07
이서연

두 차수에 0.625배와 1배가 따로 곱해져. 그래서 모양이 바뀌어.

선생님 T02
선생님

(다)는 어때요? 평균은 크기를 줄이기만 한다고 했죠.

김민준 M04
김민준

북극에서 60° 떨어진 원은 위도 30°선이에요. 거기서 z = 0.5라서 3 × 0.25 − 1 = −0.25. 원 위가 다 같은 값이라 평균도 −0.25예요. 비는 −0.125. 부호가 뒤집혔어요!

이서연 S06
이서연

P2(cos 60°) = (3 × 0.25 − 1)/2 = −0.125니까 계산은 맞아. 그런데 「크기를 줄이기만 한다」랑은 어긋나네.

선생님 T01
선생님

원 위의 점들이 3z² − 1의 어느 부분을 지나는지 봐요.

이서연 S07
이서연

원이 커지면 북극의 빨간 봉우리를 벗어나서 파란 띠 위를 지나가요. 아, 「작은 원」이라는 조건이 있어야 「크기만 준다」가 맞는 거였어요. 모양을 지킨다는 건 그대로고, 곱해지는 수가 음수가 될 수 있을 뿐이고요.

선생님 T13
선생님

그래요. 어떤 크기의 원이든 구면 조화는 모양을 지켜요. 곱해지는 수 Pl(cos α)가 작은 원에서는 1에 가깝고, 원이 커지면 0을 지나 음수로도 가요. 차수가 높을수록 더 작은 원에서 그렇게 되고요.

이서연 S11
이서연

사인 물결을 반 주기만큼 떨어진 두 점으로 평균하면 0, 한 주기 넘게 떨어진 점들로 평균하면 부호가 바뀌던 거랑 같네. 평균 내는 폭이 물결보다 넓어지면 곱해지는 수가 0을 지나 음수가 되는 거지.

문제 3. 위도·경도 0.25° 격자

날씨 모델이 지구를 위도·경도 0.25° 간격 격자에 담는다. 위도는 −90° 부터 90° 까지 양 끝을 넣고, 경도는 0° 부터 359.75° 까지다. (가) 격자 점은 몇 개인가? (나) 적도에 닿은 0.25° × 0.25° 칸과 극에 닿은 칸의 넓이는 몇 배 차이인가? 북극에는 격자 점이 몇 개 겹치는가? (다) 차수 720 까지의 구면 조화 계수는 몇 개인가? 이 격자를 평평한 그림처럼 보고 2차원 푸리에 변환을 하면 무엇이 잘못되는가?

김민준 M01
김민준

(가)는 위도 줄 721, 경도 칸 1440이라 1,038,240개요. (나)는 지구 반지름 6371 km로 계산하면 적도 칸이 772.8 km², 극 칸이 1.686 km²라 458배예요. 북극 줄 1440점은 다 같은 곳이고요.

이서연 S01
이서연

(다)는 차수 l까지 (l + 1)²개니까 721² = 519,841개. 격자 점의 절반쯤이야.

선생님 T01
선생님

같은 신호를 적는데 숫자가 반으로 줄었네요. 그럼 평평한 2차원 푸리에 변환은 지도의 위 끝과 아래 끝을 어떻게 다루죠?

김민준 M05
김민준

2차원 이산 푸리에 변환은 그림이 가로로도 세로로도 되풀이된다고 봐요. 가로는 경도 359.75° 다음이 0°라 맞는데, 세로는 맨 윗줄(북극) 다음이 맨 아랫줄(남극)이 돼요. 북극 바로 옆이 남극이라고 보는 거네요.

이서연 S08
이서연

게다가 북극 줄 1440칸을 서로 다른 1440곳으로 봐서, 한 점 둘레에서 1440번 출렁이는 빠른 무늬가 있다고 착각할 수 있어. 넓이가 458배 작은 칸에 숫자를 똑같이 쓰는 것도 낭비고.

선생님 T13
선생님

그래요. 위도·경도 격자는 저장하기 편한 꼴일 뿐이에요. 계산은 구의 대칭에 맞는 축, 구면 조화로 해야 극이 특별한 곳이 되지 않아요.

김민준 M11
김민준

엑셀로 세계지도를 칸에 칠하는데 맨 윗줄 칸이 다 북극이라 이상했던 게 이거였어요.