네 증분을 평균을 낼 때, 중간 부분에서 더 많은 무게의 증분이 더해진다. 만약 함수 가 에 대하여 독립적이라면, 미분방정식은 단순한 적분이 되어 RK4는 심프슨 공식이 된다.
일반적인 미분방정식에서 RK4 방법과 다른 낮은 차원의 방법을 비교한 것이다.
RK4 방법은 4차 해법이다. 이는 각 단계에서의 오류는 점근 표기법으로 , 총 누적 오류는 라는 것을 의미한다.
양함수적(명시적) 룽게 - 쿠타 방법
양함수적(명시적, explicit) 룽게-쿠타 방법은 위에서 설명된 RK4 방법의 일반화이다. 이것은 다음과 같이 주어진다.
이때 각 는 다음과 같다.
특정한 방법을 지정하기 위해서는, 정수 s (각 단계들의 수) 가 주어져야 하고, 각각의 계수들 aij (1 ≤ i < j ≤ s), bi (i = 1, 2, ..., s), ci (i=2, 3, ..., s) 가 필요하다. 행렬 [aij]는 룽게-쿠타 행렬이며, bi 와ci 는 알려져 있듯이 무게 와 마디이다.
이 값들은 부처 태블로(Butcher tableau)이라는 기억장치 내에서 배열되어있다. 존 찰스 부처의 이름을 딴 것이다.
룽게-쿠타 방법은 다음을 만족할 때 일관성이 있다.
만약 하나가 특정 차수 p,즉 지역 절단 오차가 이 되도록 이 방법이 요구되면 거기에는 또한 부수적인 요구사항이 있다. 이것은 절단오차의 정의에 의해서 나타난다. 예를 들어 2차 방법은 , , 일 때 차수가 2이다.
일반적으로, s단계의 explicit 룽게-쿠타 방법이 p의 차수를 가진다면, 이고, 만약 일 때는 이다. s단계 explicit 룽게-쿠타 방법이 열린문제에서 p의 차수를 가지기 위해서는 최소한의 s가 필요하다. 몇 개의 알려진 값들은 다음과 같다.
예시
RK4는 이 방법에 맞아들어가며, 그 테이블은 다음과 같다.
이 룽게-쿠타 방법에서의 약간의 변형을 준 방법은 쿠타에 의해서 연구되었고 3/8법칙 이라고 불린다. 이 방법의 가장 큰 장점은 다른 일반적인 방법들보다 오차계수가 작은 것이나, 이 방법은 매 단계마다 조금 더 많은 FLOP(부동소수점 연산)들이 필요하다. 그 Butcher 테이블은 다음과 같다.
그러나, 가장 간단한 룽게-쿠타 방법은 (전방)오일러 방법이다. 공식은 이다. 이것은 오직 한 단계 뿐인 explicit 룽게-쿠타 방법이다. 대응되는 테이블은 다음과 같다.
위에서 언급된 모든 룽게-쿠타 방법들은 모두 explict 방법들이다. explict 룽게-쿠타 방법은 일반적으로 stiff equation에는 맞지 않는다. 왜냐하면 그들의 절대적인 안정성의 범위가 작기 때문이다; 특히, 그 식들은 한정되어 있다. 이 문제는 편미분방정식의 솔루션에서 특히 중요하다.
explict 룽게-쿠타 방법의 불안정성은 음함수적(암시적, implicit)한 방법을 만들게 되었다. implicit 룽게-쿠타 방법은 다음의 형태를 가진다.
이 때,
explict 방법간의 차이는 explict 방법은 시그마의 위에 i - 1이 들어간다는 것이다. 이것은 Butcher 테이블에서도 나타난다: explict 방법의 계수들의 행렬은 하 삼각 행렬이다. implicit 방법은 시그마 위에 s가 올라가고 계수들의 행렬은 다음과 같이 삼각행렬이 아니다.
이 차이는 매 단계마다, 대수적인 방정식의 시스템을 풀어야 한다는 점이다. 이것은 계산비용을 상당히 증가시킨다. m개의 성분이 있는 미분방정식을 s단계의 방법을 사용하면 대수적인 방정식은 ms개의 성분이 있다.이것은 implict한 선형 다단계 방법(ODE들의 다른 방법)과 대조된다: implicit한 s단계의 선형 다단계 방법은 m개의 성분을 가진 방정식을 풀기 위해서 단계수가 늘어나도 시스템의 크기가 늘어나지 않는다
다른 implicit 룽게-쿠타 방법의 예는 사다리꼴 법칙이다. 그 Butcher 테이블은 다음과 같다.
사다리꼴 법칙은 배열 방법이다. 모든 배열 방법들은 모두 implicit 룽게-쿠타 방법이지만 모든 implicit룽게-쿠타 방법은 배열 방법이 아니다.
Gauss-Legendre 방법은 가우스 구적법에 기반한 배열 방법이다. s단계의 Gauss-Legendre 방법은 차수가 2s이다(따라서 임의의 높은 차수의 방법들이 구성될 수 있다).두 단계의 방법(차수는 4이다)의 Buther 테이블은 다음과 같다:
안정도
explicit한 룽게-쿠타 방법에 비교하여 implicit 방법의 장점은 안정도가 특히 딱딱한 방정식에서 높다는 것이다. 다음의 선형 방정식 y'=λy를 고려해 보자. 룽게-쿠타 방법을 가용하면 이 식은 다음의 반복으로 줄며, r은 다음과 같다.
여기서 e는 1들의 벡터를 나타낸다. 함수 r은 안정도 함수라고 불린다. 만약 이 방법이 s단계라면 r은 차수 s의 두 다항식의 몫의 형태를 띈다. explicit 방법은 순상삼각행렬인 행렬 A를 가진다. 이것은 det(I-zA) = 1이라는 것을 의미하며 그 안정도 함수는 다항함수이다.
위의 선형방정식은 이고 일 때, 수치적 해법은 0이 된다. 이런z들의 집합은 절대 안정성의 영역이라고 부른다. 특히 이 방법은 모든 실수부가 음인 z가 절대 안정성의 영역 안에 있을 때 A-안정하다고 불린다. explicit 룽게-쿠타 방법의 안정도 함수는 다항함수이기 때문에 explicit 룽게 쿠타 방법은 A-안정할 수 없다.
알고리즘
코드
C/C++ 코드
//C/C++ code of 4th order Runge-Kutta method#include<stdio.h>#include<conio.h>#include<math.h>floatf(floatt,floaty){return(t*y+1);}voidmain(){floatt0,y0,t1,y1,h,i,at,k1,k2,k3,k4;clrscr();printf("\n Enter Value Of t0 and y0");scanf("%f %f",&t0,&y0);printf("\n Enter Value of h");scanf("%f",&h);printf("\n Enter Final Value of 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
# Program Of Runge-Kutta 4th Orderfrommathimport*deff(t,y):returnsin(y**t)defrunge_kutta():t0,y0=float(input("initial time:")),float(input("initial value:"))h=float(input("interval size:"))t=float(input("terminal time:"))print("t y")print("______________")whilet0<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+hprint(f"{t1:5.4f}, {y1:5.4f}")t0,y0=t1,y1if__name__=="__main__":runge_kutta()
Tracker Component Library Implementation in Matlab — Implements 32 embedded Runge Kutta algorithms in RungeKStep, 24 embedded Runge-Kutta Nyström algorithms in RungeKNystroemSStep and 4 general Runge-Kutta Nyström algorithms in RungeKNystroemGStep.