(MATLAB) 매트랩으로 미분방정식 풀기 (2) – ode45, Runge-Kutta method

매트랩에서 지원하는 de45 함수는 Runge-Kutta 4, 5차 방법을 이용하여 미분방정식을 개방하는 함수입니다. 수치해석수업을듣지않았다면대체이게무슨소sound지?라고생각하실겁니다. 저도 매트랩 과제가 아까 sound에 나왔을 때 똑같이 생각했어요. 결내용 쓰는 법만 알아보고 제출한 기억이 있습니다.3 저와 같은 불상사를 막기 위해 간단하게 Runge-Kutta Method를 간단하게 설명한 후, de45함수 사용법을 배우도록 하겠습니다.​

>

먼저 수치 해석의 비결로 미분 방정식을 푸는 것이 어떤 의미인지 알아보겠습니다. 미분방정식의 해를 해석적으로 구했다는 것은 모든 점에 대해 방정식을 만족하는 곡선을 밝혀냈다는 것입니다. 문제는, 미분 방정식이 해석적으로 풀리지 않는 것이 많다는 것, 모든 점에 대해 방정식을 만족하는 곡선이 무엇인가, 항상… 그랬던 것처럼 알기 어렵다는 것입니다. 공학자들이 붙어서 지금과 같은 허세를 부렸어요. “모든 점에 대해 알 수 없어도, 방정식을 만족해, 실제의 곡선에 가까운 충분히 많은 점을 구해 보자”위의 개념으로 , 미분 방정식을 풀어 보겠습니다.

>

x=0에서 x값이 증가하는 증분을 h, 이 값을 0.1로 하고, 최초의 i는 i번째 값으로 해 둡니다.i번째부터 함수값과 기울기를 알고 있을 때 i+1번째 값은 어떻게 구할까요? 기울기를 이용해 많은 sound와 함께 구할 수 있을 것이다.

>

여기서 우리는 x=0일 때 값이 경계조건에서 y=1입니다를 알고 있습니다. 추가로 dy/dx=y에서 기울어진 값이 1임을 알 수 있습니다. 이것에 의해 x=0.1일 때 값을 구하고 이 과정을 반복하면 그 이후를 얻을 수 있습니다.​

>

>

여기서 중요한 것은 즉각 “구배를 어떻게 추정하는가? 다음점이어디가될지결정하는값이기울어져있기때문입니다. 위의 비결처럼 찾은 점에서 바로 기울기를 대입해서 사용하는 것을 Euler’s method라고 합니다. 그래프에서 보이는 것처럼 정확도가 그리 높지 않아요. Runge-Kutta의 4차 비결은 Euler’s method처럼 바로 대입하지 말고 4지점에서 기울기를 구한 후 가중 평균을 내서 사용합니다. 따라서 고정밀도로 해를 추정할 수 있습니다.

>

de45 함수는 이 Runge-Kutta 4차 비결을 이용해서 점을 찍는 함수입니다. 예제로진동학에서많이다루는다소리미분방정식을풀어보겠습니다.(편의상 계수는 모두 1로)

>

2차 미분이 들어갈 때는 어떻게 풀어야 할까요? 일차미분에 대한 식이 두 개 있다고 의견하시면 됩니다.

>

맨처sound 예제에서 본 것처럼 i번째 값을 알고 있을 때 i+1번째 값은 기울기에서 구한다. x1, x2에 대해 다음 방식으로 값을 구하고 본인에게 갈 수 있습니다.(이해를 돕기 위해 RK4를 적용하는 것은 하지 않는다sound)

>

이것을 매트랩으로 실현하기 위해 x(1)와 x(2)로 이루어지는 X라는 벡터, 미분값인 dx(1), dx(2)로 이루어지는 dX라는 벡터를 설명합니다.

>

새로운 스크립트 버튼을 눌러서 다소음 이야기를 코딩한다.

>

이 예를 들어 문서안의 MATLAB 폴더에 저장합니다.(default에서 매트랩이 이 위치의 폴더에 있는 스크립트를 읽어들인다.) 이것으로 아래 예시를 명령창에 입력하면 결과를 얻을 수 있습니다.

>

우측의 작업공간에 1열의 t행렬과 2열의 x행렬이 생성된 것을 확인할 수 있고 결과를 plot하면 됩니다.

>

>

​​​

>

​​