0
|
1 classdef Rungekutta4 < time.Timestepper
|
|
2 properties
|
|
3 D
|
|
4 S
|
|
5 F
|
|
6 k
|
|
7 t
|
|
8 v
|
|
9 m
|
|
10 n
|
|
11 end
|
|
12
|
|
13
|
|
14 methods
|
|
15 function obj = Rungekutta4(D, S, k, t0, v0)
|
|
16 obj.D = D;
|
|
17 obj.k = k;
|
|
18 obj.t = t0;
|
|
19 obj.v = v0;
|
|
20 obj.m = length(v0);
|
|
21
|
|
22 if S == 0
|
|
23 obj.S = zeros(obj.m,1);
|
|
24 else
|
|
25 obj.S = S;
|
|
26 end
|
|
27
|
|
28 obj.F = @(v,t)(obj.D*v + obj.S);
|
|
29 end
|
|
30
|
|
31 function [v,t] = getV(obj)
|
|
32 v = obj.v;
|
|
33 t = obj.t;
|
|
34 end
|
|
35
|
|
36 function obj = step(obj)
|
|
37 obj.v = time.rk4.rungekutta_4(obj.v, obj.t, obj.k, obj.F);
|
|
38 obj.t = obj.t + obj.k;
|
|
39 obj.n = obj.n + 1;
|
|
40 end
|
|
41 end
|
|
42
|
|
43
|
|
44 methods (Static)
|
|
45 function k = getTimeStep(lambda)
|
|
46 k = rk4.get_rk4_time_step(lambda);
|
|
47 end
|
|
48 end
|
|
49
|
|
50 end |