파트 6 상미분방정식 -...

78
파트 6 상미분방정식 6.1 개요 6.2 파트의 구성

Transcript of 파트 6 상미분방정식 -...

파트 6 상미분방정식

6.1 개요

6.2 파트의 구성

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

6.1 개요(1/4)

공학과 과학에서 상미분방정식을 유도하고 해를 구하는 과정.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

6.1 개요(2/4)

번지 점프하는 사람의 속도 변화율을 기술하는 미분방정식

미분방정식의 분류

- 상미분방정식 : 한 개의 독립변수

편미분방정식 : 두 개 이상의 독립변수

- 2차 방정식 : 2차 도함수를 포함

- n차 방정식 : n차 도함수를 포함

여기서 v = 종속변수

t = 독립변수

2dcdvg v

dt m

2

20

d x dxm c kx

dt dt

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

6.1 개요(3/4)

고차 미분방정식 → 1차 방정식계로 변환

-종속변수의 1차 도함수를 새로운 변수로 정의한다.

-식(PT6.3)과 식(PT6.4) 를 식(PT6.2) 에 대입하면,

-따라서 최종 1차 방정식계는 다음과 같다.

식(PT6.2)

식(PT6.3), 식(PT6.4)

dxv

dt

dv c kv x

dt m m

2

20

d x dxm c kx

dt dt

0dv

m cv kxdt

2

2

dv, then

t

dx d xv

dt d dt

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

6.1 개요(4/4)

n차 미분방정식의 유일 해를 구하기 위해서는 n개의 조건이 필요하다.

초기값 문제 : 같은 독립변수 값에서(예를 들면 x=0 또는t=0 에서) 모든 조건이 부여됨

경계값 문제 : 다른 독립변수 값에서 조건들이 부여됨

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

6.2 파트의 구성

22장 : 초기값 문제

23장 : 적응식 방법과 강성시스템

24장 : 경계값 문제

22장 초기값 문제

22.1 개요22.2 Euler법22.3 Euler법의 개선22.4 Runge-Kutta법22.5 연립방정식

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22장 초기값 문제 (1/2)

번지 점프하는 사람의 자유낙하 속도를 구하는 문제로 돌아가자.

여기서 sign(x) = sgn(x) = 시그넘 함수

떨어지는 경우 sign(v)=1 음의 항력(위쪽)

올라가는 경우 sign(v)=–1 양의 항력(아래쪽)

점프 줄이 늘어날 때 위 방향으로 작용하는 추가의 힘을 고려

근사화하는데 Hooke의 법칙을 사용

줄이 늘어나거나 줄어들 때 발생하는 마찰로 인한 감쇠력

2)(sign vm

cvg

dt

dv d

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22장 초기값 문제 (2/2)

( x > L인 경우에만 성립)

vm

γLx

m

kv

m

cvg

dt

dv d )()(sign 2

여기서 v = 속도 (m/s)

t = 시간 (s)

g = 중력가속도 = 9.81 m/s2

cd = 항력 계수 (kg/m)

m = 질량 (kg)

k = 줄의 스프링상수 (N/m)

x = 출발지점으로부터 아래로 측정한 거리 (m)

L = 늘어나지 않은 줄의 길이 (m)

= 감쇠계수 (Ns/m)

vdt

dx

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.1 개요

상미분방정식의 일반적인 형태:

1장에서 소개된 단일단계법 (또는 Runge-Kutta법):

이것을 수학적으로 표현하면

어떻게 기울기를 추정하는가?

미분방정식을 사용하여 ti에서의 1차 도함수의 형태로 추정

),( ytfdt

dy

크기간격기울기값이전값새로운

hyy ii 1여기서 = 기울기 = 증분함수

이전 값 yi에서 새로운 값 yi+1을 구하기 위해거리 h 에 대해 적용

다단계법: 이전의 여러 점에서의 정보를 사용

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (1/8)

1차 도함수가 곧 ti에서의 기울기 추정값

이 식을 대입하면

Euler법 (또는 Euler-Cauchy법 또는 점-기울기 법)

),( ii ytf

hytfyy iiii ),(1

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.1 (Euler법) (1/4)

Q. Euler법을 이용하여 y' = 4e0.8t – 0.5y를

t = 0에서 4까지 간격 크기를 1로 놓고 적분하라.

초기 조건은 t = 0 에서 y = 2이다.

참고로 엄밀해를 해석적으로 구하면 다음과 같다.

ttt eeey 5.05.08.0 2)(3.1

4

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.1 (Euler법) (2/4)

풀이)

첫 번째 단계에 대해

초기조건은 y(0) = 2이므로 t = 0에서 기울기는

t = 1에서의 정해:

백분율 상대오차:

)1)(2,0()0()1( fyy

3)2(5.04)2,0( 0 ef 5)1(32)1( y

19463.62)(3.1

4 )1(5.0)1(5.0)1(8.0 eeey

%28.19%10019463.6

519463.6

t

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.1 (Euler법) (3/4)

두 번째 단계에 대해

t = 2에서의 정해: 14.84392

백분율 상대오차: 23.19%

40216.11)1)](5(5.04[5

)1)(5,1()1()2(

)1(8.0

e

fyy

t ytrue yEuler (%)

0

1

2

3

4

2.00000

6.19463

14.84392

33.67717

75.33896

2.00000

5.00000

11.40216

25.51321

56.84931

19.28

23.19

24.24

24.54

t

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.1 (Euler법) (4/4)

정해와 Euler법을 사용한 수치 해의 비교(y' = 4e0.8t – 0.5y의 초기조건은 y(0) = 2이고,t = 0에서 4까지 간격 크기를 1로 놓음)

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

여기서 h = ti+1 – ti

= 나머지 항

22.2 Euler법 (2/8)

Euler법에 대한 오차해석 절단오차

- y의 값을 근사적으로 구하는 기법에서 자연스럽게 발생

- 전체 절단오차=국부 절단오차(한 단계에 대해)+전파 절단오차(모든 단계에 대해)

반올림오차- 계산기의 사용에서 유한 자리의 유효숫자를 취함으로써 발생

Euler법은 점 (ti, yi)부근에서의 Taylor 급수 전개

n

nn

iiiii Rh

n

yh

yhyyy

!!2

)(2

1

1)1(

)!1(

)(

n

n

n hn

yR

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (3/8)

또 다른 형태로는

Euler법에서는

: 국부 절단오차의 정확한 표현

충분히 작은 h에 대해서

또는

: 국부 절단오차의 근사적 표현

)(!

),(

!2

),(),( 1

)1(2

1

nnii

n

iiiiii hOh

n

ytfh

ytfhytfyy

hytfyy iiii ),(1

)(!2

),( 12

niit hOh

ytfE

2

!2

),(h

ytfE ii

a

)( 2hOEa

여기서 O(hn+1) = 국부 절단오차 간격 크기의 (n+1)거듭제곱

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (4/8)

전체오차는 O(h)로 간격 크기에 비례한다는 것을

증명할 수도 있다.

전체오차는 h를 작게 하면 줄어든다.

미분방정식이 해가 선형인 경우는 정해를 산출한다.

Euler법은 1차 방법

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (5/8)

Euler법의 안정성

절단오차는 간격의 크기에 의존하며, 이는 Taylor 급수에 기초하여 예측할 수 있음 → 정확도

오차가 기하급수적으로 증가하면 수치해는 불안정함

안정성 : 미분방정식, 수치기법과 간격 크기에 의존

- 확대인자 : g = 1-ah

- 만약 |g|>1 (즉 만약 h > 2/a), 해는 무한대로 커진다

- Euler법은 조건부로 안정함(conditionally stable)

-

0 0 (0) atdyay with y y y y e

dt

1 1 (1 )ii i i i

dyy y h y y ah

dt Euler 법 :

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (6/8)

수치기법에 무관하게 오차가 항상 증가하는 상미분방정식:

- 불량조건(ill-conditioned)

부정확성과 안정성은 별개의 특성이다.

- 부정확한 방법도 안정성 있는 방법일 수 있다.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (7/8)

[Euler법을 적용하는 M-파일 ]

function [t,y]= eulode(dydt, tspan, y0, h, varargin)

% eulode: Euler ODE solver

% [t,y] = Eulode(dydt, tspan, y0, h, p1, p2, …)

% uses Euler's method to integrate an ODE

% input:

% dydt = name of the M-file that evaluates the ODE

% tspan = [ti,tf] where ti and tf = initial and final

% values of independent variable

% y0 = initial value of dependent variable

% h = step size

% p1, p2, … = additional parameters used by dydt

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (7/8)

[Euler법을 적용하는 M-파일 ]

% output:

% t = vector of independent variable

% y= vector of solution for dependent variable

if nargin<4, error(‘at least4 input arguments required’), end

ti = tspan(1); tf = tspan(2);

If ~(tf>ti), error(‘upper limit must be greater than lower’), end

t = (ti:h:tf)'; n = length(t);

% if necessary, add an additional value of t

% so that range goes from t = ti to tf

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (7/8)

[Euler법을 적용하는 M-파일 ]

if t(n)<tf

t(n+1) = tf;

n = n+1;

end

y = y0*ones(n,1); %preallocate y to improve efficiency

for i = 1:n-1 % implement Euler's method

y(i+1) = y(i) + dydt(t(i), y(i), varargin{:}) * (t(i+1) - t(i));

end

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.2 Euler법 (8/8)

>> dydt = @(t,y) 4*exp(0.8*t)-0.5*y ;

>> [t,y] = eulode(dydt, [0 4], 2, 1);

>> disp([t,y])

0 2.0000

1.0000 5.0000

2.0000 11.4022

3.0000 25.5132

4.0000 56.8493

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (1/8)

Euler법에서 발생하는 오차의 근본적인 출처

- 시작점에서의 도함수를 간격 전체에 적용

Heun법

간격 전체 기울기의 추정값을 개선하는 방법

- 간격의 두 끝점, 즉 시작점과 끝점에서의 도함수를 이용

예측자-수정자 방법이라고도 함

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (2/8)

Heun법의 그래픽 표현. (a) 예측자와 (b) 수정자

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (3/8)

간격의 시작점에서의 기울기:

선형적으로 외삽:

표준 Euler법에서의 해

Heun법에서는 중간 예측 결과

의 계산을 위한 예측자 방정식

간격 전체의 평균 기울기:

: 수정자 방정식

),( iii ytfy

hytfyy iiii ),(0

1

),( 0

111 iii ytfy

2

),(),( 0

11 iiii ytfytf

y hytfytf

yy iiiiii

2

),(),( 0

111

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (4/8)

Heun법을 간략하게 정리하면

예측자

수정자

수정자의 수렴에 대한 종료 판정:

hytfyy ii

m

ii ),(0

1

),,2,1 ( 2

),(),( 1

111 mjh

ytfytfyy

j

ii

m

iim

i

j

i

%1001

1

11

j

i

j

i

j

ia

y

yy

개선된 결과를 얻기 위한 Heun법 수정자의 그래픽 표현

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.2 (Heun법) (1/4)

Q. 반복적인 Heun법을 이용하여 y' = 4e0.8t – 0.5y 를

t = 0 에서 4까지 간격 크기를 1로 놓고 적분하라.

초기 조건은 t = 0 에서 y = 2이다.

수정자의 반복을 끝내기 위한 수렴기준을 0.00001%로

잡아라.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.2 (Heun법) (2/4)

풀이)

(t0, y0):

예측자: 19.28%의 백분율 상대오차 (Euler법)

수정자: -8.18%의 백분율 상대오차

추정 오차:

3)2(5.04 0

0 ey

5)1(320

1 y

402164.6)5(5.04),( )1(8.00

111 eyxfy

701082.42

402164.63

y

701082.6)1(701082.421

1 y

%39.25%100701082.6

5701082.6

a

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.2 (Heun법) (3/4)

수정자:

추정 오차:

수정자:

추정 오차:

275811.612

)701082.6(5.0432

)1(8.02

1

e

y

%776.6%100275811.6

701082.6275811.6

a

0.8(1)3

1

3 4 0.5(6.275811)2 1 6.382129

2

ey

%666.1%100382129.6

275811.6382129.6

a

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.2 (Heun법) (4/4)

반복없음 반복있음

t ytrue yEuler (%) yHeun (%) yHeun (%)

0

1

2

3

4

2.00000

6.19463

14.84392

33.67717

75.33896

2.00000

5.00000

11.40216

25.51321

56.84931

19.28

23.19

24.24

24.51

2.00000

6.70108

16.31978

37.19925

83.33777

8.18

9.94

10.46

10.62

2.00000

6.36087

15.30224

34.74328

77.73510

2.68

3.09

3.17

3.18

y' = 4e0.8t – 0.5y의 적분에서 정해와 수치해의 비교. 초기 조건은 t = 0에서

y = 2이고, Euler법과 Heun법에서 간격 크기를 1로 놓고 수치해를 계산하였으며, Heun법에서는 수정자 반복이 없는 경우와 있는 경우를 모두 수행하였음.

t t t

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (5/8)

Heun법의 국부 오차

수정 단계를 거친 결과는

사다리꼴과 유사!!

상미분방정식:

변수 분리하여 풀면

또는

htftf

yy iiii

2

)()( 11

2

)()()(

bfafabI

)(tfdt

dy

11

)(i

i

i

i

t

t

y

ydttfdy

1

1 )(i

i

t

tii dttfyy

1

1 )(i

i

t

tii dttfyy

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (6/8)

사다리꼴 공식을 적용하면

Heun 법은 바로 사다리꼴 공식이기 때문에 국부 절단오차

: 2차 방법

국부 오차 = O(h3) 그리고 전체 오차 = O(h2)

htftf

dttf iit

t

i

i 2

)()()( 1

1

h

tftfyy ii

ii2

)()( 11

3

12

)(h

fEt

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (7/8)

중점법

중점법의 그래픽 표현. (a) 예측자와 (b) 수정자.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.3 Euler법의 개선 (8/8)

간격의 중점에서의 y 값을 예측하기 위하여 Euler법을 사용한다.

이렇게 예측한 값으로 중점에서의 기울기를 구한다.

이 평균 기울기를 전체 간격에 적용하면

중점법은 Newton-Cotes 개구간 적분공식과 연관이 있다.

따라서

2),(2/1

hytfyy iiii

),( 2/12/12/1 iii ytfy

hytfyy iiii ),( 2/12/11

)()()( 1xfabdxxfb

a )()( 2/1

1

i

t

tthfdttf

i

i

1

1 )(i

i

t

tii dttfyyhytfyy iiii ),( 2/12/11

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (1/14)

고차 도함수를 구하지 않고도 Taylor 급수 방법이가지는 정확도를 가짐

일반적인 형식:

1차 RK법: n = 1인 경우 Euler법

여기서:증분함수(간격 전체를 대표하는 기울기)

a's = 상수

: 순환적 관계

p's, q's = 상수

hyy ii 1

nnkakaka 2211

),(

),(

),(

),(

11,122,111,11

22212123

11112

1

hkqhkqhkqyhptfk

hkqhkqyhptfk

hkqyhptfk

ytfk

nnnnninin

ii

ii

ii

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

여기서

22.4 Runge-Kutta법 (2/14)

2차 Runge-Kutta법

2차 표현은 다음과 같다.

상수 a1, a2, p1 그리고 q11를 결정하기 위하여 2차

Taylor 급수와 같다고 놓는다.

따라서 는

와 같아야 한다.

hkakayy ii )( 22111 ),(1 ii ytfk

),( 11112 hkqyhptfk ii

2

1!2

),(),( h

ytfhytfyy ii

iiii

!2),(

2

1

h

dt

dy

y

f

t

fhytfyy iiii

hkakayy ii )( 22111

여기서dt

dy

y

ytf

t

ytfytf ii

),(),(),(

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (3/14)

2변수 함수의 Taylor 급수 전개는

k2는 다음에서 유도하면

따라서

정리하면

y

gs

t

grytgsyrtg ),(),(

)(),(),( 2

11111111 hOy

fhkq

t

fhpytfhkqyhptf iiii

)(),(),(),( 32

112

2

12211 hOy

fytfhqa

t

fhpaythfaythfayy iiiiiiii

)(),(),(),( 32

11212211 hOhy

fytfqa

t

fpahytfaytfayy iiiiiiii

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (4/14)

두 식의 계수를 비교하면

4개의 미지 상수에 대한 3개의

방정식 "부정인 경우"

a2의 값을 배정 그리고

2차 RK법은 a2의 배정에 따라 무한히 많은 종류가 있다.

2/1

2/1

1

112

12

21

qa

pa

aa

21 1 aa 2

1112

1

aqp

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (5/14)

반복이 없는 Heun법(a2 = 1/2)a2 = 1/2 a1 = 1/2 그리고 p1 = q11 = 1

Heun법에서 수정자의 반복이 없는 경우에 해당

중점법a2 = 1 a1 = 0 그리고 p1 = q11 = 1/2

hkkyy ii

211

2

1

2

1 여기서 ),(1 ii ytfk

),( 12 hkyhtfk ii

hkyy ii 21 여기서

:간격의 시작에서의 기울기

:간격의 끝에서의 기울기

),(1 ii ytfk

)2/,2/( 12 hkyhtfk ii

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (6/14)

Ralston법2차 RK 알고리즘에서 절단오차가 최소인 경우

a2 = 2/3 a1 = 1/3 그리고 p1 = q11 = 3/4

hkkyy ii

211

3

2

3

1

여기서 ),(1 ii ytfk

hkyhtfk ii 12

4

3,

4

3

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (7/14)

전형적인 4차 Runge-Kutta법가장 보편적으로 사용되는 4차 RK법

무한히 많은 종류 중에서 가장 흔히 사용되는 방법

Simpson 1/3 공식과 유사함

간격에 대한 평균 기울기를 개선하기 위해 여러 기울기값을 추정 Heun법과 유사

여기서

hkkkkyy ii 43211 226

1

),(1 ii ytfk

hkyhtfk ii 12

2

1,

2

1

hkyhtfk ii 23

2

1,

2

1

hkyhtfk ii 34 ,

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (8/14)

4차 RK법을 구성하는 기울기 추정값의 그래픽 표현.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.3 (전형적인 4차 RK법) (1/2)

Q. 전형적인 4차 RK법을 이용하여 를

t = 0에서 1까지 간격 크기를 1로 놓고 적분하라. 초기 조건은 y(0) = 2이다.

풀이)

간격의 시작점에서의 기울기

중점에서의 기울기

중점에서의 또 다른 기울기

yey t 5.04 8.0

3)2(5.04)2,0( )0(8.0

1 efk

5.3)5.0(32)5.0( y

217299.4)5.3(5.04)5.3,5.0( )5.0(8.0

2 efk

108649.4)5.0(217299.42)5.0( y

912974.3)108649.4(5.04)108649.4,5.0( )5.0(8.0

3 efk

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.3 (전형적인 4차 RK법) (2/2)

간격의 끝에서의 기울기

평균 기울기

수치 해

정해 6.194631에 비해 t = 0.103%의 오차를 갖는

비교적 좋은 해를 산출하였다.

912974.5)0.1(912974.32)0.1( y0.8(0.5)

4 (1.0, 5.912974) 4 0.5 (5.912974) 5.945677k f e

201037.4945677.5)912974.3(2)217299.4(236

1

(1.0) 2 4.201037 (1.0) 6.201037y

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (9/14)

Butcher의 5차 Runge-Kutta법

Boole법과 유사 (표 17.2 참조):

전체 절단오차는 크기가 O(h5)이다.

4차 RK 법에 비해 정확하나 계산량에서 비효율적 (6개 함수 값을 계산)

hkkkkkyy ii )73212327(90

1654311

여기서 ),(1 ii ytfk

hkyhtfk ii 12

4

1,

4

1

hkhkyhtfk ii 213

8

1

8

1,

4

1

hkhkyhtfk ii 324

2

1,

2

1

hkhkyhtfk ii 415

16

9

16

3,

4

3

hkhkhkhkhkyhtfk ii 543216

7

8

7

12

7

12

7

2

7

3,

90

)(7)(32)(12)(32)(7)( 43210 xfxfxfxfxf

ab

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (10/14)

[2차 Runge-Kutta법]

function [x, u] = RK2_M(f, a, b, u0, n)

h = (b-a)/n; hh=h/2;

x = (a+h: h: b);

k1 = feval (f, a, u0);

k2 = feval (f, a+hh, u0+hh*k1);

u(1) = u0 + k2*h;

for i = 1 : n-1

k1 = feval (f, x(i), u(i));

k2 = feval (f, x(i)+hh, u(i)+hh*k1);

u(i+1) = u(i) + k2*h;

end

x=[a x]; u=[u0 u]; plot(x, u)

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (11/14)

[내장함수]

function yp = f1(t,y)

yp = 4*exp(0.8*t) - 0.5*y;

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (12/14)

>> [t, u] = RK2_M('f1', 0, 4, 2, 4)

t =

0 1 2 3 4

u =

Columns 1 through 5

2.0000 6.2173 14.9407 33.9412 75.9686

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (13/14)

[4차 Runge-Kutta법]

function [x, u] = RK4_C(f, a, b, u0, n)

h = (b-a)/n; hh=h/2;

x = (a+h: h: b);

k1 = feval (f, a, u0);

k2 = feval (f, a+hh, u0+k1*hh);

k3 = feval (f, a+hh, u0+k2*hh);

k4 = feval (f, a+h, u0+k3*h);

u(1) = u0 + (k1+2*k2+2*k3+k4)*h/6;

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (13/14)

[4차 Runge-Kutta법]

for i = 1 : n-1

k1 = feval (f, x(i), u(i));

k2 = feval (f, x(i)+hh, u(i)+k1*hh);

k3 = feval (f, x(i)+hh, u(i)+k2*hh);

k4 = feval (f, x(i)+h, u(i)+k3*h);

u(i+1) = u(i) + (k1+2*k2+2*k3+k4)*h/6;

end

x=[a x]; u=[u0 u]; plot(x, u)

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.4 Runge-Kutta법 (14/14)

>> [t, u] = RK4_C('f1', 0, 4, 2, 4)

t =

0 1 2 3 4

u =

Columns 1 through 5

2.0000 6.2010 14.8625 33.7213 75.4392

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (1/10)

실제 공학에서는 여러 상미분방정식을 동시에 풀어야 한다.

( n 개의 초기 조건이 필요)

번지점프를 하는 사람의 속도와 위치를 결정하는 문제를

다루어 보자.

초기 조건: x(0) = v(0) = 0

),,,,(

),,,,(

),,,,(

21

2122

2111

nnn

n

n

yyytfdt

dy

yyytfdt

dy

yyytfdt

dy

vdt

dx

2vm

cg

dt

dv d

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.4 (Euler법을 이용한 연립 ODE 풀이) (1/3)

Q. 자유낙하 할 때의 속도와 위치를 Euler법으로 풀어라. 초기 조건을 t = 0일 때, x = v = 0로 가정하고, 간격 크기를 2s로 하여 t = 10s까지 적분을 수행하라. 예제 1.1에서와 같이 중력가속도는 9.81 m/s2, 사람의질량은 68.1 kg, 항력계수는 0.25 kg/m로 놓는다.

속도에 대한 해석 해는 다음과 같다.

위치에 대한 해석 해는 다음과 같다.

해석 해를 이용하여 수치 해의 상대오차를 계산하라.

t

m

gc

c

gmtv d

d

tanh)(

t

m

gc

c

mtx d

d

coshln)(

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.4 (Euler법을 이용한 연립 ODE 풀이) (2/3)

풀이)

t = 0에서의 기울기:

Euler법 ( t = 2 s) 해석 해 백분율 상대 오차

x(2) = 19.16629 100%

v(2) = 18.72919 4.756%

Euler법 ( t = 4 s)

0dt

dx

81.9)0(1.68

25.081.9 2

dt

dv

0)2(00 x

62.19)2(81.90 v

24.39)2(62.190 x

20.2519.62 9.81 (19.62) (2)

68.1

36.41368

v

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.4 (Euler법을 이용한 연립 ODE 풀이) (3/3)

간격 크기가 커서 결과가 정확하지 않다.

두 번째 반복을 수행하기까지 xEuler는 0으로 계산된다.

간격 크기를 줄이면 결과를 개선시킬 수 있다.

고차 방법을 사용하면 상대적으로 큰 간격에 대해서도 좋은 결과를얻을 수 있다.

t xtrue vtrue xEuler vEuler t(x) t(v)

02468

10

019.166371.9304

147.9462237.5104334.1782

018.729233.111842.076246.957549.4214

00

39.2400112.0674204.6640305.0244

019.620036.413746.298350.180251.3123

100.0045.4524.2513.83

8.72

4.769.97

10.036.863.83

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (2/10)

Runge-Kutta 법

고차 RK법은 연립방정식의 해를 구하는데 적용할 수 있다.

기울기를 구하는데 주의해야 한다.

간격의 시작점에서 모든 변수에 대해 기울기( k1's )를 결정한다.

의 결과를 이용하여 간격의 중점에서의 기울기( k2's )를

예측한다.

중점에서의 새로운 기울기(k3's)를 예측한다.

간격의 끝점에서의 기울기(k4's)를 예측한다.

모든 k가 증분함수에서 합성되어 간격 끝에서의 함수 값이

결정된다.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (1/4)

Q. 예제 22.4에서 다루었던 문제의 해를 4차 RK법으로 구하라.

풀이)상미분방정식을 다음과 같이 표시한다.

간격의 시작점에서 x와 v에 대한 기울기를 계산한다.

vvxtfdt

dx ),,(1

2

2 ),,( vm

cgvxtf

dt

dv d

0)0,0,0(11,1 fk

81.9)0(1.68

25.081.9)0,0,0( 2

22,1 fk

여기서 ki,j는 j번째 종속변수의 i번째 k값이다.

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (2/4)

간격의 중점에서 x와 v의 첫 번째 값을 구한다.

간격의 중점에서 x와 v에 대한 기울기를 계산한다.

간격의 중점에서 x와 v의 두 번째 값을 구한다.

02

200

2)0()1( 1,1

hkxx

81.92

281.90

2)0()1( 2,1

hkvv

8100.9)81.9,0,1(11,2 fk

4567.9)81.9,0,1(22,2 fk

8100.92

28100.90

2)0()1( 1,2

hkxx

4567.92

24567.90

2)0()1( 2,2

hkvv

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (3/4)

간격의 중점에서 x와 v에 대한 기울기를 다시 계산한다.

간격의 끝점에서 x와 v의 값을 구한다.

간격의 끝점에서 x와 v의 기울기를 계산한다.

4567.9)4567.9,8100.9,1(11,3 fk

4817.9)4567.9,8100.9,1(22,3 fk

9134.18)2(4567.90)0()2( 1,3 hkxx

9634.18)2(4817.90)0()2( 2,3 hkvv

9634.18)9634.18,9134.18,2(11,4 fk

4898.8)9634.18,9134.18,2(22,4 fk

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (4/4)

위에서 구한 k를 합하여 최종적으로 x와 v의 값을 구한다.

Euler법으로 얻은 결과와는 대조적으로 4차 RK법으로 구한

예측한 값은 정해에 매우 가깝다.

1656.192]9634.18)4567.98100.9(20[6

10)2( x

7256.182]4898.8)4817.94567.9(28100.9[6

10)2( v

t xtrue vtrue xRK4 vRK4 t(x) t(v)

02468

10

019.166371.9304

147.9642237.5104334.1782

018.729233.111842.076246.957549.4214

019.165671.9311

147.9521237.5104334.1626

018.725633.099542.054746.934549.4207

0.0040.0010.0040.0000.005

0.0190.0370.0510.0490.038

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (3/10)

[연립 ODE에 Rk4법을 적용하는 M-파일 ]

function [tp,yp] = rk4sys(dydt,tspan,y0,h,varargin)

% rk4sys: fourth-order Runge-Kutta for a system of ODEs

% [t,y] = rk4sys(dydt,tspan,y0,h,p1,p2,...): integrates a

% system of ODEs with fourth-order RK method

% input:

% dydt = name of the M-file that evaluates the ODEs

% tspan = [ti, tf]; initial and final times with output

% generated at interval of h, or

% = [t0 t1 ... tf]; specific times where solution output

% y0 = initial values of dependent variables

% h = step size

% p1,p2,... = additional parameters used by dydt

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (4/10)

[연립 ODE에 Rk4법을 적용하는 M-파일 ]

% output:

% tp = vector of independent variable

% yp = vector of solution for dependent variables

if nargin<4,error('at least 4 input arguments required'),end

if any(diff(tspan)<=0),error('tspan not ascending order'), end

n = length(tspan);

ti = tspan(1);tf = tspan(n);

if n == 2

t = (ti:h:tf)'; n = length(t);

if t(n)<tf

t(n+1) = tf;

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (5/10)

[연립 ODE에 Rk4법을 적용하는 M-파일 ]

n = n+1;

end

else

t = tspan;

end

tt = ti; y(1,:) = y0;

np = 1; tp(np) = tt; yp(np,:) = y(1,:);

i=1;

while(1)

tend = t(np+1);

hh = t(np+1) - t(np);

if hh>h,hh = h;end

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (6/10)

[연립 ODE에 Rk4법을 적용하는 M-파일 ]

while(1)

if tt+hh>tend,hh = tend-tt;end

k1 = dydt(tt,y(i,:),varargin{:})';

ymid = y(i,:) + k1.*hh./2;

k2 = dydt(tt+hh/2,ymid,varargin{:})';

ymid = y(i,:) + k2*hh/2;

k3 = dydt(tt+hh/2,ymid,varargin{:})';

yend = y(i,:) + k3*hh;

k4 = dydt(tt+hh,yend,varargin{:})';

phi = (k1+2*(k2+k3)+k4)/6;

y(i+1,:) = y(i,:) + phi*hh;

tt = tt+hh;

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (7/10)

[연립 ODE에 Rk4법을 적용하는 M-파일 ]

i=i+1;

if tt>=tend,break,end

end

np = np+1; tp(np) = tt; yp(np,:) = y(i,:);

if tt>=tf,break,end

end

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (8/10)

[내장함수]

function dy = dydtsys(t,y)

dy = [y(2); 9.81-0.25/68.1*y(2)^2];

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (9/10)

>> [t y] = rk4sys(@dydtsys, [0 10], [0 0], 2);

>> disp ([t’ y(:, 1) y(:, 2)])

0 0 0

2.0000 19.1656 18.7256

4.0000 71.9311 33.0995

6.0000 147.9521 42.0547

8.0000 237.5104 46.9345

10.0000 334.1626 49.4027

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

22.5 연립방정식 (10/10)

>> tspan=[0 6 10] ;

>> [t y] = rk4sys(@dydtsys, tspan, [0 0], 2);

>> disp ([t’ y(:, 1) y(:, 2)])

0 0 0

6.0000 147.9521 42.0547

10.0000 334.1626 49.4027

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (1/6)

질량 m, 길이 L, 감쇠계수 c인 비선형진자의 운동을 살펴보자.

윗 식에서 c/(mL) = 0.3, g/L = 1, a = /2, b = 0 인 경우

b(0)y' a,y(0)0siny L

g'y" y

mL

c

siny '3.0y"

0siny '3.0y"

y

y

0)0((0)y' ,2/u(0)y(0)

),,(sin3.0'

),,('

'

v

vuxguvv

vuxfvu

yv

yu

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (2/6)

[2nd ODE-Euler법]

function [x, u, v] =Euler_sys2(f, g, a, b, u0, v0, n)

h = (b-a)/n;

x = (a+h: h: b);

u(1) = u0 + h*feval(f, a, u0, v0);

v(1) = v0 + h*feval(g, a, u0, v0);

for i = 2 : n

u(i) = u(i-1) + h*feval(f, x(i-1), u(i-1), v(i-1));

v(i)= v(i-1) + h*feval(g, x(i-1), u(i-1), v(i-1));

end

x=[a x]; u=[u0 u]; v=[v0 v];

plot(x, u)

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (3/6)

[내장함수]

function t = f(x,u,v)

t = v;

function t = g(x, u, v)

t = -0.3*v - sin(u);

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (4/6)

>> u0=pi/2; v0=0; a=0; b=15; n=100;

>> [x, u, v] = Euler_sys2('f','g', a, b, u0, v0, n)

x =

...

Columns 96 through 101

14.2500 14.4000 14.5500 14.7000 14.8500 15.0000

u =

...

Columns 96 through 101

0.3432 0.2920 0.2356 0.1752 0.1123 0.0483

v =

...

Columns 96 through 101

-0.3411 -0.3763 -0.4025 -0.4194 -0.4267 -0.4243

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (4/6)

>> u0=pi/2; v0=0; a=0; b=15; n=100;

>> [x, u, v] = Euler_sys2('f','g', a, b, u0, v0, n)

x =

...

Columns 96 through 101

14.2500 14.4000 14.5500 14.7000 14.8500 15.0000

u =

...

Columns 96 through 101

0.3432 0.2920 0.2356 0.1752 0.1123 0.0483

v =

...

Columns 96 through 101

-0.3411 -0.3763 -0.4025 -0.4194 -0.4267 -0.4243

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (5/6)

[2nd ODE-RK2법]

function [x, u, v] = RK2_sys(f, g, a, b, u0, v0, n)

h = (b-a)/n; hh=h/2;

x = (a+h: h: b);

k1 = h*feval (f, a, u0, v0); m1 = h*feval (g, a, u0, v0);

k2 = h*feval (f, a+hh, u0+0.5*k1, v0+0.5*m1);

m2 = h*feval (g, a+hh, u0+0.5*k1, v0+0.5*m1);

u(1) = u0 + k2; v(1) = v0 + m2;

for i = 1 : n-1

k1 = h*feval (f, x(i), u(i), v(i));

m1 = h*feval (g, x(i), u(i), v(i));

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (5/6)

[2nd ODE-RK2법]

k2 = h*feval (f, x(i)+hh, u(i)+0.5*k1, v(i)+0.5*m1);

m2 = h*feval (g, x(i)+hh, u(i)+0.5*k1, v(i)+0.5*m1);

u(i+1) = u(i) + k2;

v(i+1) = v(i) + m2;

end

x=[a x]; u=[u0 u]; v=[v0 v]; plot(x, u)

Applied Numerical Methods 22장 상미분방정식: 초기값 문제

부록 (비선형진자의 미분방정식의 해) (6/6)

>> n=20;[x2, u2, v] = RK2_sys('f','g',a,b,u0,v0,n);

>> n=50;[x5, u5, v] = RK2_sys('f','g',a,b,u0,v0,n);

>> n=200;[x20, u20, v] = RK2_sys('f','g',a,b,u0,v0,n);

>> plot(x2, u2, x5, u5, x20, u20)