# Section 8.3 - The Runge-Kutta Method

In Problem Set C #16 I have asked you to implement the Runge-Kutta method in MATLAB. Here I use my implementation, which I called rungekutta, to find a numerical solution of

rungekutta takes the same input as myeuler.

f = @(t,y) 2*y - 1;


First we use step size 0.1.

[t1,y1] = rungekutta(f, 0, 1, 0.4, 4); [t1 y1]

ans =

0    1.0000
0.1000    1.1107
0.2000    1.2459
0.3000    1.4111
0.4000    1.6128



Next we use step size 0.05.

[t2,y2] = rungekutta(f, 0, 1, 0.4, 8); [t2 y2]

ans =

0    1.0000
0.0500    1.0526
0.1000    1.1107
0.1500    1.1749
0.2000    1.2459
0.2500    1.3244
0.3000    1.4111
0.3500    1.5069
0.4000    1.6128



We will make a table of values at t = 0, 0.1,...,0.4. We will include the exact solution, which is

syms t
y = dsolve('Dy = 2*y - 1, y(0) = 1', 't')


y =

exp(2*t)/2 + 1/2



We will also include the approximate solution we had obtained with Euler's method using step size 0.025.

[ta,ya] = myeuler(f, 0, 1, 0.4, 16); ya

ya =

1.0000
1.0250
1.0513
1.0788
1.1078
1.1381
1.1700
1.2036
1.2387
1.2757
1.3144
1.3552
1.3979
1.4428
1.4900
1.5395
1.5914



Here is the table. The first column is t, the second ya, the third y1, the fourth y2 and the last y.

T = [ ]
for k = 0:4
digits(9)
A = [vpa(t1(k+1)),vpa(ya(4*k+1)),vpa(y1(k+1)),vpa(y2(2*k+1)),vpa(subs(y,'t',t1(k+1)))];
T = [T;A];
end
T

T =

[]

T =

[   0,        1.0,        1.0,        1.0,        1.0]
[ 0.1, 1.10775312,     1.1107, 1.11070129, 1.11070138]
[ 0.2, 1.23872772, 1.24590898, 1.24591212, 1.24591235]
[ 0.3, 1.39792816, 1.41105323, 1.41105898,  1.4110594]
[ 0.4, 1.59143729, 1.61276041, 1.61276978, 1.61277046]



We see that with step size 0.1 the Runge-Kutta method gives errors that are less than 1.01*10^(-5). With step size 0.05 it gives errors that are less than 10^(-6). With step size 0.025, Euler's method gives an error greater than 0.02 at t=0.4.