곡면 위의 운동 — 구속과 라그랑주 승수

구슬은 고리 위에서만 움직인다 — 구속조건이 자유도를 어떻게 줄이고, 라그랑주 승수가 어떻게 구속력의 정체를 알려주는가.

들어가며

뉴턴 역학을 1장에서 정리할 때 우리는 입자가 3차원 공간을 자유롭게 떠다닌다고 가정했다. 그러나 실제 문제 대부분은 그렇지 않다. 구슬은 철사 고리 위에만 있고, 진자 추는 길이가 일정한 줄 끝에 매달려 있으며, 동전은 미끄러지지 않고 굴러간다. 이 장에서는 이런 구속조건(constraint) 을 두 종류로 나누고, 그중 가장 자주 등장하는 홀로노믹(holonomic) 구속을 곡면 S2S^2 위의 운동이라는 그림으로 만져본다. 그리고 7장에서 본격적으로 다룰 라그랑주 승수(Lagrange multiplier) 가 단순한 수학 트릭이 아니라 구속력 그 자체 를 측정한다는 사실을 미리 맛본다.

본론 1 — 두 종류의 구속

구속조건은 형식에 따라 두 부류로 나뉜다.

홀로노믹 구속 은 좌표만의 (그리고 경우에 따라 시간만의) 방정식

f(q,t)=0f(q, t) = 0

으로 쓰인다. 여기서 q=(q1,,qn)q = (q^1, \dots, q^n) 은 입자의 좌표 묶음이다. 이 한 줄의 식이 형상공간(configuration space, 가능한 위치들의 집합)의 차원을 하나 줄인다. 예를 들어 반지름 RR 인 원형 고리 위의 구슬은 평면에서 f(x,y)=x2+y2R2=0f(x, y) = x^2 + y^2 - R^2 = 0 을 만족하므로, 2차원에서 1차원 곡선으로 자유도가 떨어진다. 마찬가지로 단위 반지름 구면 S2S^2 위의 점은 x2+y2+z2=1x^2 + y^2 + z^2 = 1 을 만족하며 3차원이 2차원 곡면으로 줄어든다.

비홀로노믹 구속 은 속도에 걸리는 선형 조건

iai(q)q˙i=0\sum_i a_i(q)\, \dot q^i = 0

으로 쓰이지만, 이 식이 좌표만의 식으로 적분되지 않는다. 즉, f(q)=0f(q) = 0 형태로 다시 쓸 수가 없다. 고전적인 예가 미끄러지지 않는 동전의 구름조건 — 동전은 평면 위 어디든 갈 수 있지만(좌표 공간은 줄어들지 않는다), 각 순간의 속도 방향은 동전이 굴러가는 쪽으로 제약된다. 이 장에서는 홀로노믹 쪽만 깊이 다룬다. 역학 교과서에서 마주치는 구속은 대부분 이쪽이고, 비홀로노믹은 7장 이후 별도 절에서 다루는 편이 깔끔하다.

본론 2 — 고리 위의 구슬, 처음부터 끝까지

질량 mm 인 구슬이 반지름 RR수직 원형 고리 위를 미끄러진다. 중력가속도는 gg. 구슬의 위치를 고리의 가장 아래쪽에서 잰 각도 θ\theta (theta) 하나로 잡자. 그러면

x=Rsinθ,y=R(1cosθ).x = R\sin\theta, \qquad y = R(1 - \cos\theta).

운동에너지와 위치에너지는 곧장 떨어진다:

T=12mR2θ˙2,V=mgR(1cosθ).T = \tfrac{1}{2} m R^2 \dot\theta^2, \qquad V = m g R (1 - \cos\theta).

7장에서 라그랑지언 L=TVL = T - V 를 정식으로 도입하지만, 여기서는 그 결과만 미리 빌려 쓰자. 상수항 mgRmgR 은 운동방정식에 영향을 주지 않으므로 떼어내면

L=12mR2θ˙2+mgRcosθ.L = \tfrac{1}{2} m R^2 \dot\theta^2 + m g R \cos\theta.

이걸 오일러–라그랑주 방정식

ddt ⁣(Lθ˙)Lθ=0\frac{d}{dt}\!\left( \frac{\partial L}{\partial \dot\theta} \right) - \frac{\partial L}{\partial \theta} = 0

에 넣으면 mR2θ¨+mgRsinθ=0m R^2 \ddot\theta + m g R \sin\theta = 0, 즉

θ¨+gRsinθ=0.\ddot\theta + \frac{g}{R} \sin\theta = 0.

이는 바로 진자 방정식 이다. 원래는 (x,y,z)(x, y, z) 세 좌표에 고리의 제약식 둘이 걸린 3-DOF 문제였지만, 적절한 일반좌표 θ\theta 하나를 잡아 단번에 1-DOF 문제로 줄였다. 이게 라그랑주 형식주의가 학생을 매료시키는 첫 번째 장면이다 — 구속을 대수적으로 풀어 없애버린다.

본론 3 — 라그랑주 승수가 가리키는 것

좌표를 일반좌표로 바꾸면 구속력은 식에서 사라진다. 그러나 가끔은 정확히 그 구속력을 알고 싶다 — 예를 들어 고리가 구슬에 가하는 수직항력 이 얼마나 큰지, 고리가 그 힘을 견딜 수 있는지가 공학 문제로 들어온다.

이때는 좌표를 줄이지 않고, 원래 좌표 (x,y)(x, y) 를 그대로 두면서 구속식 f(x,y)=x2+y2R2=0f(x, y) = x^2 + y^2 - R^2 = 0별도로 부과한다. 운동방정식에 한 항을 더해

mr¨=V+λfm \ddot{\mathbf{r}} = -\nabla V + \lambda\, \nabla f

라고 쓴다. 여기서 λ\lambda (lambda) 가 라그랑주 승수 다. f\nabla f 는 구속 곡면에 수직인 벡터이므로, 추가된 항 λf\lambda \nabla f 는 곡면에 수직한 힘, 즉 정확히 우리가 찾던 수직항력의 방향이다. 그 크기 — 부호 포함 — 가 λ\lambda 이다.

다시 말해, 라그랑주 승수는 단순히 제약식을 만족시키기 위해 동원한 수학 도구가 아니라 구속력의 진폭 그 자체를 가리키는 물리량이다. 정식 유도는 7장 변분원리와 구속 에서 다룬다. 여기서는 “라그랑주 승수 = 구속력의 크기” 라는 한 줄을 머릿속에 박아두면 충분하다.

파이썬으로 확인

# 고리 위의 구슬: theta_ddot = -(g/R) sin(theta) 를 RK4로 적분.
import numpy as np
import matplotlib.pyplot as plt

g, R = 9.81, 0.2
dt, T_end = 1e-3, 4.0
N = int(T_end / dt)

def f(state):
    th, om = state
    return np.array([om, -(g / R) * np.sin(th)])

state = np.array([np.pi / 3, 0.0])   # theta0 = 60도, 정지에서 출발
ts = np.linspace(0, T_end, N + 1)
ths = np.empty(N + 1)
oms = np.empty(N + 1)
ths[0], oms[0] = state

for i in range(N):
    k1 = f(state)
    k2 = f(state + 0.5 * dt * k1)
    k3 = f(state + 0.5 * dt * k2)
    k4 = f(state + dt * k3)
    state = state + (dt / 6) * (k1 + 2*k2 + 2*k3 + k4)
    ths[i + 1], oms[i + 1] = state

fig, ax = plt.subplots(2, 1, sharex=True)
ax[0].plot(ts, ths); ax[0].set_ylabel(r'$\theta$ [rad]')
ax[1].plot(ts, oms); ax[1].set_ylabel(r'$\dot\theta$ [rad/s]')
ax[1].set_xlabel('t [s]')
plt.tight_layout(); plt.show()

궤적은 한 주기를 닫고 다시 같은 진폭으로 돌아온다. 진폭이 작았다면 거의 사인 곡선이지만, θ0=π/3\theta_0 = \pi/3 처럼 큰 진폭에서는 마루 근처에서 약간 평평해지는 비조화성(anharmonicity) 이 눈에 띈다. sinθ\sin\theta 의 비선형성이 만들어내는 효과다.

다음 장으로

3장: 텐서와 공변미분에서는 이 장에서 곡면이라 부른 대상 — 자유도가 줄어든 부드러운 공간 — 을 다양체 라는 정식 이름으로 다시 만나고, 그 위에서 벡터를 어떻게 미분해야 좌표 선택에 의존하지 않는지를 본다. 라그랑지언이 “좌표를 자유롭게 바꿔도 같은 방정식을 준다”는 점이 우연이 아니라는 사실도 그때 분명해진다.