수치 해석에서 **룽게-쿠타 방법**은 적분 방정식 중 초기값 문제를 푸는 방법 중 하나이다.

## 역사
1900년 경 독일의 수학자 카를 룽게와 마르틴 빌헬름 쿠타가 개발하였다.

## 일반적인 4차 룽게-쿠타 방법
일반적으로 사용하는 룽게-쿠타 방법은 4차 룽게-쿠타 방법으로 보통 "RK4" 라고 쓴다. 별다른 수식어 없이 룽게-쿠타 방법을 쓴다고 말한다면 대체로 4차 룽게-쿠타 방법을 쓴다는 뜻이다.

다음과 같이 정의된 초기값 문제를 두자:

y는 시간 t에 대한 미지의 함수이며, 우리가 근사하려는 것이다. y의 변화인 의 값은 주어져 있다.

이제 h > 0 인 단계 크기로 다음을 정의한다.

y_{n+1} &= y_n + \tfrac{1}{6}h\left(k_1 + 2k_2 + 2k_3 + k_4 \right) \\
t_{n+1} &= t_n + h \\
\end{align}

여기서 y
y+\frac{h}{2}k_1
y+\frac{h}{2}k_2
y+h k_3
를 사용한다.
네 증분을 평균을 낼 때, 중간 부분에서 더 많은 무게의 증분이 더해진다. 만약 함수 y
에 대하여 독립적이라면, 미분방정식은 단순한 적분이 되어 RK4는 심프슨 공식이 된다.
RK4 방법은 4차 해법이다. 이는 각 단계에서의 오류는 점근 표기법으로 라는 것을 의미한다.

## 양함수적(명시적) 룽게 - 쿠타 방법
양함수적 룽게-쿠타 방법은 위에서 설명된 RK4 방법의 일반화이다. 이것은 다음과 같이 주어진다.

이때 각 는 다음과 같다.

k_1&=f,\\
k_2&=f(t_n+c_2h,y_n+h(a_{21}k_1)),\\
k_3&=f(t_n+c_3h,y_n+h(a_{31}k_1+a_{32}k_2)),\\
&\cdots\\
k_s&=f(t_n+c_sh,y_n+h).
\end{align}

특정한 방법을 지정하기 위해서는, 정수 ''s'' (각 단계들의 수) 가 주어져야 하고, 각각의 계수들 ''a

룽게-쿠타 방법은 다음을 만족할 때 일관성이 있다.

만약 하나가 특정 차수 ''p'',즉 지역 절단 오차가 b_1+b_2=1
a_{21}=c_2
 일 때 차수가 2이다.

일반적으로, s단계의 explicit 룽게-쿠타 방법이 p의 차수를 가진다면, p\geq 5
이다. s단계 explicit 룽게-쿠타 방법이 열린문제에서 p의 차수를 가지기 위해서는 최소한의 s가 필요하다. 몇 개의 알려진 값들은 다음과 같다.

이 룽게-쿠타 방법에서의 약간의 변형을 준 방법은 쿠타에 의해서 연구되었고 3/8법칙 이라고 불린다. 이 방법의 가장 큰 장점은 다른 일반적인 방법들보다 오차계수가 작은 것이나, 이 방법은 매 단계마다 조금 더 많은 FLOP(부동소수점 연산)들이 필요하다. 그 Butcher 테이블은 다음과 같다.

그러나, 가장 간단한 룽게-쿠타 방법은 (전방)오일러 방법이다. 공식은 이다. 이것은 오직 한 단계 뿐인 explicit 룽게-쿠타 방법이다. 대응되는 테이블은 다음과 같다.

### 두 단계의 이차 방법들
간단한 예로 두 단계의 2차 방법인 중간점 방법을 보면 다음과 같다.

대응되는 테이블은 다음과 같다.

두 단계의 2차 룽게-쿠타 방법은 중간점 방법 밖에 없는 것은 아니다. 이런 종류의 방법은 α에 의해 다음과 같이 매개변수화되어 있다.

그 Butcher 테이블은 다음과 같다.

이 때 
수치해석적 결과는 밑줄친 값들이다.

## 적응적(Adaptive) 룽게 - 쿠타 방법
Adaptive한 방법은 단일 룽게-쿠타 방법의 지역적인 절단 오차의 추정치를 찾기 위해 고안되었다. 이것은 테이블에서 차수가 인 두 방법들을 가져서 이루어졌다.

낮은 차수의 단계는 다음과 같이 주어진다.

가 높은 차원의 방법에서도 같다면 오차는 다음과 같다.

오차는 

이 차이는 매 단계마다, 대수적인 방정식의 시스템을 풀어야 한다는 점이다. 이것은 계산비용을 상당히 증가시킨다. ''m''개의 성분이 있는 미분방정식을 ''s''단계의 방법을 사용하면 대수적인 방정식은 ''ms''개의 성분이 있다.이것은 implict한 선형 다단계 방법(ODE들의 다른 방법)과 대조된다: implicit한 ''s''단계의 선형 다단계 방법은 ''m''개의 성분을 가진 방정식을 풀기 위해서 단계수가 늘어나도 시스템의 크기가 늘어나지 않는다

### 예시
가장 간단한 implicit 룽게-쿠타 방법은 역 오일러 방법이다:

Butcher 테이블은 다음과 같다.

이 Butcher 테이블에 대응하는 식은 다음과 같다.

이것은 위에서 나온 역 오일러 방법의 형태로 바꿀 수 있다.

다른 implicit 룽게-쿠타 방법의 예는 사다리꼴 법칙이다. 그 Butcher 테이블은 다음과 같다.

사다리꼴 법칙은 배열 방법이다. 모든 배열 방법들은 모두 implicit 룽게-쿠타 방법이지만 모든 implicit룽게-쿠타 방법은 배열 방법이 아니다.
Gauss-Legendre 방법은 가우스 구적법에 기반한 배열 방법이다. ''s''단계의 Gauss-Legendre 방법은 차수가 2''s''이다(따라서 임의의 높은 차수의 방법들이 구성될 수 있다).두 단계의 방법(차수는 4이다)의 Buther 테이블은 다음과 같다:

### 안정도
explicit한 룽게-쿠타 방법에 비교하여 implicit 방법의 장점은 안정도가 특히 딱딱한 방정식에서 높다는 것이다. 다음의 선형 방정식 ''y**=λ''y''를 고려해 보자. 룽게-쿠타 방법을 가용하면 이 식은 다음의 반복으로 줄며, ''r''은 다음과 같다.

여기서 ''e''는 1들의 벡터를 나타낸다. 함수 ''r''은 ''안정도 함수''라고 불린다. 만약 이 방법이 ''s''단계라면 ''r''은 차수 ''s''의 두 다항식의 몫의 형태를 띈다. explicit 방법은 순상삼각행렬인 행렬 ''A''를 가진다. 이것은 det(''I''-''zA'') = 1이라는 것을 의미하며 그 안정도 함수는 다항함수이다.

위의 선형방정식은 
from math import *

def f:
 return sin(y**t)
def main:
 t0,y0=input("initial time:"),input("initial value:")
 h=input("interval size:")
 t=input("terminal time:")
 print"t\ty\n",'_'*16
 while t0<t:
 k1=f
 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"%
 t0,y0=t1,y1
main