Unknownpgr

라그랑주 역학[3] - 라그랑지언과 액션

2020-10-27 17:35:09 | English, Korean

라그랑지언과 액션

이제 거의 다 온 것 같습니다. 라그랑주 역학 시리즈의 결말, 라그랑지언과 액션에 대해 알아보겠습니다.(이제 드디어 뭔가 라그랑주 역학과 직접적으로 관계 있어 보이는 용어가 나왔습니다.)

라그랑지언

라그랑지언 LL은 어떤 시스템의 퍼텐셜 에너지 TT에서 운동에너지 UU를 뺀 값으로 정의됩니다. 즉

L=TUL=T-U

가 됩니다. 예를 들어 두 개의 입자가 있는 어떤 2차원 시스템을 생각해봅시다. 이 시스템의 라그랑지언은 아래와 같습니다.

T=mgy1+mgy2=mg(y1+y2)U=12m(x1˙2+y1˙2)+12m(x2˙2+y2˙2)=12m(x1˙2+y1˙2+x2˙2+y2˙2)L=mg(y1+y2)12m(x1˙2+y1˙2+x2˙2+y2˙2)T=mgy_1+mgy_2=mg(y_1+y_2)\\ U=\frac{1}{2}m(\dot{x_1}^2+\dot{y_1}^2)+\frac{1}{2}m(\dot{x_2}^2+\dot{y_2}^2) =\frac{1}{2}m(\dot{x_1}^2+\dot{y_1}^2+\dot{x_2}^2+\dot{y_2}^2)\\ \therefore L=mg(y_1+y_2)-\frac{1}{2}m(\dot{x_1}^2+\dot{y_1}^2+\dot{x_2}^2+\dot{y_2}^2)

다만 이는 일반화 좌표계가 아니라 직교좌표계를 사용하여 표기했는데, 라그랑지언은 일반화 좌표계를 사용하여 표시해줘야 합니다. 물론 아무런 구속이 없는 경우, 일반화 좌표계 = 직교좌표계입니다.

구속 조건이 있는 간단한 예로, 수직선과의 각도θ\theta를 일반화 좌표로 한 진자의 라그랑지언을 계산해보면 아래와 같습니다. LL은 진자의 길이입니다.

T=mgy=mgcosθU=12mv2=12m(Lθ˙)2L=mgcosθ12m(Lθ˙)2T=mgy=mg\cos\theta\\ U=\frac{1}{2}mv^2=\frac{1}{2}m(L\dot\theta)^2\\ \therefore L=mg\cos\theta-\frac{1}{2}m(L\dot\theta)^2

액션

그러므로 라그랑지안은 일반적으로 일반화 좌표 q(t)q(t), 그것의 미분 q(t)˙\dot{q(t)}, 그리고 시간 tt에 대한 함수가 됩니다.

L(q(t),q˙(t),t)L(q(t),\dot{q}(t),t)

이때 이것의 시간 적분을 액션이라 하며, 액션은 일반화 좌표 함수 q(t)q(t)에 대한 범함수가 됩니다.

S[q]=t0t1L(q(t),q˙(t),t)dtS[q]=\int_{t_0}^{t_1}L(q(t),\dot{q}(t),t)dt

최소 작용의 원리

이때 최소 작용의 원리란, 어떤 시스템 q(t1)q(t_1)q(t2)q(t_2)로 될 때, 그 변화는 액션 SS를 최소화한다는 의미입니다.

이게 무슨 의미냐면, 어떤 시스템의 상태가 변화한다고 가정합시다. 예를 들어 입자 하나가 (x1,y1)(x_1,y_1)에서 (x2,y2)(x_2,y_2)로 이동했다고 가정합니다. 이때 이 두 지점을 잇는 경로는 무한히 많은데, 그중 입자가 실제로 지나는 경로는 반드시 그 경로를 지날 때의 라그랑지언의 시간 적분 SS를 최소화한다는 의미입니다. 그러므로 이 경로 함수는 범함수 S[q]S[q]의 정류값이 되며, 저번 포스팅에서 다루었던 오일러-라그랑주 방정식을 적용하면, 어떤 nn개의 일반화 좌표 q1,q2,...,qnq_1,q_2,...,q_n으로 이루어진 시스템의 변화는 다음 연립편미분방정식을 만족시킨다는 것을 알 수 있습니다.

LqiddtLqi˙=0\frac{\partial L}{\partial q_i}-\frac{d}{dt}\frac{\partial L}{\partial\dot{q_i}}=0

짜잔!

이제 아무 시스템이나 저 연립편미분방정식에 집어넣으면 자동으로 경로가 튀어나옵니다.

적용

사실 라그랑주 역학은 뉴턴 역학과 다르게 약간 비직관적인 측면이 있습니다. 왜냐하면 라그랑주 역학에서는 위에서 언급한 최소작용의 원리가 자연의 근본적인 원리이고, F=maF=ma와 같은 다른 물리 법칙들이 이로부터 유도되는 것이라고 간주하기 때문입니다. 제가 최소 작용의 원리가 왜 성립하는지를 알았다면 좀 더 잘 설명할 수 있었을 것 같은데, 공부가 얕아 아직 그까지는 잘모르겠습니다...ㅠㅠ

그러나 라그랑주 역학이 비록 비직관적이고 그 풀이가 복잡해 보이더라도, 복잡한 시스템, 특히 구속이 있는 시스템의 매우 강력한 분석 방법을 제공합니다. 왜냐하면 위에서도 볼 수 있듯이 구속 조건이 있다는 말은 위치의 각 성분이 다른 성분에 영향을 미친다는 의미이기 때문입니다. 따라서 뉴턴 역학을 사용하여 구속 조건이 있는 시스템을 해석하려면 각 성분간의 관계 역시 고려해주어야만 합니다. 특히 입자가 여러 개인 시스템이라면 입자간의 위치 역시 서로 영향을 미칠 수도 있습니다.

그러나 라그랑주 역학에서는 영향을 미치는 요소들을 전부 제거한 일반화 좌표와 일반화 운동량만을 이용하기 때문에 모든 방정식을 독립적으로 해석할 수 있습니다. 그러므로 해석이 매우 편리해집니다. 어떤 글들을 보면 뉴턴 역학에서는 벡터를 사용하는 반면 라그랑주 역학에서는 스칼라를 사용하므로 편리하다고 되어 있는데 이것 역시 일맥상통하는 이야기입니다. 구속 조건이 있다면 벡터의 각 성분이 독립적이지 않으므로 함부로 벡터를 성분들로 분해할 수 없습니다.

또다른 장점은 기계적 해석이 가능하다는 점입니다. 라그랑주 역학은 정말 정해진 방법론을 따르기 때문에, 사람이 굳이 직접 시스템을 해석할 필요가 없습니다. 일반화 좌표와 직교좌표 사이의 관계, 퍼텐셜 에너지만 주어지면 해석은 프로그램이 알아서 할 수 있습니다. 실제로 아래에서 매트랩 스크립트를 사용하여 자동으로 시스템 분석을 수행할 것입니다.

예시

라그랑주 역학은 직관적으로는 잘 이해가 되지 않더라도 예시를 보면 약간 느낌을 잡을 수 있습니다.

자유 낙하

그냥 아무 제약 조건도 없는 입자가 있습니다. 이 입자의 운동을 해석해보겠습니다. 물론 우리는 뉴턴 역학으로부터 이러한 입자는 그냥 자유낙하한다는 것을 알고 있습니다.

먼저 이 입자는 일반화 좌표계나 그냥 직교좌표계나 같다고 쳐도 됩니다. 이때 라그랑지언을 구하면

L=TU=mgym(x˙2+y˙2)/2L=T-U=mgy-m(\dot{x}^2+\dot{y}^2)/2

이 되고, 여기에서 일반화 좌표 xx에 대해 위 오일러-라그랑주 방정식을 적용해보면

LxddtLx˙=dmx˙dt=mx¨=0x¨=0\frac{\partial L}{\partial x}-\frac{d}{dt}\frac{\partial L}{\partial\dot{x}} =\frac{dm\dot{x}}{dt}=m\ddot{x}=0\\ \therefore\ddot{x}=0

yy에 대해 오일러-라그랑주 방정식을 적용해보면

LyddtLy˙=mgmy¨=0y¨=g\frac{\partial L}{\partial y}-\frac{d}{dt}\frac{\partial L}{\partial\dot{y}} =mg-m\ddot{y}=0\\ \therefore \ddot{y}=-g

를 얻습니다. 이는 우리가 뉴턴 역학에서 F=maF=ma를 사용하여 얻은 결과와 정확히 일치합니다. x방향의 가속도는 없고, y방향으로는 g-g속도로 가속합니다.

탄성 단진자

a27d24_9c20db9a1d634fbaa592eea14c8997fe~mv2

위와 같은 진자 시스템을 해석해보겠습니다. 그런데 그냥 진자라고 하면 재미없으니까, 벽과 진자를 연결하는 줄이 강체가 아니라 용수철 계수 kk를 갖는 용수철이라고 생각해보겠습니다. (물론 용수철의 크기와 무게까지 고려해도 되지만, 그러면 너무 복잡해지므로 용수철의 질량은 0이고 무한히 얇다고 가정하겠습니다.) 그러므로 이 진자는 좌우로도 흔들리면서 줄 길이도 변하는 엄청 복잡한 운동을 하게 됩니다.

먼저 이 진자를 위한 일반화 좌표를 찾아보겠습니다. 이 진자는 줄이 용수철이기 때문에 위치를 제한하는 것이 아무것도 없습니다. 그러므로 제약 조건이 없는 시스템이며, 따라서 두 개의 일반화 좌표를 선택할 수 있습니다. 저는 직관적으로 용수철의 길이 ll과 이 용수철이 수직선과 이루는 각도 θ\theta를 선택해보겠습니다. (용수철의 질량이 0이기 때문에, 용수철은 휘거나 하지 않고 직선이 됩니다.) 물론 진자의 x,yx,y좌표를 선택해도 되지만, 이렇게 선택하는 것이 해석이 훨씬 쉬울 것입니다.

다음으로는 라그랑지언을 계산한 후 방정식을 풀면 됩니다. 라그랑지언은 아래와 같이 주어집니다.

T=mglcosθ+12kl2U=12m(l˙2+(lθ˙)2)L=mglcosθ+12kl212m(l˙2+(lθ˙)2)T = -mgl\cos\theta+\frac{1}{2}kl^2\\ U = \frac{1}{2}m(\dot{l}^2+(l\dot\theta)^2)\\ \therefore L = -mgl\cos\theta +\frac{1}{2}kl^2 - \frac{1}{2}m(\dot{l}^2+(l\dot\theta)^2)

아...그런데 누가 봐도 미분하기가 귀찮게 생겼습니다. 그래서 이번에는 손으로 미분을 하지 말고, 매트랩 스크립트를 사용하여 계산을 수행해보도록 하겠습니다. 아래는 제가 작성한 스크립트입니다.

clear;

% 해석하고자 하는 변수를 정의
syms l(t) theta(t) m g k

% 시스템 정의
x = l*sin(theta)
y = -l*cos(theta)
U = m*g*y + k*l.^2/2

%===========================================================
% 이 아래부터는 시스템에 따라 바꿀 필요 없이 사용하면 됨.
%===========================================================

% 운동에너지 T를 구하고 라그랑지안을 계산
T = m*(diff(x,t).^2+diff(y,t).^2)/2
L = T - U

%===========================================================
% 일반화 좌표 l에 대해 오일러-라그랑주 방정식을 전개
%===========================================================

% MATLAB에서는 함수를 함수로 미분할 수 없음. 그러므로 함수를 잠깐 변수로 치환.
syms lt l_t
LT = subs(L,diff(l,t),l_t);
LT = subs(LT,l,lt);

% 오일러-라그랑주 방정식을 일부분 계산
E1 = diff(LT,lt);
E2 = diff(LT,l_t);

%두 번째 항의 t로 미분하는 부분을 계산하기 위해 변수처럼 사용했던 함수를 다시 함수로 돌림
E1 = subs(E1,lt,l);
E1 = subs(E1,l_t,diff(l,t));
E2 = subs(E2,lt,l);
E2 = subs(E2,l_t,diff(l,t));

% 오일러-라그랑주 방정식을 계산
Eq = E1-diff(E2,t) == 0;

% 간단히 정리
EqL = simplify(Eq,'Steps',100);

%===========================================================
% 일반화 좌표 theta에 대해 오일러-라그랑주 방정식을 전개
%===========================================================

% MATLAB에서는 함수를 함수로 미분할 수 없음. 그러므로 함수를 잠깐 변수로 치환.
syms thetat theta_t
LT = subs(L,diff(theta,t),theta_t);
LT = subs(LT,theta,thetat);

% 오일러-라그랑주 방정식을 일부분 계산
E1 = diff(LT,thetat)
E2 = diff(LT,theta_t)

%두 번째 항의 t로 미분하는 부분을 계산하기 위해 변수처럼 사용했던 함수를 다시 함수로 돌림
E1 = subs(E1,thetat,theta);
E1 = subs(E1,theta_t,diff(theta,t));
E2 = subs(E2,thetat,theta);
E2 = subs(E2,theta_t,diff(theta,t));

% 오일러-라그랑주 방정식을 계산
Eq = E1-diff(E2,t) == 0;

% 간단히 정리
EqT = simplify(Eq,'Steps',100);

%===========================================================
% 최종 결과물을 디스플레이
%===========================================================

latex(EqL)
latex(EqT)

안타깝지만 매트랩에서는 표현식을 심볼릭 함수로 미분하는 것을 지원하지 않았습니다. 그래서 어쩔 수 없이 표현식을 변수로 치환하는 특수한 트릭을 사용하여 식을 구성했습니다. 그 결과, 우리의 매트랩 코드는 위의 복잡한 시스템을 아주 예쁘게 해석해서 아래와 같이 LaTeX 폼으로 돌려줬습니다. 멋지군요. 이런 것이 개인용 컴퓨터에서 돌아가다니. 컴퓨터의 발전에 경의를 표합니다.

m2t2l(t)+kl(t)=ml(t)(tθ(t))2+gmcos(θ(t))l(t)2t2θ(t)+2tθ(t)tl(t)+gsin(θ(t))=0l(t)=0m=0m\,\frac{\partial ^2}{\partial t^2} l\left(t\right)+k\,l\left(t\right)=m\,l\left(t\right)\,{\left(\frac{\partial }{\partial t} \theta \left(t\right)\right)}^2+g\,m\,\cos\left(\theta \left(t\right)\right)\\ l\left(t\right)\,\frac{\partial ^2}{\partial t^2} \theta \left(t\right)+2\,\frac{\partial }{\partial t} \theta \left(t\right)\,\frac{\partial }{\partial t} l\left(t\right)+g\,\sin\left(\theta \left(t\right)\right)=0\vee l\left(t\right)=0\vee m=0

특히 매트랩은 저보다 똑똑해서 심지어 두 번째 식에서는 제가 고려하지 못했던 자명한 해 두 개도 같이 제시해줬습니다. 물론 우리는 이런 경우는 다루지 않기 때문에 딱히 유용하지는 않습니다만...

이 결과물은 잘 정리됐다고는 하지만 상당히 복잡합니다. 그러나 사실 당연히 복잡할 수밖에 없는 것이, 원래 진자 운동은 비선형 미분방정식인데 거기에 용수철까지 더했으니 절대로 예쁜 형태로 답이 나올 리가 없습니다. 이중진자처럼 카오스적인 거동이 나오지 않을까 예상해봅니다. 어쨌든 이 방정식을 해석적으로 잘 풀어서 l(t)l(t)θ(t)\theta(t)를 얻는 것은 불가능해보입니다.

그러므로 이 방정식을 수치 해석을 사용하여 풀어보겠습니다. 이 방정식을 자세히 뜯어 보면 이계 미분이 하나밖에 없는 아주 좋은 형태임을 알 수 있습니다. 그러므로 이계 미분에 대해 정리가 쉽게 가능하므로 수치해석으로 풀기 매우 편한 형태입니다.

물론 저는 계산을 매우 싫어해서, 간단한 정리조차도 직접 풀기가 싫기 때문에 매트랩 스크립트로 해결할 것입니다.

%===========================================================
% 다시 치환을 사용하여 이계미분에 대한 폼으로 변형한 후 정리
%===========================================================

syms l__t theta__t

EqL = subs(EqL,diff(l,t,t),l__t);
EqT = subs(EqT,diff(theta,t,t),theta__t);
SL = solve(EqL,l__t);
ST = solve(EqT,theta__t);
SL = simplify(SL,10)
ST = simplify(ST,10)
latex(SL)
latex(ST)

위의 스크립트 맨 아랫부분에 이렇게 추가해주면, 다음과 같은 결과를 얻을 수 있습니다. (실제로 출력되는 값은 등호 오른쪽의 수식이고, 등호 왼쪽은 제가 직접 적어 준 부분입니다.)

l¨=gcos(θ(t))+l(t)(tθ(t))2kl(t)mθ¨=2tθ(t)tl(t)+gsin(θ(t))l(t)\ddot{l} = g\,\cos\left(\theta \left(t\right)\right)+l\left(t\right)\,{\left(\frac{\partial }{\partial t} \theta \left(t\right)\right)}^2-\frac{k\,l\left(t\right)}{m}\\ \ddot\theta=-\frac{2\,\frac{\partial }{\partial t} \theta \left(t\right)\,\frac{\partial }{\partial t} l\left(t\right)+g\,\sin\left(\theta \left(t\right)\right)}{l\left(t\right)}

그러면 마지막으로 이를 수치해석을 사용해서 렌더링하는 HTML+ES6스크립트를 작성하여 진짜로 그럴듯한 운동이 나오는지 확인해보겠습니다. 아래는 제가 간단히 만들어 본 시뮬레이션입니다.

이 포스트를 작성한 후 시뮬레이션 코드를 업데이트했습니다. 포스트에서는 진자의 줄 전체가 스프링인 경우를 다루었지만, 위에서 보이는 시뮬레이션은 줄의 일부는 강체이고 일부는 스프링인 경우를 다룹니다.

실행 결과 예상과는 좀 다르게 카오스적인 결과보다는 너무나 규칙적이고 깔끔한 결과가 나와서 좀 놀랐습니다. 물론 실제로 고무줄에다가 공을 달아놓으면 저렇게 운동할 것 같기는 합니다. 혹시 라그랑지안 계산을 실수했나 싶어 다른 레퍼런스들을 찾아 봤으나 제대로 한 게 맞는 것 같습니다. 자연이란 신기하네요. 저렇게 복잡하고 예측불가능해 보이는 수식에서 이렇게 깔끔한 결과가 나오다니.

결론

라그랑주 역학을 소개하고, 이를 사용하여 복잡한 시스템을 해석하는 과정을 3개 포스트에 걸쳐 작성해봤습니다. 확실히 사람이 시험 기간이 되니까 시험공부 말고 다 재미있네요.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -