0
|
1 % Takes one time step of size k using the rungekutta method
|
|
2 % starting from v_0 and where the function F(v,t) gives the
|
|
3 % time derivatives.
|
|
4 function v = rungekutta_6(v, t , k, F)
|
|
5 s = 7
|
|
6 k = zeros(length(v),s)
|
|
7 a = zeros(7,6);
|
|
8 c = [0, 4/7, 5/7, 6/7, (5-sqrt(5))/10, (5+sqrt(5))/10, 1];
|
|
9 b = [1/12, 0, 0, 0, 5/12, 5/12, 1/12];
|
|
10 a = [
|
|
11 0, 0, 0, 0, 0, 0;
|
|
12 4/7, 0, 0, 0, 0, 0;
|
|
13 115/112, -5/16, 0, 0, 0, 0;
|
|
14 589/630, 5/18, -16/45, 0, 0, 0;
|
|
15 229/1200 - 29/6000*sqrt(5), 119/240 - 187/1200*sqrt(5), -14/75 + 34/375*sqrt(5), -3/100*sqrt(5), 0, 0;
|
|
16 71/2400 - 587/12000*sqrt(5), 187/480 - 391/2400*sqrt(5), -38/75 + 26/375*sqrt(5), 27/80 - 3/400*sqrt(5), (1+sqrt(5))/4, 0;
|
|
17 -49/480 + 43/160*sqrt(5), -425/96 + 51/32*sqrt(5), 52/15 - 4/5*sqrt(5), -27/16 + 3/16*sqrt(5), 5/4 - 3/4*sqrt(5), 5/2 - 1/2*sqrt(5);
|
|
18 ]
|
|
19
|
|
20 for i = 1:s
|
|
21 u = v
|
|
22 for j = 1: i-1
|
|
23 u = u + h*a(i,j) * k(:,j)
|
|
24 end
|
|
25 k(:,i) = F(t+c(i)*k,u)
|
|
26 end
|
|
27
|
|
28 for i = 1:s
|
|
29 v = v + k*b(i)*k(:,i)
|
|
30 end
|
|
31 end
|