나뭇잎 교과서

오일러의 방법

방향장을 따라 "조금 가고, 기울기를 다시 보고, 또 조금 간다"를 계산으로 하는 것이 오일러의 방법입니다. 식으로 풀 수 없는 미분방정식도 이 방법으로 근사해를 얻을 수 있습니다. 이 절에서는 걸음 크기를 줄여 가며 오차가 어떻게 줄어드는지 확인하고, 오차가 한쪽으로 쌓이면 원을 그려야 할 공이 나선을 그리며 달아나는 것을 시뮬레이션으로 봅니다.

본문

오일러의 방법

본문

게임 속 공이 원점 둘레를 원을 그리며 돌도록, 위치 \((x, y)\)의 속도를 \((-y, x)\)로 정했다. 컴퓨터는 매 순간 "지금 위치에 속도와 시간 간격 0.1을 곱한 만큼 더한다"는 규칙으로 공을 옮긴다. 그런데 반지름 1에서 출발한 공이 한 바퀴를 돌고 나니 반지름이 1.37로 커져 있었고, 계속 돌릴수록 바깥으로 나선을 그리며 멀어졌다. 미분방정식의 해는 분명히 원인데, 컴퓨터가 한 걸음씩 계산한 길은 왜 원에서 벗어날까?

걸음 hy′ = y로 구한 y(1)한 바퀴 뒤 원의 반지름 0.12.5937약 1.37 0.012.7048약 1.03 0.0012.7169약 1.003 참값e = 2.718281
그림 1. 걸음을 10분의 1로 줄이면 오차도 거의 10분의 1로 준다.
먼저 알아야 할 것접선의 기울기, 자연로그, 수열의 귀납적 정의, 방향장(미분방정식과 방향장).

4.2.1접선을 따라 한 걸음씩

미분방정식 \(y' = f(x, y)\)의 해를 식으로 구할 수 없으면, 방향장의 선분을 따라 한 걸음씩 걸어가며 해를 어림한다. 현재 점 \((x_n, y_n)\)에서의 기울기는 \(f(x_n, y_n)\)이므로, \(x\)를 \(h\)만큼 옮기는 동안 그 기울기로 직선을 따라가면 \(y\)는 \(h\,f(x_n, y_n)\)만큼 변한다. 도착한 점에서 다시 기울기를 구해 다음 걸음을 걷는다. 이 방법이 오일러의 방법이다. 매 걸음 접선을 따라가므로, 곡선이 휘어 있으면 걸음마다 조금씩 곡선에서 벗어난다.

정리 4.2.1 오일러의 방법

\(y' = f(x, y)\), \(y(x_0) = y_0\)에 대하여 걸음 \(h\)로 \[x_{n+1} = x_n + h,\qquad y_{n+1} = y_n + h\,f(x_n, y_n)\]을 되풀이한다. 정해진 구간까지 갈 때의 오차는 대략 \(h\)에 비례한다.

\(y' = y\), \(y(0) = 1\)에 쓰면 \(y_{n+1} = y_n + hy_n = (1 + h)y_n\)이므로 \(y_n = (1 + h)^n\)이다. \(h = 0.1\)로 10걸음 가면 \(y(1) \approx 1.1^{10} \approx 2.594\)로, 참값 \(e \approx 2.718\)보다 0.12 작다. 해 \(e^x\)는 아래로 볼록해서 접선이 늘 곡선 아래에 있기 때문이다. \(h = 0.01\)로 100걸음 가면 \(1.01^{100} \approx 2.705\)로 오차가 0.013으로 줄어, 걸음을 10분의 1로 하면 오차도 거의 10분의 1이 된다.1

4.2.2원이 나선이 되는 까닭

원운동 \(x' = -y\), \(y' = x\)에 오일러의 방법을 쓰면 \((x, y)\)에서 \((x - hy,\ y + hx)\)로 옮긴다. 이동한 거리 \(h\sqrt{x^2 + y^2}\)는 원의 접선 방향이므로, 새 점까지의 거리는 피타고라스 정리로 \(\sqrt{(x^2 + y^2)(1 + h^2)}\)이다. 그래서 한 걸음마다 반지름이 \(\sqrt{1 + h^2}\)배로 늘어난다. 접선은 원 바깥에 있으므로 접선을 따라가면 늘 원 밖으로 나가고, 이 작은 바깥쪽 어긋남이 쌓여 나선이 된다.

가는 원은 참 해 (반지름 1) 나선은 오일러 방법, h = 0.1 두 바퀴 뒤 반지름 약 1.88
그림 2. 매 걸음 원의 접선을 따라가므로 원 밖으로 조금씩 벗어나 나선이 된다.

4.2.3예제 풀이

예제 4.2.2

처음 질문의 원운동에서 \(h = 0.1\)로 한 바퀴, 곧 \(2\pi/0.1 \approx 63\)걸음을 갔을 때 반지름을 구하여라. 반지름이 1.01을 넘지 않게 한 바퀴를 돌려면 \(h\)를 얼마로 해야 하는가? \(\ln1.01 \approx 0.00995\)이다.

한 걸음마다 반지름이 \(\sqrt{1.01}\)배이므로, 63걸음 뒤에는 \(1.01^{63/2} = 1.01^{31.5}\)배이다. \(\ln\)을 취하면 \(31.5\times0.00995 \approx 0.313\)이므로 반지름은 \(e^{0.313} \approx 1.37\)이다. 처음 질문에서 본 값과 같다.

걸음 \(h\)로 한 바퀴 도는 걸음 수는 \(2\pi/h\)이고, 반지름은 \((1 + h^2)^{\pi/h}\)배가 된다. \(\ln\)을 취하면 \(\dfrac\pi h\ln(1 + h^2) \approx \pi h\)이므로, \(\pi h \le 0.00995\)이려면 \(h \le 0.0032\)이다. 그래서 2000걸음 가까이 걸어야 한 바퀴 동안 반지름 오차를 1% 안에 둘 수 있다. 실제 게임이나 행성 궤도 계산에서는 매 걸음 기울기를 여러 번 구해 평균하는 더 정밀한 방법을 쓴다. 즉 오일러의 방법은 접선을 따라 한 걸음씩 해를 어림하며, 오차는 걸음 크기에 비례해 쌓이고, 원운동처럼 휘어진 해에서는 그 어긋남이 한쪽으로 쌓여 눈에 띄게 된다.

아래 탐구 카드에서 걸음 크기를 바꾸며 오일러의 방법으로 해를 그려 참 해와 비교하고, 원운동이 나선이 되는 모습을 확인해 보자.

  1. 이 방법은 1768년 오일러의 적분학 책에 실렸다. 1960년대 미국 항공 우주국의 계산원들은 우주선의 궤도를 손과 기계식 계산기로 구할 때 오일러의 방법을 더 정밀하게 고친 방법을 썼는데, 영화 「히든 피겨스」에 그 장면이 나온다.
마무리

오일러의 방법은 현재 점의 기울기로 접선을 따라 \(y_{n+1} = y_n + h\,f(x_n, y_n)\)만큼 한 걸음씩 가며 미분방정식의 해를 어림하고, 정해진 구간까지의 오차는 걸음 \(h\)에 비례한다. 해가 휘어 있으면 접선이 곡선에서 한쪽으로 벗어나 오차가 쌓인다. 처음 질문의 공은 매 걸음 원의 접선을 따라가 반지름이 \(\sqrt{1 + h^2}\)배씩 늘어, \(h = 0.1\)이면 한 바퀴 뒤 반지름이 약 1.37이 된다.

탐구 1

접선을 따라 한 걸음씩 가면 해를 얼마나 정확히 그릴 수 있을까?

오일러의 방법 · 조작 · 발견
오일러 \(y_n\)
—
참값
—
오차 × \(n\)
—

구간은 \(0 \le x \le 2\)이다(첫 보기만 \(0 \le x \le 1\)). 걸음 수 막대는 1, 2, 4, …, 128처럼 두 배씩 늘어난다.

  1. 질문방향장을 따라 해 곡선을 손으로 그릴 때 우리는 "조금 가고, 기울기를 다시 보고, 또 조금 간다"를 되풀이한다. 이것을 계산으로 정확히 하면 해의 근삿값을 얻을 수 있을까? 걸음을 줄이면 얼마나 정확해질까?
  2. 복원점 \((x_n, y_n)\)에서의 접선은 \(y = y_n + f(x_n, y_n)(x - x_n)\)이다. \(\left(1 + \frac{1}{n}\right)^n \to e\)이다.
  3. 설명오일러의 방법은 걸음 크기 \(h\)를 정하고 \[y_{n+1} = y_n + h\,f(x_n, y_n)\]을 \(x_{n+1} = x_n + h\)와 함께 되풀이한다. 한 걸음마다 접선을 따라가므로 곡선이 휜 만큼 오차가 생기고, 그 오차가 쌓인다. 끝점의 오차는 대략 \(h\)에 비례한다. 그래서 걸음 수를 두 배로 하면 오차가 대략 절반이 되고, "오차 × \(n\)"이 거의 일정해진다. \(y' = y\)에 \(h = \frac{1}{n}\)로 쓰면 \(y_n = \left(1 + \frac{1}{n}\right)^n\)이 되어 \(e\)의 정의와 만난다.
  4. 연결오차가 \(h\)에 비례하는 방법을 1차 방법이라고 한다. 정확도를 한 자리 높이려면 계산을 10배 해야 하므로 실제로는 잘 쓰이지 않고, 기울기를 여러 번 재어 평균하는 룽게–쿠타 방법(오차가 \(h^4\)에 비례) 같은 방법을 쓴다. 이 단원의 그림 속 해 곡선도 룽게–쿠타 방법으로 그렸다.
  5. 적용걸음 수를 1, 2, 4, …로 늘리며 꺾은선이 참값 곡선에 다가가는 것을 보자. 아래 표에서 걸음 수가 두 배가 될 때 오차가 대략 절반이 되는가? \(y' = y\)에서 꺾은선은 왜 언제나 곡선 아래에 있는가?
  6. 판단오일러의 방법은 위로 볼록한 곳에서는 위로, 아래로 볼록한 곳에서는 아래로 치우치는 계통 오차를 낸다. 걸음을 줄이면 오차는 줄지만, 걸음이 너무 많으면 컴퓨터의 반올림 오차가 쌓이기 시작한다. 다음 카드에서는 오차가 쌓여 결과가 완전히 틀어지는 경우를 본다.

확인조건이 달라지면

\(y' = 2y\), \(y(0) = 1\)에 오일러의 방법을 \(h = 0.5\)로 두 걸음 쓰면 \(y(1)\)의 근삿값은?

탐구 2

원을 그려야 할 공이 왜 점점 멀어질까?

오일러의 방법의 오차 · 시뮬레이션 · 판단
세 바퀴 뒤 반지름 (오일러)
—
\((1 + h^2)^{N/2}\)
—
세 바퀴 뒤 반지름 (고친 것)
—

\(N\)은 세 바퀴(\(t = 6\pi\))에 필요한 걸음 수이다. 고친 오일러는 \(x\)를 먼저 새로 구하고 그 새 \(x\)로 \(y\)를 구하는 방법이다.

  1. 질문원 위를 도는 공의 속도는 언제나 원의 접선 방향이다. 이 운동을 오일러의 방법으로 계산하면, 공은 계속 원 위에 머물까?
  2. 복원오일러의 방법은 \(y_{n+1} = y_n + h\,y'_n\)으로 다음 값을 구한다. 반지름 1인 원 위를 각속도 1로 도는 점은 \(x' = -y\), \(y' = x\)를 만족하고, 해는 \((\cos t, \sin t)\)이다.
  3. 설명오일러의 방법은 지금 점의 접선 방향으로 \(h\)만큼 똑바로 나아간다. 원의 접선은 원 바깥으로 나가므로, 한 걸음마다 반지름이 \(\sqrt{1 + h^2}\)배가 된다. 실제로 \(x_{n+1}^2 + y_{n+1}^2 = (x_n - hy_n)^2 + (y_n + hx_n)^2 = (1 + h^2)(x_n^2 + y_n^2)\)이다. 걸음 하나의 오차는 작아도 같은 방향(바깥쪽)으로 쌓이므로 궤도가 나선으로 풀려 나간다. 순서만 살짝 바꾼 고친 오일러 방법(\(x\)를 먼저 새로 구하고 새 \(x\)로 \(y\)를 구함)은 오차가 쌓이지 않고 원 근처에 머문다.
  4. 연결게임의 물리 엔진이나 행성 궤도 계산에서 단순한 오일러 방법을 쓰면 에너지가 저절로 늘어나 물체가 점점 빨라지거나 궤도에서 벗어난다. 그래서 이런 계산에는 고친 오일러 방법(반암시적 오일러), 베를레 방법처럼 에너지를 잘 보존하는 방법을 쓴다.
  5. 적용\(h\)를 바꾸며 세 바퀴 뒤 반지름을 보자. 계산값이 \((1 + h^2)^{N/2}\)과 같은가? \(h\)를 줄이면 오일러의 결과가 1에 가까워지는가? 고친 오일러는 \(h = 0.5\)에서도 원 근처에 머무는가?
  6. 판단한 걸음의 오차만 보고 방법을 고르면 안 된다. 두 방법은 한 걸음의 오차 크기가 같은 정도이지만, 오차가 쌓이는 방식이 달라 오랜 시간 뒤의 결과가 크게 다르다. 수치 계산에서는 무엇이 보존되어야 하는지(여기서는 반지름, 곧 에너지)를 함께 따져야 한다.

확인조건이 달라지면

이 원운동에 오일러의 방법을 \(h = 0.1\)로 100걸음 쓰면 반지름은 약 몇 배가 되는가?

AI 출제 문항연습문제 풀어보기8문항
Esc

↑↓ 고르기Enter 열기