본문 바로가기
스크래치/스크래치 물리강좌

스크래치 물리강좌. 운동방정식을 미분방정식으로 구현하는 이유

by 할거없네 2018. 4. 20.




스크래치에서 물리적인 법칙을 프로그래밍을 하기 위해서는 어떤 지식이 필요한지 알아봅니다.





1. 시간에 따른 운동방정식 풀이
가장 이해하기 쉬우면서도 가장 어려운 방법입니다.
물질의 운동상태가 결정되면 시간에 따라 결정됩니다.
이것을 시간에 대한 방정식으로 풀이하여 어느 시간에 어디에 있는지 정확히 알 수 있습니다.
가령 정속도로 v인 물체가 있다면 위치는 속도x시간으로 다음과 같이 구할 수 있습니다.




하지만 실제로 자동차나 자전거나 속도는 언제나 시간에 따라 다릅니다. 
이때는 속도의 정의로써 순간 속도는 이동거리를 시간으로 미분한 것으로 정의됩니다. 
다시 거꾸로 이동거리는 속도를 적분한 것입니다. 따라서 시간에 따라 변화하는 속도에 대해서 위치는 다음과 같습니다.



이렇게 속도-위치의 관계만 보더라도 위치를 알려면 속도를 적분해서 정리되어야 합니다. 
힘과 가속도의 관계식도 마찬가지이구요.

예를들면 힘을 받고 있는 물체의 운동을 식으로 써봅니다.


위와 같이 힘 F를 받고 있는 질량 m의 물체의 가속도, 속도, 위치는 다음과 같이 주어집니다.





단순히 한쪽으로 힘을 주는 것만으로도 적분을 두번해야 하는 번거로움이 있습니다. 물론 이와 같은 명확한 방정식을 세운다면 컴퓨터는 더이상 할 일이 없이 t의 값에 따라 위치를 정해주기만 하면 됩니다.


만약에 스프링으로 조금 더 확장해봅니다.


스프링의 힘의 크기는 스프링이 늘어날 수록 커지며, 반대방향(안쪽)으로 방향을 가집니다. 따라서 그 힘의 크기는 위치에 따라 변화하는 것입니다. 이것을 풀어본다면,







제가 맞게 쓴건지 모르겠지만, 어쨋든 결과적으로 물체의 위치는 자기자신의 위치를 2번 적분한 꼴이 나타납니다. 이제 여기서 어떻게 풀어야 할지 감도 안올 것이라 생각됩니다.






2. 미분방정식 풀이(라플라스 변환 응용)
다시 위의 스프링을 쉽게 풀기 위해 미분형태로 쓰기로 합니다.




다시 x(t)에 대해서 정리를 하면,






오로지 첫번째 식만 정의되어 있고 나머지 x'(t), x(t)는 별다른 규칙이 없는 형태입니다. 즉, 첫번째 식의 미분방정식을 풀면 됩니다.
미분방정식을 푸는 방법은 여러가지가 있습니다. 그 중에 가장 유명하고 쓰기 쉬운 방법으로써 '라플라스 변환'방법이 있습니다.
원리나 정의까지 설명하기 힘드므로, 나무위키로 링크를 남깁니다.

여기서 라플라스 변환을 할 때 미분의 횟수만큼 s의 제곱수가 더해집니다. 위 식을 라플라스 변환의 형태로 본다면,





미분식은 라플라스 변환에 의해 위와 같이 정리할 수 있습니다. 그러면 X(s)는 s에 대한 방정식으로 정리가 가능합니다.




라플라스 변환으로 위와 같이 되므로



만약에 초기의 속도 x'(0)이 0이라고 가정한다면 정리된 위 식에서 다시 변환/역변환 테이블을 통해 역변환을 하여 t에대한 식으로 변환이 가능합니다.







그래서 아래와 같은 식으로 스프링 운동식이 정리됩니다.






라플라스는 미분방정식을 쉽게 풀기위한 방법 중 하나가 되며, 모든 미분방정식을 풀 수 없습니다. (선형미분방정식에 국한됨)





3. 컴퓨터 시뮬레이션을 위한 식은 '운동방정식'
사실 1번과 2번의 과정은 컴퓨터 시뮬레이션을 위한 방법이 아닙니다. 역설적으로 t에 대한 함수로 바꾸는 과정이 얼마나 어렵고 힘든 것인지 말해 주고자 하여 복잡하게 썼습니다. 대부분의 운동방정식은 시간에 대한 함수로 바꾸는 것이 어렵고, 가능하다고 해도 복잡한 과정을 거쳐야 합니다. 매우 단순한 스프링 운동마저도 위와 같은 과정을 거쳐야 하니까요.

그러나 컴퓨터에서는 위 식에서 필요한 것은 '운동방정식'입니다. 


바로 위식입니다. 위와 같은 미분식을 어떻게 구현하는가 하는 내용은 이전의 강좌에도 다룬 적이 있습니다.

프로그래밍상으로 구현을 하면 아래와 같습니다.








결론적으로 요약하자면 물체의 운동을 표현할 때 1번과 2번의 과정같이 t에대한 함수로 모두 바꿀 필요 없이 운동에 대한 '미분방정식'만 구하면 시뮬레이션으로 구현할 수 있습니다.


사실은 여러분들이 이미 '중력'이란 것을 구현할 떄도 위와 같은 미분방정식을 구현해 온것입니다.

속도의 변화량=중력
위치의 변화량=속도

위와 같은 간단한 규칙도 사실은 변화량을 적용한 미분방정식의 시뮬레이션입니다.
즉, 미분방정식을 구하면 복잡한 계산은 컴퓨터가 합니다.

1, 2번의 과정은 컴퓨터가 쉽게 구하도록 하는 대신 사람이 머리를 써야 하지만,
3번과 같이 미분방정식을 그대로 컴퓨터가 시뮬레이션을 하도록 하여 쉽게 구현이 가능합니다.

이제 필요한 것은 여러가지 물체에 대한 미분방정식을 어떻게 세우냐 일겁니다.

다음에는 운동하는 물체에 대한 미분방정식을 구하기 위한 '모델링'에 대해서 설명해볼까 합니다.




댓글