6.1 개요 - pusan national...
TRANSCRIPT
파트 6 상미분방정식
6.1 개요
6.2 파트의 구성
Applied Numerical Methods 장 상미분방정식 초기값 문제
6.1 개요(1/4)
공학과 과학에서 상미분방정식을 유도하고 해를 구하는 과정.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
6.1 개요(2/4)
번지 점프하는 사람의 속도 변화율을 기술하는 미분방정식
미분방정식의 분류
- 상미분방정식 : 한 개의 독립변수
편미분방정식 : 두 개 이상의 독립변수
- 2차 방정식 : 2차 도함수를 포함
- n차 방정식 : n차 도함수를 포함
여기서 v = 종속변수
t = 독립변수
2dcdv g vdt m
= −
2
2 0d x dxm c kxdt dt
+ + =
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
6.1 개요(3/4)
고차 미분방정식 → 1차 방정식계로 변환
-종속변수의 1차 도함수를 새로운 변수로 정의한다.
-식(PT6.3)과 식(PT6.4) 를 식(PT6.2) 에 대입하면,
-따라서 최종 1차 방정식계는 다음과 같다.
식(PT6.2)
식(PT6.3), 식(PT6.4)
dx vdtdv c kv xdt m m
=
= − −
2
2 0d x dxm c kxdt dt
+ + =
0dvm cv kxdt
+ + =
2
2
dv, then t
dx d xvdt d dt
= =
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
6.1 개요(4/4)
n차 미분방정식의 유일 해를 구하기 위해서는 n개의 조건이 필요하다.
초기값 문제 : 같은 독립변수 값에서(예를 들면 x=0 또는t=0 에서) 모든 조건이 부여됨
경계값 문제 : 다른 독립변수 값에서 조건들이 부여됨
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
6.2 파트의 구성
22장 : 초기값 문제
23장 : 적응식 방법과 강성시스템
24장 : 경계값 문제
22 :
22장 초기값 문제
22.1 개요22.2 Euler법22.3 Euler법의 개선22.4 Runge-Kutta법22.5 연립방정식
Applied Numerical Methods 장 상미분방정식 초기값 문제
22장 초기값 문제 (1/2)
번지 점프하는 사람의 자유낙하 속도를 구하는 문제로 돌아가자.
여기서 sign(x) = sgn(x) = 시그넘 함수
떨어지는 경우→ sign(v)=1 → 음의 항력(위쪽)
올라가는 경우→ sign(v)=–1 → 양의 항력(아래쪽)
점프 줄이 늘어날 때 위 방향으로 작용하는 추가의 힘을 고려
근사화하는데 Hooke의 법칙을 사용
줄이 늘어나거나 줄어들 때 발생하는 마찰로 인한 감쇠력
2)(sign vmc
vgdtdv d−=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22장 초기값 문제 (2/2)
( x > L인 경우에만 성립)
vmγLx
mkv
mc
vgdtdv 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)
γ = 감쇠계수 (N⋅s/m)
vdtdx
=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.1 개요
상미분방정식의 일반적인 형태:
1장에서 소개된 단일단계법 (또는 Runge-Kutta법):
이것을 수학적으로 표현하면
어떻게 기울기를 추정하는가?
→ 미분방정식을 사용하여 ti에서의 1차 도함수의 형태로 추정
),( ytfdtdy
=
크기간격기울기값이전값새로운 ×+=
hyy ii φ+=+1여기서 φ = 기울기 = 증분함수
→ 이전 값 yi에서 새로운 값 yi+1을 구하기 위해거리 h 에 대해 적용
→ 다단계법: 이전의 여러 점에서의 정보를 사용
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.2 Euler법 (1/8)
1차 도함수가 곧 ti에서의 기울기 추정값
이 식을 대입하면
Euler법 (또는 Euler-Cauchy법 또는 점-기울기 법)
),( ii ytf=φ
hytfyy iiii ),(1 +=+
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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 −− +−=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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 =−+=
+=
efyy
t ytrue yEuler (%)01234
2.000006.19463
14.8439233.6771775.33896
2.000005.0000011.4021625.5132156.84931
19.2823.1924.2424.54
tε
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.1 (Euler법) (4/4)
정해와 Euler법을 사용한 수치 해의 비교(y' = 4e0.8t – 0.5y의 초기조건은 y(0) = 2이고,t = 0에서 4까지 간격 크기를 1로 놓음)
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
여기서 h = ti+1 – ti
= 나머지 항
22.2 Euler법 (2/8)
Euler법에 대한 오차해석 절단오차
- y의 값을 근사적으로 구하는 기법에서 자연스럽게 발생
- 전체 절단오차=국부 절단오차(한 단계에 대해)+전파 절단오차(모든 단계에 대해)
반올림오차- 계산기의 사용에서 유한 자리의 유효숫자를 취함으로써 발생
Euler법은 점 (ti, yi)부근에서의 Taylor 급수 전개
nn
nii
iii Rhn
yh
yhyyy +++
′′+′+=+ !!2
)(2
1
1)1(
)!1()( +
+
+ξ
= nn
n hn
yR
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.2 Euler법 (3/8)
또 다른 형태로는
Euler법에서는
: 국부 절단오차의 정확한 표현
충분히 작은 h에 대해서
또는
: 국부 절단오차의 근사적 표현
)(!
),(!2
),(),( 1
)1(2
1+
−
+ +++′
++= nniin
iiiiii hOh
nytf
hytf
hytfyy
hytfyy iiii ),(1 +=+
)(!2
),( 12 +++′
= niit hOh
ytfE
2
!2),(
hytf
E iia
′= )( 2hOEa =
여기서 O(hn+1) = 국부 절단오차 ∝ 간격 크기의 (n+1)거듭제곱
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.2 Euler법 (4/8)
전체오차는 O(h)로 간격 크기에 비례한다는 것을
증명할 수도 있다.
전체오차는 h를 작게 하면 줄어든다.
미분방정식이 해가 선형인 경우는 정해를 산출한다.
→ Euler법은 1차 방법
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.2 Euler법 (5/8)
Euler법의 안정성
절단오차는 간격의 크기에 의존하며, 이는 Taylor 급수에 기초하여 예측할 수 있음 → 정확도
오차가 기하급수적으로 증가하면 수치해는 불안정함
안정성 : 미분방정식, 수치기법과 간격 크기에 의존
- 확대인자 : g = 1-ah
- 만약 |g|>1 (즉 만약 h > 2/a), 해는 무한대로 커진다
- Euler법은 조건부로 안정함(conditionally stable)
-0 0 (0) atdy ay with y y y y e
dt= − = ⇒ =
1 1 (1 )ii i i i
dyy y h y y ahdt+ += + ⇒ = −Euler 법 :
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.2 Euler법 (6/8)
수치기법에 무관하게 오차가 항상 증가하는 상미분방정식:
- 불량조건(ill-conditioned)
부정확성과 안정성은 별개의 특성이다.
- 부정확한 방법도 안정성 있는 방법일 수 있다.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (1/8)
Euler법에서 발생하는 오차의 근본적인 출처
- 시작점에서의 도함수를 간격 전체에 적용
Heun법
간격 전체 기울기의 추정값을 개선하는 방법
- 간격의 두 끝점, 즉 시작점과 끝점에서의 도함수를 이용
예측자-수정자 방법이라고도 함
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (2/8)
Heun법의 그래픽 표현. (a) 예측자와 (b) 수정자
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (3/8)
간격의 시작점에서의 기울기:
선형적으로 외삽:
→ 표준 Euler법에서의 해
→ Heun법에서는 중간 예측 결과
의 계산을 위한 예측자 방정식
간격 전체의 평균 기울기:
→
: 수정자 방정식
),( iii ytfy =′
hytfyy iiii ),(01 +=+
),( 0111 +++ =′ iii ytfy
2),(),( 0
11 +++=′ iiii ytfytf
y hytfytf
yy iiiiii 2
),(),( 011
1++
+
++=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (4/8)
Heun법을 간략하게 정리하면
예측자
수정자
수정자의 수렴에 대한 종료 판정:
hytfyy iimii ),(0
1 +=+
),,2,1 ( 2
),(),( 111
1 mjhytfytfyyj
iimiim
ij
i =+
+=−++
+
%1001
111 ×
−=ε
+
−++
ji
ji
ji
a yyy
개선된 결과를 얻기 위한 Heun법 수정자의 그래픽 표현
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.2 (Heun법) (1/4)
Q. 반복적인 Heun법을 이용하여 y' = 4e0.8t – 0.5y 를
t = 0 에서 4까지 간격 크기를 1로 놓고 적분하라.
초기 조건은 t = 0 에서 y = 2이다.
수정자의 반복을 끝내기 위한 수렴기준을 0.00001%로
잡아라.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.2 (Heun법) (2/4)
풀이)
(t0, y0):
예측자: → 19.28%의 백분율 상대오차 (Euler법)
수정자: →-8.18%의 백분율 상대오차
추정 오차:
3)2(5.04 00 =−=′ ey
5)1(3201 =+=y
402164.6)5(5.04),( )1(8.00111 =−==′ eyxfy
701082.42402164.63
=+
=′y
701082.6)1(701082.4211 =+=y
%39.25%100701082.6
5701082.6=×
−=εa
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.2 (Heun법) (3/4)
수정자:
추정 오차:
수정자:
추정 오차:
275811.612
)701082.6(5.0432)1(8.0
21 =
−++=
ey
%776.6%100275811.6
701082.6275811.6=×
−=εa
0.8(1)31
3 4 0.5(6.275811)2 1 6.3821292
ey + −= + =
%666.1%100382129.6
275811.6382129.6=×
−=aε
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.2 (Heun법) (4/4)
반복없음 반복있음
t ytrue yEuler (%) yHeun (%) yHeun (%)
01234
2.000006.19463
14.8439233.6771775.33896
2.000005.00000
11.4021625.5132156.84931
19.2823.1924.2424.51
2.000006.70108
16.3197837.1992583.33777
8.189.94
10.4610.62
2.000006.36087
15.3022434.7432877.73510
2.683.093.173.18
y' = 4e0.8t – 0.5y의 적분에서 정해와 수치해의 비교. 초기 조건은 t = 0에서
y = 2이고, Euler법과 Heun법에서 간격 크기를 1로 놓고 수치해를 계산하였으며, Heun법에서는 수정자 반복이 없는 경우와 있는 경우를 모두 수행하였음.
tε tε tε
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (5/8)
Heun법의 국부 오차
수정 단계를 거친 결과는
↔사다리꼴과 유사!!
상미분방정식:
변수 분리하여 풀면
→
또는
htftf
yy iiii 2
)()( 11
++
++= 2
)()()( bfafabI +−=
)(tfdtdy
=
∫∫++
=11
)(i
i
i
i
t
t
y
ydttfdy
∫+
+ =−1
1 )(i
i
t
tii dttfyy ∫+
+ +=1
1 )(i
i
t
tii dttfyy
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (6/8)
사다리꼴 공식을 적용하면
→
Heun 법은 바로 사다리꼴 공식이기 때문에 국부 절단오차
: 2차 방법
국부 오차 = O(h3) 그리고 전체 오차 = O(h2)
htftf
dttf iit
t
i
i 2)()(
)( 11 ++ +=∫ h
tftfyy ii
ii 2)()( 1
1+
+
++=
3
12)( hfEtξ′′
−=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.3 Euler법의 개선 (7/8)
중점법
중점법의 그래픽 표현. (a) 예측자와 (b) 수정자.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
tthfdttfi
i
∫+
+ +=1
1 )(i
i
t
tii dttfyyhytfyy iiii ),( 2/12/11 +++ +=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
hkqhkqyhptfkhkqyhptfk
ytfk
nnnnninin
ii
ii
ii
−−−−−− +++++=
+++=++=
=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
여기서
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 ++=
21 !2
),(),( h
ytfhytfyy ii
iiii′
++=+
!2),(
2
1h
dtdy
yf
tfhytfyy iiii
∂∂
+∂∂
++=+
hkakayy ii )( 22111 ++=+
여기서 dtdy
yytf
tytfytf ii ∂
∂+
∂∂
=′ ),(),(),(
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (3/14)
2변수 함수의 Taylor 급수 전개는
k2는 다음에서 유도하면
따라서
정리하면
+∂∂
+∂∂
+=++ygs
tgrytgsyrtg ),(),(
)(),(),( 211111111 hO
yfhkq
tfhpytfhkqyhptf iiii +
∂∂
+∂∂
+=++
)(),(),(),( 32112
212211 hO
yfytfhqa
tfhpaythfaythfayy iiiiiiii +
∂∂
+∂∂
+++=+
[ ] )(),(),(),( 3211212211 hOh
yfytfqa
tfpahytfaytfayy iiiiiiii +
∂∂
+∂∂
+++=+
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (4/14)
두 식의 계수를 비교하면
→ 4개의 미지 상수에 대한 3개의
방정식 "부정인 경우"
a2의 값을 배정 → 그리고
2차 RK법은 a2의 배정에 따라 무한히 많은 종류가 있다.
2/12/11
112
12
21
===+
qapa
aa
21 1 aa −=2
111 21a
qp ==
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
121 여기서 ),(1 ii ytfk =
),( 12 hkyhtfk ii ++=
hkyy ii 21 +=+ 여기서
:간격의 시작에서의 기울기
:간격의 끝에서의 기울기
),(1 ii ytfk =
)2/,2/( 12 hkyhtfk ii ++=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (6/14)
Ralston법2차 RK 알고리즘에서 절단오차가 최소인 경우
a2 = 2/3 → a1 = 1/3 그리고 p1 = q11 = 3/4
hkkyy ii
++=+ 211 3
231
여기서 ),(1 ii ytfk =
++= hkyhtfk ii 12 4
3,43
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (7/14)
전형적인 4차 Runge-Kutta법가장 보편적으로 사용되는 4차 RK법
무한히 많은 종류 중에서 가장 흔히 사용되는 방법
Simpson 1/3 공식과 유사함
간격에 대한 평균 기울기를 개선하기 위해 여러 기울기값을 추정→ Heun법과 유사
여기서
( )hkkkkyy ii 43211 2261
++++=+
),(1 ii ytfk =
++= hkyhtfk ii 12 2
1,21
++= hkyhtfk ii 23 2
1,21
( )hkyhtfk ii 34 , ++=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (8/14)
4차 RK법을 구성하는 기울기 추정값의 그래픽 표현.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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.01 =−== efk
5.3)5.0(32)5.0( =+=y217299.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.03 =−== efk
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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(2361
=+++=φ
(1.0) 2 4.201037 (1.0) 6.201037y = + =
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (9/14)
Butcher의 5차 Runge-Kutta법
Boole법과 유사 (표 17.2 참조):
전체 절단오차는 크기가 O(h5)이다.
4차 RK 법에 비해 정확하나 계산량에서 비효율적 (6개 함수 값을 계산)
hkkkkkyy ii )73212327(901
654311 +++++=+
여기서 ),(1 ii ytfk =
++= hkyhtfk ii 12 4
1,41
+++= hkhkyhtfk ii 213 8
181,
41
+−+= hkhkyhtfk ii 324 2
1,21
+++= hkhkyhtfk ii 415 16
9163,
43
+−++−+= hkhkhkhkhkyhtfk ii 543216 7
87
127
1272
73,
90)(7)(32)(12)(32)(7)( 43210 xfxfxfxfxfab ++++
−
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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)
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.4 Runge-Kutta법 (11/14)
[내장함수]
function yp = f1(t,y)
yp = 4*exp(0.8*t) - 0.5*y;
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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;
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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)
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.5 연립방정식 (1/10)
실제 공학에서는 여러 상미분방정식을 동시에 풀어야 한다.
( n 개의 초기 조건이 필요)
번지점프를 하는 사람의 속도와 위치를 결정하는 문제를
다루어 보자.
초기 조건: x(0) = v(0) = 0
),,,,(
),,,,(
),,,,(
21
2122
2111
nnn
n
n
yyytfdt
dy
yyytfdt
dy
yyytfdtdy
=
=
=
vdtdx
=
2vmc
gdtdv d−=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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
mgc
cgmtv d
d
tanh)(
= t
mgc
cmtx d
d
coshln)(
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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)
0=dtdx
81.9)0(1.68
25.081.9 2 =−=dtdv
0)2(00 =+=x62.19)2(81.90 =+=v
24.39)2(62.190 =+=x
20.2519.62 9.81 (19.62) (2)68.1
36.41368
v = + −
=
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.5 연립방정식 (2/10)
Runge-Kutta 법
고차 RK법은 연립방정식의 해를 구하는데 적용할 수 있다.
기울기를 구하는데 주의해야 한다.
간격의 시작점에서 모든 변수에 대해 기울기( k1's )를 결정한다.
의 결과를 이용하여 간격의 중점에서의 기울기( k2's )를
예측한다.
중점에서의 새로운 기울기(k3's)를 예측한다.
간격의 끝점에서의 기울기(k4's)를 예측한다.
모든 k가 증분함수에서 합성되어 간격 끝에서의 함수 값이
결정된다.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (1/4)
Q. 예제 22.4에서 다루었던 문제의 해를 4차 RK법으로 구하라.
풀이)상미분방정식을 다음과 같이 표시한다.
간격의 시작점에서 x와 v에 대한 기울기를 계산한다.
vvxtfdtdx
== ),,(1
22 ),,( v
mc
gvxtfdtdv d−==
0)0,0,0(11,1 == fk
81.9)0(1.68
25.081.9)0,0,0( 222,1 =−== fk
여기서 ki,j는 j번째 종속변수의 i번째 k값이다.
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (2/4)
간격의 중점에서 x와 v의 첫 번째 값을 구한다.
간격의 중점에서 x와 v에 대한 기울기를 계산한다.
간격의 중점에서 x와 v의 두 번째 값을 구한다.
02200
2)0()1( 1,1 =+=+=
hkxx
81.92281.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.9228100.90
2)0()1( 1,2 =+=+=
hkxx
4567.9224567.90
2)0()1( 2,2 =+=+=
hkvv
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
예제 22.5 (4차 RK법을 이용한 연립 상미분방정식의 풀이) (4/4)
위에서 구한 k를 합하여 최종적으로 x와 v의 값을 구한다.
Euler법으로 얻은 결과와는 대조적으로 4차 RK법으로 구한
예측한 값은 정해에 매우 가깝다.
1656.192]9634.18)4567.98100.9(20[610)2( =++++=x
7256.182]4898.8)4817.94567.9(28100.9[610)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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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;
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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;
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
22.5 연립방정식 (8/10)
[내장함수]
function dy = dydtsys(t,y)
dy = [y(2); 9.81-0.25/68.1*y(2)^2];
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (1/6)
질량 m, 길이 L, 감쇠계수 c인 비선형진자의 운동을 살펴보자.
윗 식에서 c/(mL) = 0.3, g/L = 1, a = π/2, b = 0 인 경우
b(0)y' a,y(0)0siny Lg'y" ===++ y
mLc
siny '3.0y"0siny '3.0y"
−−==++
yy
0)0((0)y' ,2/u(0)y(0)),,(sin3.0'
),,(''
====
=−−===
⇒
≡≡
vvuxguvv
vuxfvuyvyu
π
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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)
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (3/6)
[내장함수]
function t = f(x,u,v)
t = v;
function t = g(x, u, v)
t = -0.3*v - sin(u);
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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));
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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)
22 :
Applied Numerical Methods 장 상미분방정식 초기값 문제
부록 (비선형진자의 미분방정식의 해) (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)
22 :