Mercurial > repos > public > sbplib
comparison +time/Rungekutta4.m @ 983:b89379fb0814 feature/timesteppers
Convert Rungekutta4 to take F(t,y) instead of a matrix
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 08 Jan 2019 12:07:57 +0100 |
parents | f5e14e5986b5 |
children | 0585a2ee7ee7 |
comparison
equal
deleted
inserted
replaced
979:7a5e770974ed | 983:b89379fb0814 |
---|---|
1 classdef Rungekutta4 < time.Timestepper | 1 classdef Rungekutta4 < time.Timestepper |
2 properties | 2 properties |
3 D | |
4 S | |
5 F | 3 F |
6 k | 4 dt |
7 t | 5 t |
8 v | 6 v |
9 m | |
10 n | 7 n |
11 end | 8 end |
12 | 9 |
13 | 10 |
14 methods | 11 methods |
15 function obj = Rungekutta4(D, S, k, t0, v0) | 12 % Create a time stepper for |
16 obj.D = D; | 13 % v_t = F(t,v), v(t0) = v0 |
17 obj.k = k; | 14 % with step size dt. |
15 function obj = Rungekutta4(F, dt, t0, v0) | |
16 obj.F = F; | |
17 obj.dt = dt; | |
18 obj.t = t0; | 18 obj.t = t0; |
19 obj.v = v0; | 19 obj.v = v0; |
20 obj.m = length(v0); | |
21 obj.n = 0; | 20 obj.n = 0; |
22 | |
23 if S == 0 | |
24 obj.S = zeros(obj.m,1); | |
25 else | |
26 obj.S = S; | |
27 end | |
28 | |
29 if S == 0 | |
30 obj.F = @(v,t)(obj.D*v); | |
31 else | |
32 obj.F = @(v,t)(obj.D*v + obj.S); | |
33 end | |
34 end | 21 end |
35 | 22 |
36 function [v,t] = getV(obj) | 23 function [v,t] = getV(obj) |
37 v = obj.v; | 24 v = obj.v; |
38 t = obj.t; | 25 t = obj.t; |
39 end | 26 end |
40 | 27 |
41 function obj = step(obj) | 28 function obj = step(obj) |
42 obj.v = time.rk.rungekutta_4(obj.v, obj.t, obj.k, obj.F); | 29 obj.v = time.rk.rungekutta_4(obj.v, obj.t, obj.dt, obj.F); |
43 obj.t = obj.t + obj.k; | 30 obj.t = obj.t + obj.dt; |
44 obj.n = obj.n + 1; | 31 obj.n = obj.n + 1; |
45 end | 32 end |
46 end | 33 end |
47 | 34 |
48 | |
49 methods (Static) | 35 methods (Static) |
50 function k = getTimeStep(lambda) | 36 function dt = getTimeStep(lambda) |
51 k = rk4.get_rk4_time_step(lambda); | 37 dt = rk4.get_rk4_time_step(lambda); |
52 end | 38 end |
53 end | 39 end |
54 | |
55 end | 40 end |