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

스크래치로 물리실험하기-1. 미적분은 어떻게 구현하는가?

by 할거없네 2017. 11. 3.

안녕하세요. 승승이입니다.

프로그램의 주요 사용 목적중인 하나인 '시뮬레이션'을 해볼까 합니다.

교육과정에서는 이러한 시뮬레이션하는 기회가 별로 없는데, 대학교에서는 직접 배운 수학, 과학적 이론을 컴퓨터로 시뮬레이션 하는 기회가 오게 됩니다.

스크래치도 프로그램으로써 시뮬레이션이 가능한데요, 여러가지 실험을 하기 위해서는 프로그램으로 미적분을 어떻게 만드는지 알고 있어야 합니다.

미적분 하면 벌써 머리가 아파올 수 있지만 의외로 컴퓨터에서의 미적분은 매우 쉽습니다.


프로그램에서의 미분은 '변화량'이고, 적분은 '누적'입니다. 

참 쉽죠?

프로그램도 한번 볼까요?


x의 변화량은 x현재 - x과거 로 정의할 수 있습니다.

수학적으로의 미분의 정의는 아래와 같은데요

이걸 컴퓨터에서 비슷하게 구현하면



이렇게 됩니다.

컴퓨터에서는 '시간'대신 '순차'를 사용합니다. 즉, n이 1, 2, ... 로 올라가면서 계속 계산이 되는데요, dt가 0이 되는 자연적인 현상에 비해 컴퓨터는 그렇지 못합니다. 이러한 수학적인 학문을 '이산수학'이라고 하는데, 궁금하신 분은 이산수학에 대해서 공부하셔도 좋을거 같습니다.


그러면 적분은 어떻게 하나요? 적분도 참 쉽습니다. 적분은 변화량을 누적하는 것을 말합니다.



한줄로 간단하게 구현이 됩니다.

적분을 수학적으로 본다면, 아래와 같은데요,

위 식은 범위를 따로 정하지 않은 부정적분입니다. 이것은 수학적으로는 적분기호를 따고, 무엇에 대한 적분인지(s), 어디서 어디까지 할 것인지 정해주는 식으로 합니다. 컴퓨터는 단순히 누적하는 의미로,

으로 쓸 수 있습니다.



그러니까 프로그램상으로는


이것이 미분

이것이 적분입니다.



추가적인 설명을 다시 써봅니다일단 미분에 대해서 말하고자 합니다.

미분은 어떤 순간에서의 변화하고자 하는 양입니다우리가 흔히 알고 있는 속도의 개념은 지금 순간에서 앞으로 변화될 양을 말합니다만약에 순간적이지 않고 조금 길다면 그것은 '순간'이 아니라 어느 2개의 시점사이의 평균적인 변화량이 될 것입니다.

수학적인 수식으로도 순간적인 변화량, '기울기'를 이야기 합니다. 하지만 컴퓨터에서는 어떨까요?


컴퓨터는 위와 같이 모든 연속적인 데이터를 가지지 못합니다. 이렇게 수들이 서로 연속적이지 않아 '이산(離散, Discrete number))'라고도 합니다. 쉽게 말해서 '샘플링 시간(Sampling time)'이 있는 수열이라고 볼 수 있습니다. 프로그래밍에서 실제 데이터와의 미적분을 구현한다면 '샘플링 시간'까지 고려해야 하지만 어차피 허구로 시뮬레이션을 하는 것이기 때문에 그것까지는 고려하지 않겠습니다. 여기서 좀더 확장하자면 컴퓨터는 10의 수로 유사하게 자연수, 정수를 넘어 실수와 복소수를 계산합니다. 하지만 컴퓨터의 한계로 모든 소수점을 계산할 수 없기 때문에 소수점을 버리게 되는데요, 이러한 수를 고려한 것이 '양자화(Quantization)'했다고 합니다. 여기까지의 영역을 높이면 저도 다루기 어렵기 때문에 단순히 컴퓨터에서의 계산을 '수열'만을 사용하는 것으로 간주합니다.


다시 위의 데이터를 컴퓨터가 위와 같이 화살표의 데이터를 추출할 것입니다. 그러면 화살표와 화살표 사이의 순간적인 기울기는 알 수 없지만 샘플링 된 데이터 사이의 평균적인 변화량을 알 수 있습니다. 이것을 수치로 표현하면



미분과 매우 유사한 기울기를 얻을 수 있습니다. 여기서 샘플링 타임 ts0에 가까울 수록 실제 자연상에서 벌어지는 미분과 매우 유사해질 것입니다. 하지만 ts0이 될 일은 없을 것입니다. 또한 컴퓨터의 성능 또는 센서의 성능에 따라 달리집니다. 따라서 우리가 프로그래밍하는 컴퓨터 속에서는 이 샘플링 시간은 사용자가 적절히 결정해 주는 값입니다. 좀더 이해하기 쉽게 한다면 컴퓨터에서의 위치 1px가 모니터의 성능에 따라 1mm일수도 있고 0.1mm인것과 비슷합니다.

따라서 제가 만들 시뮬레이션에서는 필요할 때면 샘플링 시간을 별도로 넣겠지만 필요하지 않을 경우 없다고 가정할 것입니다.

적분의 경우도 비슷한 내용입니다.

위에서 적분의 개념은 저 위의 네모칸의 넓이를 모두 더한 값입니다. 물론 컴퓨터의 한계로 아주 정확하게 면적을 구할 수 없지만 어느정도 오차를 감안해서 유사하게 구할 수 있습니다. 물론 더 정확하게 구하는 방법으로, 네모가 아닌 사다리꼴로 구하는게 더 좋습니다. 넓이를 구해봅니다. 


 

사각형의 면적은 가로(ts) x 세로(x[n])입니다. 이것을 전부 더하는 것이 되겠네요. 그러나 가로축은 위에서 언급한 것과 같이 샘플링 시간으로 사용자가 정하는 값입니다. ts0에 가까운 수치일수도 있고, 아니면 좀더 클 수도 있습니다. 실제적인 값들 (거리 m, 무게 kg, 시간 s )을 적용하지 않고 적당한 시뮬레이션을 한다면 이 ts값을 무시하고 계산해도 됩니다. 그렇기 때문에 적분은 단순히 x[n]을 더하는 값으로 유사하게 구해집니다.



다음에는 이해를 돕기해서 '위치, 속도, 가속도'의 식을 위에서 정한 식으로 구현해봅니다.


댓글