Mercurial > repos > public > sbplib
annotate +time/Ode45.m @ 1113:47e86b5270ad feature/timesteppers
Change name of property k to dt in time.Timestepper
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 10 Apr 2019 22:40:55 +0200 |
parents | f5e14e5986b5 |
children |
rev | line source |
---|---|
0 | 1 classdef Ode45 < time.Timestepper |
2 properties | |
3 F | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
4 dt |
0 | 5 t |
6 w | |
7 m | |
8 D | |
9 E | |
10 S | |
11 M | |
12 C | |
13 n | |
14 end | |
15 | |
16 | |
17 methods | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
18 function obj = Ode45(D, E, S, dt, t0, v0, v0t) |
0 | 19 obj.D = D; |
20 obj.E = E; | |
21 obj.S = S; | |
22 obj.m = length(v0); | |
23 | |
24 I = speye(obj.m); | |
25 O = sparse(obj.m,obj.m); | |
26 obj.M = [O, I; D, E*I]; % Multiply with I to allow 0 as input. | |
27 | |
28 if S == 0 | |
29 obj.C = zeros(2*obj.m,1); | |
30 else | |
31 obj.C = [zeros(obj.m,1), S]; | |
32 end | |
33 | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
34 obj.dt = dt; |
0 | 35 obj.t = t0; |
36 obj.w = [v0; v0t]; | |
37 | |
38 obj.F = @(w,t)(obj.M*w + obj.C); | |
39 end | |
40 | |
41 function [v,t] = getV(obj) | |
42 v = obj.w(1:end/2); | |
43 t = obj.t; | |
44 end | |
45 | |
46 function [vt,t] = getVt(obj) | |
47 vt = obj.w(end/2+1:end); | |
48 t = obj.t; | |
49 end | |
50 | |
51 function obj = step(obj) | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
52 [t,w] = ode45(@(t,w)(obj.F(w,t)),[obj.t obj.t+obj.dt],obj.w); |
0 | 53 |
54 obj.t = t(end); | |
55 obj.w = w(end,:)'; | |
56 obj.n = obj.n + 1; | |
57 end | |
58 end | |
59 | |
60 | |
61 methods (Static) | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
62 function dt = getTimeStep(lambda) |
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
889
diff
changeset
|
63 dt = rk4.get_rk4_time_step(lambda); |
0 | 64 end |
65 end | |
66 | |
67 end |