오일러 방법 문서 원본 보기
←
오일러 방법
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{위키데이터 속성 추적}} '''오일러 방법'''(Euler's Method)은 수치해법을 통해서 미분방정식을 푸는 방법이다. [[테일러 급수]]에서 유도된 방법으로, 비교적 오차가 크게 나는 방법이다. [[파일:Euler method.png|섬네일|right|300px|오일러 방법. 파란색은 미지의 곡선, 빨간색은 다변형 근사치]] == 비공식 기하학적 설명 == 형태가 알려지지 않은 미지의 곡선을 계산하는 문제를 생각해보자. 우리는 시작점(초기값)을 알고, 이 미지의 곡선이 주어진 미분 방정식을 만족한다고 가정한다. 이때, 이 미분 방정식은 미지의 곡선의 어떤 점에서도 [[접선의 기울기]]를 구할 수 있는 공식으로 생각할 수 있다. 다시 말해 미지의 곡선이 주어졌을 때, 시작점(초기값) <math>A_0</math>를 알고 있다면, 미분 방정식에서 <math>A_0</math>지점의 접선과 그 기울기를 구할 수 있다. (오른쪽 그림을 참고) 접선을 타고 조금 이동한 점을 <math>A_1</math>이라고 하자. 만약 <math>A_1</math>이 여전히 곡선 위에 있다고 가정한다면, <math>A_0</math>에서와 같은 추론을 이용할 수 있다. 이렇게 몇 차례를 반복하면, 다각형곡선 <math>A_0A_1A_2A_3\dots</math>을 구할 수 있다. 일반적으로 이 곡선은 원래의 미지의 곡선으로부터 심하게 멀리 떨어지지 않는다. 그리고 <math>A_i</math>와 <math>A_{i+1}</math>단계 사이에서 이동하는 크기를 충분히 작게 하고, 구하고자 하는 범위가 유한일 때 두 곡선 사이의 오차를 충분히 작게 줄일 수 있다. == 기본 원리 == 이 방법의 목적은 다음과 같은 조건이 주어졌을 때 함수 <math>f(x)</math>의 값을 추정하는 것이다. :<math>\frac{dy}{dt} = f(t,y), \qquad a \le t \le b, \qquad y(a) = \alpha. \qquad (1)</math> 이때 함수 f의 정확한 형태를 구하는 것이 목적이 아니고, 구간 a, b 사이에서의 특정한 점들(격자점, mesh point)에서의 f의 값을 찾아내는 것이 목적이다. 구간 [a,b]를 N개의 구간으로 나누었을 때 각각의 점을 :<math> t_i = a + ih, i = 0, 1, 2,\cdots , N.</math> 이라고 하자. 이때 <math>h = \frac{(b-a)}{N}</math>이 구간의 크기가 된다. 함수 f 에 대한 [[테일러 급수]]를 이용하면, :<math> y(t_{i+1}) = y(t_i) + (t_{i+1} - t_i)y'(t_i) + \frac{(t_{i+1} - t_i)^2}{2}y''(\xi_i)</math> 이 <math>(t_i, t_{i+1})</math>에 있는 어떤 <math>\xi_i</math>에 대해 성립한다. 우리는 <math>h = t_{i+1} - t_i</math>라는 것을 알고 있기 때문에, :<math> y(t_{i+1}) = y(t_i) + hy'(t_i) + \frac{h^2}{2}y''(\xi_i) </math> 를 얻는다. 이때, (1)에 의해, :<math> y(t_{i+1}) = y(t_i) + hf(t_i, y(t_i)) + \frac{h^2}{2}y''(\xi_i) </math> 를 얻는다. 이때 '''오일러 방법'''은 <math>y(t_i)</math>에 대한 추정치(<math>\omega_i</math>로 표기하자)로 다음과 이 나머지 부분을 없앤 값을 사용하는 것이다. :<math> \omega_0 = \alpha, \omega_{i+1} = \omega_i + hf(t_i, \omega_i),\qquad for\; each\; i = 0, 1, \cdots, N -1. </math> == 코드 == * C/C++ 코드<syntaxhighlight lang="c++" line="1"> #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까지 단계적으로 계산 } </syntaxhighlight> * Maple 코드 == 같이 보기 == * [[크랭크-니콜슨 방법]] * [[경사 하강법]] * [[수치적분]] {{수치상미분방정식}} {{토막글|컴퓨터 과학|수학}} [[분류:수치해석학]] [[분류:미분방정식]] [[분류:룽게-쿠타 방법]] [[분류:레온하르트 오일러]]
이 문서에서 사용한 틀:
틀:수치상미분방정식
(
원본 보기
)
틀:위키데이터 속성 추적
(
원본 보기
)
틀:토막글
(
원본 보기
)
오일러 방법
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보