annotate +time/Rungekutta4SecondOrder.m @ 1114:f2988a63c3aa feature/timesteppers

Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 10 Apr 2019 23:10:13 +0200
parents a99f00896b8e
children
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 Rungekutta4SecondOrder < 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
985
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
4 dt
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
5 t, n
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
6 v, v_t
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 methods
985
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
11 % Create a time stepper for
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
12 % v_tt = F(t,v,v_t), v(t0) = v0, v_t(t0) = v0t
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
13 % with step size dt, by rewriting on first order form
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
14 function obj = Rungekutta4SecondOrder(F, dt, t0, v0, v0t)
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
15 obj.F = F;
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
16 obj.dt = dt;
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
17 obj.t = t0;
13
b18d3d201a71 Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
18 obj.n = 0;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
20 obj.v = v0;
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
21 obj.v_t = v0t;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 function [v,t] = getV(obj)
1114
f2988a63c3aa Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents: 991
diff changeset
25 v = obj.v;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 function [vt,t] = getVt(obj)
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
30 vt = obj.v_t;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 function obj = step(obj)
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
35 t = obj.t;
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
36 v = obj.v;
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
37 v_t = obj.v_t;
985
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
38 dt = obj.dt;
984
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
39
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
40 k1 = obj.F(t, v, v_t);
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
41 k2 = obj.F(t + 1/2*dt, v + 1/2*dt*v_t, v_t + 1/2*dt*k1);
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
42 k3 = obj.F(t + 1/2*dt, v + 1/2*dt*v_t + 1/4*dt^2*k1, v_t + 1/2*dt*k2);
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
43 k4 = obj.F(t + dt, v + dt*v_t + 1/2*dt^2*k2, v_t + dt*k3);
984
0585a2ee7ee7 Inline the rk.rungekutta_4 function.
Jonatan Werpers <jonatan@werpers.com>
parents: 889
diff changeset
44
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
45 obj.v = v + dt*v_t + dt^2*(1/6)*(k1 + k2 + k3);
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
46 obj.v_t = v_t + dt*(1/6)*(k1 + 2*k2 + 2*k3 + k4);
985
ad6de007e7f6 Convert Rungekutta4SecondOrder to take F(t,v,v_t) instead of matrices
Jonatan Werpers <jonatan@werpers.com>
parents: 984
diff changeset
47 obj.t = obj.t + obj.dt;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 obj.n = obj.n + 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 methods (Static)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 function k = getTimeStep(lambda)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 k = rk4.get_rk4_time_step(lambda);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 end
991
a99f00896b8e Make Rungekutta4SecondOrder native second order
Jonatan Werpers <jonatan@werpers.com>
parents: 985
diff changeset
57 end