파트 6 상미분방정식 -...
Transcript of 파트 6 상미분방정식 -...
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장 : 경계값 문제
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법의 개선 (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.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)