Skip to content

MATLAB Simulation for Double Pendulum, Single Pendulum solving ODE

Notifications You must be signed in to change notification settings

7thKsJ/MATLAB_pendulum

Repository files navigation

MATLAB_pendulum

Project_Pendulum을 실행하면 보고서에 사용한 Figure들이 나옵니다.

전체적인 코드의 특징은 실제 단위에 맞춰 진행하였기 때문에, 시뮬레이션에서 움직이는 시간과 실제 시간이 같습니다. 또한 전부 함수화를 시켰기 때문에 별도의 코드 수정 없이도 다양한 환경에서의 시뮬레이션이 가능합니다. (직접작성했습니다)


메인으로 사용할 수 있는 함수는 크게 4종류 입니다.

  • doublePend : 이중진자의 20초간 움직임을 알려줍니다.

사용방법은 doublePend(m1, m2, l1, l2, theta1, theta2, g, c1, c2)로 단위는 kg, m, rad, m/s^2입니다. c1, c2는

실행한다면

img

img

이렇게 두개의 사진이 나오게 됩니다. (바로 위의 사진은 원래 애니메이션으로 직접 진자가 운동하는걸 보여준뒤 마지막으로 경로릎 표현하는 것입니다. 아래에 있는 사진이 중간에 움직일때의 모습입니다.)

img

  • pendExact : 단진자에서 근사하지 않고 정확하게 구한 값을 시뮬레이션 합니다.

사용방법은 pendExact(theta_0, l, g, n) 입니다. n은 시뮬레이션 할때 몇번 주기를 반복할지에 대한 숫자입니다.

  • pendNotExact : 단진자에서 근사한값을 시뮬레이션 합니다.

사용방법은 pendNotExact(theta_0, l, g, n) 입니다.

pendExact와 pendNotExact 모두 시뮬레이션을 한 뒤, 한 주기동안 어떻게 지나갔는지에 대해 알려줍니다. 각각의 점 사이 간격은 0.015초로, 0.015초인 이유는 딱히 없습니다.

시간간격이 같기 때문에 그래프에서 점의 밀도를 통해 속도를 비교할 수 있습니다. 단 그래프에서 y축의 크기를 잘 봐주시길 바랍니다.

예시 사진입니다. 첫번째는 시뮬레이션 중간에 캡쳐한 것이고, 두번째는 끝날때 한 주기에 운동을 보여주는 것을 캡쳐하였습니다. (같은 Figure에서 나옵니다)

img

img

  • singleCompare : 단진자에서 근사값과, 근사하지 않고 정확하게 구한 값에 대해 비교합니다.

먼저 근사했을때, 안 근사했을때의 운동을 보여 준 후, 두개가 동시에 움직이는 운동과,시간-각도에 대해서 그래프를 각각 그려줍니다.

사용방법은 singleCompare(theta_0, l, g, n)입니다.

근사와 정확한 운동은 각각 pendExact와 pendNotExact 함수를 호출하여 사용합니다. 그 다음에는 운동을 합쳐서 보여줍니다. 마지막으로는 각도가 어떻게 움직였는지에 대한 그래프를 제공합니다.

예시 사진입니다.

img

img


숨겨진 함수는 returnM1, returnM2, drawAniPend입니다. 앞 두개는 l1, theta1, l2, theta2를 입력받았을때 이중진자의 진자 위치가 각각 어디일지를 알려주는 것이고, drawAniPend는 단진자 함수 pendExact와 pendNotExact에서 시간에 맞춰서 직접 점을 찍고 경로를 그리는 함수입니다.


시뮬레이션을 구현한 방법은 시간-점의 위치 관계로 되어있는 리스트를 받은 후, 하나하나씩 점을 찍고, 선을 그린 뒤, 시간에 맞춰 기다리고, 점과 선을 지우는 방식으로 되어있습니다.

이중진자의 경우, 진자의 움직임을 트레이싱하기 위해 점 2개 선 2개를 그리고 그동안 지나온 점을 plot하고, 시간에 맞춰 기다리고, 점, 선, plot을 모두 지우는 방식으로 되어있습니다.

About

MATLAB Simulation for Double Pendulum, Single Pendulum solving ODE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages