오일러 방법(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 코드