오일러 방법

오일러 방법(Euler's Method)은 수치해법을 통해서 미분방정식을 푸는 방법이다. 테일러 급수에서 유도된 방법으로, 비교적 오차가 크게 나는 방법이다.

오일러 방법. 파란색은 미지의 곡선, 빨간색은 다변형 근사치

비공식 기하학적 설명[편집]

형태가 알려지지 않은 미지의 곡선을 계산하는 문제를 생각해보자. 우리는 시작점(초기값)을 알고, 이 미지의 곡선이 주어진 미분 방정식을 만족한다고 가정한다. 이때, 이 미분 방정식은 미지의 곡선의 어떤 점에서도 접선의 기울기를 구할 수 있는 공식으로 생각할 수 있다.

다시 말해 미지의 곡선이 주어졌을 때, 시작점(초기값) 를 알고 있다면, 미분 방정식에서 지점의 접선과 그 기울기를 구할 수 있다. (오른쪽 그림을 참고)

접선을 타고 조금 이동한 점을 이라고 하자. 만약 이 여전히 곡선 위에 있다고 가정한다면, 에서와 같은 추론을 이용할 수 있다. 이렇게 몇 차례를 반복하면, 다각형곡선 을 구할 수 있다. 일반적으로 이 곡선은 원래의 미지의 곡선으로부터 심하게 멀리 떨어지지 않는다. 그리고 단계 사이에서 이동하는 크기를 충분히 작게 하고, 구하고자 하는 범위가 유한일 때 두 곡선 사이의 오차를 충분히 작게 줄일 수 있다.

기본 원리[편집]

이 방법의 목적은 다음과 같은 조건이 주어졌을 때 함수 의 값을 추정하는 것이다.

이때 함수 f의 정확한 형태를 구하는 것이 목적이 아니고, 구간 a, b 사이에서의 특정한 점들(격자점, mesh point)에서의 f의 값을 찾아내는 것이 목적이다. 구간 [a,b]를 N개의 구간으로 나누었을 때 각각의 점을

이라고 하자. 이때 이 구간의 크기가 된다. 함수 f 에 대한 테일러 급수를 이용하면,

에 있는 어떤 에 대해 성립한다. 우리는 라는 것을 알고 있기 때문에,

를 얻는다. 이때, (1)에 의해,

를 얻는다. 이때 오일러 방법에 대한 추정치(로 표기하자)로 다음과 이 나머지 부분을 없앤 값을 사용하는 것이다.

코드[편집]

  • C/C++ 코드
    #include <stdio.h>  //초기값을 2로 설정 (y(0)=2) double y = 2.0;  void EulerMethod(double dt, double t_end) {     // dt는 독립변수 증가량, t_end는 독립변수의 목적지     double dydt;          // 독립변수는 0부터 시작     for (double t = 0;;) {         printf("%.2f \t %.2f\n", t, y);         dydt = 4;    // y'=4이므로 y=4x+c. y(0)=2이므로 c=2. 따라서 y=4x+2         y = y + dt * dydt;                  if (t_end <= t) {             break;         } 		         t = t + dt;     } }  int main(void) {     EulerMethod(0.01, 3);    // 0.01 간격으로 3까지 단계적으로 계산 } 
  • Maple 코드

같이 보기[편집]