Metoda Runge-Kutta rzędu 4 to najczęściej stosowana metoda w obliczeniach numerycznych, oparta na następującym schemacie iteracyjnym:
\(\displaystyle{ y_{i+1} = y_{i} + \frac{h}{6}\left[k_{1}+2k_{2}+2k_{3}+k_{4}\right], \ \ i=0,1,2,...,N-1 }\)
gdzie:
\(\displaystyle{ k_{1}= f(t_{i}, y_{i}), }\)
\(\displaystyle{ k_{2}= f(t_{i}+\frac{h}{2}, y_{i}+\frac{h}{2} k_{1}).}\)
\(\displaystyle{ k_{3} = f\left( t_{i} + \frac{h}{2}, y_{i}+\frac{h}{2}k_{2}\right),}\)
\(\displaystyle{ k_{4}=f(t_{i}+h, y_{i}+ hk_{3} }\)
Analiza błędów zaokrągleń oraz analiza zbieżności metody jest przeprowadzona w podręczniku
JANINA i MICHAŁ JANKOWSCY Przegląd metod i algorytmów numerycznych. Część 1.
Wydawictwa Naukowo -Techniczne Warszawa 1981.
Program w MATLAB
Kod: Zaznacz cały
function rk4(f,a,b,y0,n,rzad)
% Rozwiązanie zagadnienia początkowego y'=f(t,y), y(a)=y0 metodą Runge-Kuttarzędu 4.
fprintf('\n')
disp([' Metoda Runge-Kutta rzędu 4 '])
h=(b-a)/n;
y=y0;
if (rzad==4)
disp('________________________________________________________________________________________________')
disp(' t k1 k2 k3 k4 y dokł błąd ')
disp('________________________________________________________________________________________________')
fprintf('\n')
fprintf('%6.2f ---- ---- ---- ---- %12.6f %12.6f %4.2f\n',a,y,y,0)
for i=1:n
t=a+(i-1)*h;
k1=feval(f,t,y);
k2=feval(f,t+h/2,y+h*k1/2);
k3=feval(f,t+h/2,y+h*k2/2);
k4=feval(f,t+h,y+h*k3);
y=y+h*(k1+2*k2+2*k3+k4)/6;
t=t+h;
g=exp(-t)+2*t-2;
if (g~='n')
err=abs(g-y);
fprintf('%6.2f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %8.2e\n', t, k1, k2, k3, k4, y, g, err)
else
fprintf('%6.2f %12.6f %12.6f %12.6f %12.6f %12.6f\n',t,k1,k2, k3, k4, y)
end
end
end
Przykład
Kod: Zaznacz cały
function f=f1(t,y)
f=2*t-y;
Metoda Runge-Kutta rzędu 4
________________________________________________________________________________________________
t k1 k2 k3 k4 y dokł błąd
________________________________________________________________________________________________
0.00 ---- ---- ---- ---- -1.000000 -1.000000 0.00
0.10 1.000000 1.050000 1.047500 1.095250 -0.895162 -0.895163 8.20e-08
0.20 1.095163 1.140404 1.138142 1.181348 -0.781269 -0.781269 1.48e-07
0.30 1.181269 1.222206 1.220159 1.259253 -0.659182 -0.659182 2.01e-07
0.40 1.259182 1.296222 1.294370 1.329745 -0.529680 -0.529680 2.43e-07
0.50 1.329680 1.363196 1.361520 1.393528 -0.393469 -0.393469 2.75e-07
0.60 1.393469 1.423796 1.422279 1.451241 -0.251188 -0.251188 2.98e-07
0.70 1.451188 1.478629 1.477257 1.503462 -0.103414 -0.103415 3.15e-07
0.80 1.503414 1.528244 1.527002 1.550714 0.049329 0.049329 3.26e-07
0.90 1.550671 1.573137 1.572014 1.593469 0.206570 0.206570 3.31e-07
1.00 1.593430 1.613759 1.612742 1.632156 0.367880 0.367879 3.33e-07