룽게-쿠타 방법
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
룽게-쿠타 방법은 1900년경 독일의 수학자 룽게와 쿠타가 개발한, 수치 미분 방정식의 해를 구하는 방법이다. 이 방법은 다양한 종류가 있으며, RK4(고전적 룽게-쿠타 방법)가 널리 사용된다. 룽게-쿠타 방법은 초기값 문제를 해결하기 위해 기울기를 여러 번 계산하여 다음 단계의 값을 예측하며, 단계 수, 계수, 가중치, 절점 등을 사용하여 해의 정확도를 높인다. 또한, 적응적 룽게-쿠타 방법과 음함수적 룽게-쿠타 방법과 같은 다양한 변형이 존재하며, 과학 기술 분야의 시뮬레이션 및 수치 모델링에 널리 활용된다.
더 읽어볼만한 페이지
- 룽게-쿠타 방법 - 오일러 방법
오일러 방법은 레온하르트 오일러가 제시한 미분 방정식의 해를 구하는 수치 해석 방법으로, 초기값을 이용하여 시간 간격을 나누어 해를 계산하며, 테일러 급수를 활용하여 공식을 유도하고, 간단한 알고리즘 덕분에 과거에 널리 사용되었고 현재에도 수치 해석의 기본 원리를 설명하는 데 중요한 역할을 한다. - 룽게-쿠타 방법 - 호인의 방법
호인의 방법은 미분방정식의 해를 구하는 수치적 방법으로, 오일러 방법의 개선된 형태이며, 구간 양 끝점의 기울기를 고려하여 오차를 줄이는 2차 룽게-쿠타 방법의 일종이다. - 수치해석학 - 수학적 최적화
수학적 최적화는 주어진 집합에서 실수 또는 정수 변수를 갖는 함수의 최댓값이나 최솟값을 찾는 문제로, 변수 종류, 제약 조건, 목적 함수 개수에 따라 다양한 분야로 나뉘며 여러 학문 분야에서 활용된다. - 수치해석학 - 선형대수학
선형대수학은 벡터, 벡터 공간, 행렬 등의 개념으로 선형 방정식과 선형 변환을 연구하는 수학 분야로, 선형성을 활용해 행렬로 표현 및 계산하며, 연립일차방정식 해법, 고유값/고유벡터를 통한 행렬 분석, 벡터 공간의 기저와 차원 등을 다루고 물리학, 공학, 컴퓨터 과학 등 다양한 분야에 응용된다.
룽게-쿠타 방법 | |
---|---|
룽게-쿠타 방법 | |
![]() | |
종류 | |
분야 | 수치 해석학 |
해결 방법 | 상미분 방정식 |
개발 | |
개발자 | 카를 룽게 마르틴 빌헬름 쿠타 |
개발 시기 | 1900년경 |
방법 | |
종류 | 명시적 방법 묵시적 방법 |
예시 | 전진 오일러 방법 후진 오일러 방법 중점 방법 호인 방법 3차 룽게-쿠타 방법 고전적인 4차 룽게-쿠타 방법 캐시-카프 방법 도르만-프린스 방법 보간된 룽게-쿠타 방법 |
기타 | |
관련 항목 | 선형 다단계 방법 수치적 안정성 |
2. 역사
1900년경 독일의 수학자 카를 룽게와 마르틴 빌헬름 쿠타가 룽게-쿠타 방법을 개발하였다.[6]
일반적으로 사용되는 룽게-쿠타 방법은 4차 룽게-쿠타 방법(RK4)이며, 특별한 언급이 없으면 대체로 이 방법을 의미한다.
3. 룽게-쿠타 방법의 종류
룽게-쿠타 방법은 크게 양함수적(명시적) 방법과 음함수적(암시적) 방법으로 나뉜다.
이 외에도, 단계 크기를 자동으로 조절하는 적응적(Adaptive) 룽게-쿠타 방법이 있다.
3. 1. 고전적 룽게-쿠타 방법 (RK4)
룽게-쿠타 방법 중 가장 널리 알려진 것은 4차 룽게-쿠타 방법(RK4) 또는 협의의 룽게-쿠타 방법이다.
초기값 문제 에 대해, RK4 방법은 다음 공식으로 해를 근사한다.[3]
:
여기서,
:
위 식에서 은 의 RK4 근사값이며, 다음 단계 값()은 현재 값()에 네 기울기의 가중 평균과 h를 곱한 값을 더하여 결정된다. 이때, 중간점 기울기에 더 큰 가중치가 주어진다.[5] 만약 가 에 독립적이면, RK4는 심프슨 공식이 된다.
RK4는 4차 방법으로, 각 단계에서 오차는 점근 표기법으로 이고, 총 누적 오차는 이다.
3. 2. 양함수적(명시적) 룽게-쿠타 방법
양함수적(명시적) 룽게-쿠타 방법은 RK4 방법의 일반화된 형태이다. 이 방법은 다음과 같이 주어진다.[3]
:
여기서 각 는 다음과 같다.
:
특정한 방법을 지정하기 위해서는 단계의 수 ''s''와 계수 ''aij'' (1 ≤ ''i'' < ''j'' ≤ ''s''), ''bi'' (''i'' = 1, 2, ..., ''s''), ''ci'' (''i''=2, 3, ..., ''s'')가 필요하다. ''aij'' 행렬은 ''룽게-쿠타 행렬''이라고 불리며, ''bi''와 ''ci''는 각각 ''무게''와 ''마디''라고 불린다.
이 값들은 존 찰스 부처의 이름을 딴 부처 태블로라는 기억 장치에 배열된다.
:
룽게-쿠타 방법은 다음 조건을 만족하면 일관성이 있다.
:
어떤 방법이 특정 차수 ''p''를 가지려면, 즉 지역 절단 오차가 이 되도록 하려면 추가적인 요구 사항이 있다. 예를 들어, 2차 방법은 , , 를 만족해야 한다.[43]
일반적으로, s단계 명시적 룽게-쿠타 방법이 p의 차수를 가지려면 이고, 일 때는 이다. s단계 명시적 룽게-쿠타 방법이 p의 차수를 가지기 위한 최소 s 값은 다음 표와 같다.
p | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
min s | 1 | 2 | 3 | 4 | 6 | 7 | 9 | 11 |
3. 2. 1. 예시
가장 간단한 룽게-쿠타 방법은 (전방) 오일러 방법이며, 공식은 이다. 대응되는 부처 태블로는 다음과 같다.0 | |
---|---|
width="10" | 1 |
2단계 2차 방법의 예시로는 중간점 방법이 있다. 공식은 다음과 같다.
:
해당하는 부처 태블로는 다음과 같다.
0 | ||
---|---|---|
1/2 | 1/2 | |
0 | 1 |
중간점 방법은 2단계 2차 룽게-쿠타 방법의 유일한 형태는 아니다. 다음과 같은 공식으로 α로 매개변수화되는 방법들이 있다.
:
이에 대한 부처 태블로는 다음과 같다.
0 | ||
---|---|---|
이때, 는 중간점 방법을, 는 호인의 방법을,[5] 는 Ralston's method를 나타낸다.
α = 2/3인 2단계 2차 룽게-쿠타 방법은 Ralston 방법으로도 알려져 있으며, 부처 태블로는 다음과 같다.
0 | |||
---|---|---|---|
2/3 | 2/3 | ||
1/4 | 3/4 |
해당하는 방정식은 다음과 같다.
:
이 방법은 초기값 문제 를 해결하는 데 사용될 수 있다. 단계 크기 ''h'' = 0.025를 사용하면, 네 단계를 거쳐야 한다.
계산 과정은 다음과 같다.
수치 해는 밑줄 친 값에 해당한다.
RK4로 불리는 4차 룽게-쿠타 방법의 부처 태블로는 다음과 같다.[18]
0 | ||||
---|---|---|---|---|
1/2 | 1/2 | |||
1/2 | 0 | 1/2 | ||
1 | 0 | 0 | 1 | |
1/6 | 1/3 | 1/3 | 1/6 |
쿠타의 3/8 법칙의 부처 태블로는 다음과 같다.[19]
0 | ||||
---|---|---|---|---|
1/3 | 1/3 | |||
2/3 | −1/3 | 1 | ||
1 | 1 | −1 | 1 | |
1/8 | 3/8 | 3/8 | 1/8 |
3. 3. 적응적(Adaptive) 룽게-쿠타 방법
적응적(Adaptive) 방법은 단일 룽게-쿠타 방법의 지역적인 절단 오차의 추정치를 찾기 위해 고안되었다. 이는 차수가 와 인 두 가지 방법을 사용하여 수행된다. 이 방법들은 서로 얽혀 있는데, 즉 공통 중간 단계를 가지고 있다.낮은 차수의 단계는 다음과 같이 주어진다.
:
여기서 는 고차 방법과 동일하다. 그러면 오차는 다음과 같다.
:
이는 이다. 이러한 종류의 방법에 대한 부처 테이블은 의 값을 제공하도록 확장된다.
룽게-쿠타-펠베르크 방법은 차수가 5와 4인 두 가지 방법을 가지고 있다. 가장 간단한 적응적 룽게-쿠타 방법은 2차인 호인의 방법과 1차인 오일러 방법을 결합한 것이다. 오차 추정은 단계 크기를 제어하는 데 사용된다.
다른 적응적 룽게-쿠타 방법으로는 Bogacki–Shampine 방법(차수 3과 2), Cash–Karp 방법, Dormand–Prince 방법(둘 다 차수 5와 4)이 있다.
3. 4. 음함수적(Implicit) 룽게-쿠타 방법
음함수적 룽게-쿠타 방법은 명시적 방법의 불안정성 문제를 해결하기 위해 개발되었다. 특히 강성 방정식에 적합하며, 명시적 방법에 비해 안정성이 높다.[25]음함수적 룽게-쿠타 방법의 일반적인 형태는 다음과 같다.
:
여기서
:[26]
명시적 방법과 달리, ''j''에 대한 합이 ''s''까지 이루어지며, 이는 부처 테이블에서 계수 행렬 가 삼각 행렬이 아님을 의미한다.[18]
... | ||||
---|---|---|---|---|
... | ||||
... | ... | ... | ... | |
... | ||||
... | ||||
... |
행은 적응형 룽게-쿠타 방법에 해당한다.
이러한 차이로 인해 음함수적 방법은 매 단계마다 대수 방정식 시스템을 풀어야 한다.[27] 이는 계산 비용을 상당히 증가시키는데, ''s'' 단계 방법을 사용하여 ''m''개의 구성 요소가 있는 미분 방정식을 풀 경우, 대수 방정식 시스템은 ''ms''개의 구성 요소를 갖는다. 반면, 음적 선형 다단계 방법은 단계 수가 증가해도 시스템의 크기가 증가하지 않는다.[27]
4. 룽게-쿠타-뉘스트룀 방법
룽게-쿠타-뉘스트룀 방법은 2차 미분 방정식을 풀기 위해 최적화된 특수한 룽게-쿠타 방법이다.[22][23]
차수가 인 2차 상미분 방정식(ODE) 시스템에 대한 일반적인 룽게-쿠타-뉘스트룀 방법의 형태는 다음과 같다.
이는 다음과 같은 형태의 부처 테이블(Butcher tableau)로 나타낼 수 있다.
다음은 두 가지 4차 명시적 RKN 방법의 부처 테이블 예시이다.
0, 0, 0 | |
, 0, 0 | |
0, , 0 | |
, , | |
, , |
0, 0, 0 | |
, 0, 0 | |
0, , 0 | |
, , | |
, , |
이 두 방식은 원래 방정식이 보존적 고전 역학 시스템에서 파생된 경우, 즉
어떤 스칼라 함수 에 대해, 심플렉틱 보존(symplectic preserving) 속성을 갖는다.[24]
5. 안정성
Runge–Kutta영어 방법의 안정성은 A-안정성과 B-안정성으로 설명할 수 있다. 음함수적 방법은 양함수적 방법에 비해 안정성이 높다.
지금까지 언급된 모든 룽게-쿠타 방법은 명시적 방법이다. 명시적 룽게-쿠타 방법은 일반적으로 강성 방정식의 해를 구하는 데 적합하지 않은데, 절대 안정 영역이 작기 때문이다.[25] 특히 그 영역은 제한적이다. 이 문제는 특히 수치 편미분 방정식의 해를 구할 때 중요하다.
명시적 룽게-쿠타 방법의 불안정성은 음적 방법의 개발을 촉진했다. 묵시적 룽게-쿠타 방법의 가장 간단한 예는 후진 오일러 방법이다.
:
묵시적 방법은 명시적 방법에 비해 안정성이 높다.
선형 테스트 방정식 를 생각해보자. 룽게-쿠타 방법을 사용하여 이 방정식에 적용하면 이 된다. 여기서,
: [40]
는 안정성 함수라고 불린다.
룽게-쿠타 방법에 의한 위의 방정식의 수치해가 0으로 감쇠하는 조건이 () 이다. 위의 조건을 만족하는 z의 집합은 방법에 대한 '''절대 안정 영역''' (region of absolute stability) 이다. 특히, 절대 안정 영역이 왼쪽 복소수 평면을 포함할 때, 그 방법은 '''A-안정''' (A-stable) 이라고 한다. 양적 룽게-쿠타 방법은, 안정성 함수가 다항식이므로, A-안정한 방법이 될 수 없다.[49]
s 단 가우스-르장드르 방법의 차수는 앞서 언급했듯이 2s 이다. 따라서 안정성 함수의 분자와 분모는 마찬가지로 s 차 다항식이 된다. 즉, 이다. 위의 조건이 충족되므로, 가우스-르장드르 방법은 A-안정이라는 것을 알 수 있다. 따라서 임의로 높은 차수를 갖는, A-안정한 룽게-쿠타 방법이 존재한다. 이에 비해, A-안정성을 갖는 선형 다단법의 차수는 2 이하이다.[51]
이상의 내용으로부터, 음적 룽게-쿠타 방법은 양적 방법보다 뛰어난 안정성을 갖는다는 것을 알 수 있다.
A-안정성이라는 개념은 선형 자려 방정식 를 고려한 결과이다. 일반적인 테스트 방정식 와 단조성 조건 을 만족하는 f를 고려한다. 만약 모든 에 대해, 부등식 이 성립할 때, 해당 룽게-쿠타법은 '''B-안정'''이라고 한다. 여기서 과 은 각각의 초기값에 대한 수치해이다. 에 방법을 적용함으로써, B-안정성은 A-안정성보다 더 강한 조건임을 알 수 있다.
6. 활용
룽게-쿠타 방법은 과학기술 분야에서 시뮬레이션 및 수치 모델링에 널리 활용된다. 특히 공학, 물리학, 전산 유체 역학 등 다양한 분야에서 사용되고 있다.[39]
예를 들어, 고전적 룽게-쿠타 방법(RK4)은 다음과 같은 초기값 문제를 해결하는 데 사용될 수 있다.
:
여기서 ''y''(''t'')는 구하고자 하는 미지 함수이며, ''t''에서의 기울기는 ''f''(''t'', ''y'')로 주어진다. 이때, RK4 방법은 다음과 같은 공식을 통해 ''y''(''t'')의 근사값을 계산한다.
:
:
여기서 ''h''는 시간 간격을 나타낸다. 위 식에서 ''k''1, ''k''2, ''k''3, ''k''4는 각각 구간의 시작, 중간, 끝점에서의 기울기를 나타내며, 이들의 가중 평균을 통해 다음 단계의 ''y'' 값을 예측한다.
RK4는 4차 방법으로, 테일러 전개와 비교했을 때 4차 항까지 일치하며, 한 스텝의 오차는 , 전체 오차는 수준이다.[39]
이 외에도 다양한 룽게-쿠타 방법들이 존재하며, 문제의 특성과 요구되는 정확도에 따라 적절한 방법을 선택하여 활용할 수 있다. 예를 들어, 후진 오일러 방법이나 사다리꼴 공식과 같은 음적 룽게-쿠타 방법도 활용될 수 있다.
7. 알고리즘
일반적으로 사용하는 룽게-쿠타 방법은 4차 룽게-쿠타 방법으로 보통 "RK4"라고 부른다. 별다른 수식어 없이 룽게-쿠타 방법을 쓴다고 말한다면 대체로 4차 룽게-쿠타 방법을 쓴다는 뜻이다.
다음과 같이 정의된 초기값 문제를 보자.
:
여기서 y는 시간 t에 대한 미지의 함수이며, 우리가 근사하려는 값이다. y의 변화율인 는 t와 y 자신으로 이루어진 함수이고, 초기 시간 에 대응하는 y의 초기값은 이다. 함수 f와 , 의 값은 주어져 있다.
이제 h > 0 인 단계 크기(step size)를 정하고 다음을 정의한다.
:
n = 0, 1, 2, 3, ... 에 대해, 다음을 계산한다.[3]
:
여기서 은 의 RK4 근사값이며, 다음 단계의 값()은 현재 단계의 값()에 네 구간의 크기 h의 증분치들의 가중평균을 더한 값이다.
- 은 구간의 시작 부분의 기울기에 의한 증분값이며, 를 사용한다(오일러 방법).
- 는 구간의 중간 지점의 기울기에 의한 증분값이며, 을 사용한다.
- 는 마찬가지로 구간의 중간 지점의 기울기에 의한 증분값이나, 를 사용한다.
- 는 구간의 끝 지점의 기울기에 의한 증분값이며, 를 사용한다.
네 증분의 평균을 계산할 때, 중간 부분에서 더 많은 가중치를 부여한다.[5] 만약 함수 가 에 대하여 독립적이라면, 미분 방정식은 단순한 적분이 되어 RK4는 심프슨 공식이 된다.
RK4 방법은 4차 해법이다. 이는 각 단계에서의 오류는 점근 표기법으로 , 총 누적 오류는 라는 것을 의미한다.
8. 코드
cpp
// C/C++ 4차 룽게-쿠타 방법 코드
#include
#include
#include
float f(float t, float y) {
return (t * y + 1);
}
void main() {
float t0, y0, t1, y1, h, i, at, k1, k2, k3, k4;
clrscr();
printf("\n t0와 y0 값을 입력하세요:");
scanf("%f %f", &t0, &y0);
printf("\n h 값을 입력하세요:");
scanf("%f", &h);
printf("\n 최종 t 값을 입력하세요:");
scanf("%f", &at);
printf("\nt\ty");
printf("\n_______________________________________\n");
do {
k1 = h * f(t0, y0);
k2 = h * f(t0 + h / 2, y0 + k1 / 2);
k3 = h * f(t0 + h / 2, y0 + k2 / 2);
k4 = h * f(t0 + h, y0 + k3);
y1 = y0 + h / 6 * (k1 + (2 * k2) + (2 * k3) + k4);
t1 = t0 + h;
printf("\n%.4f\t%.4f", t1, y1);
t0 = t1;
y0 = y1;
} while (t0 < at);
getch();
}
```
```python
# 룽게-쿠타 4차 방법 프로그램
from math import *
def f(t, y):
return sin(y**t)
def main():
t0, y0 = input("초기 시간:"), input("초기 값:")
h = input("간격 크기:")
t = input("종료 시간:")
print("t\ty\n", '_' * 16)
while t0 < t:
k1 = f(t0, y0)
k2 = f(t0 + h / 2., y0 + (k1 * h) / 2.)
k3 = f(t0 + h / 2., y0 + (k2 * h) / 2.)
k4 = f(t0 + h, y0 + (k3 * h))
y1, t1 = y0 + h / 6. * (k1 + (2 * k2) + (2 * k3) + k4), t0 + h
print("%.4f\t%.4f" % (t1, y1))
t0, y0 = t1, y1
main()
참조
[1]
웹사이트
Runge-Kutta method
https://www.dictiona[...]
2021-04-04
[2]
서적
A first course in computational physics
Jones and Bartlett Publishers
2011
[3]
간행물
2007
[4]
간행물
1989
[5]
간행물
2003
[6]
간행물
2007
[7]
간행물
1996
[8]
간행물
1996
[9]
문서
[10]
간행물
2008
[11]
간행물
1965
[12]
간행물
1985
[13]
간행물
2008
[14]
간행물
1964
[15]
간행물
1970
[16]
간행물
1993
[17]
간행물
1996
[18]
간행물
2003
[19]
간행물
1993
[20]
간행물
2003
[21]
간행물
1991
[22]
논문
New Runge–Kutta Algorithms for Numerical Simulation in Dynamical Astronomy
1978-10
[23]
간행물
Classical seventh-, sixth-, and fifth-order Runge–Kutta–Nyström formulas with stepsize control for general second-order differential equations
National Aeronautics and Space Administration
1974-10
[24]
논문
Canonical Runge-Kutta-Nyström (RKN) methods for second order ordinary differential equations
https://dx.doi.org/1[...]
1991-01-01
[25]
간행물
2003
[26]
간행물
1996
[27]
간행물
2003
[28]
간행물
1996
[29]
간행물
1996
[30]
간행물
1996
[31]
간행물
1996
[32]
간행물
1996
[33]
간행물
1996
[34]
간행물
1996
[35]
간행물
1963
[36]
서적
1991
[37]
서적
1991
[38]
웹사이트
Appendix C. Derivation of the Numerical Integration Formulae
http://www.ss.ncu.ed[...]
Institute of Space Science, National Central University
2022-04-17
[39]
서적
2003
[40]
서적
2008
[41]
서적
1989
[42]
서적
2008
[43]
서적
2008
[44]
서적
2003
[45]
서적
数値解析 (共立講座 数学探検 17)
共立出版
2017
[46]
서적
1993
[47]
서적
2003
[48]
서적
2008
[49]
서적
2008
[50]
서적
2008
[51]
서적
1963
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com