annotate +time/Rungekutta4.m @ 984:0585a2ee7ee7 feature/timesteppers

Inline the rk.rungekutta_4 function.
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 08 Jan 2019 12:19:33 +0100
parents b89379fb0814
children a99f00896b8e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 classdef Rungekutta4 < time.Timestepper
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 F
983
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
4 dt
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 t
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 v
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 methods
983
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
12 % Create a time stepper for
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
13 % v_t = F(t,v), v(t0) = v0
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
14 % with step size dt.
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
15 function obj = Rungekutta4(F, dt, t0, v0)
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
16 obj.F = F;
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
17 obj.dt = dt;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 obj.t = t0;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 obj.v = v0;
13
b18d3d201a71 Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
20 obj.n = 0;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 function [v,t] = getV(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 v = obj.v;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 function obj = step(obj)
984
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
29 v = obj.v;
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
30 dt = obj.dt;
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
31
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
32 k1 = obj.F(t, v);
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
33 k2 = obj.F(t + 0.5*dt, v + 0.5*dt*k1);
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
34 k3 = obj.F(t + 0.5*dt, v + 0.5*dt*k2);
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
35 k4 = obj.F(t + dt, v + dt*k3);
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
36
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 983
diff changeset
37 obj.v = v + dt*(1/6)*(k1+2*(k2+k3)+k4);
983
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
38 obj.t = obj.t + obj.dt;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 obj.n = obj.n + 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 methods (Static)
983
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
44 function dt = getTimeStep(lambda)
b89379fb0814 Convert Rungekutta4 to take F(t,y) instead of a matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
45 dt = rk4.get_rk4_time_step(lambda);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 end