comparison +time/Rk4SecondOrderNonlin.m @ 0:48b6fb693025

Initial commit.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 17 Sep 2015 10:12:50 +0200
parents
children 5ae4f23d9130
comparison
equal deleted inserted replaced
-1:000000000000 0:48b6fb693025
1 classdef Rk4SecondOrderNonlin < time.Timestepper
2 properties
3 F
4 k
5 t
6 w
7 m
8
9 D
10 E
11 S
12
13 n
14 end
15
16
17 methods
18 function obj = Rk4SecondOrderNonlin(D, E, S, k, t0, v0, v0t)
19
20 if S == 0
21 S = @(v,t)0;
22 end
23
24 if E == 0
25 E = @(v,t)0;
26 end
27
28 obj.k = k;
29 obj.t = t0;
30 obj.w = [v0; v0t];
31
32 m = length(v0);
33 function wt = F(w,t)
34 v = w(1:m);
35 vt = w(m+1:end);
36
37 % Def: w = [v; vt]
38 wt(1:m,1) = vt;
39 wt(m+1:2*m,1) = D(v)*v + E(v)*vt + S(v,t);
40
41 end
42
43 obj.F = @F;
44 obj.D = D;
45 obj.E = E;
46 obj.S = S;
47 obj.m = m;
48 end
49
50 function [v,t] = getV(obj)
51 v = obj.w(1:end/2);
52 t = obj.t;
53 end
54
55 function [vt,t] = getVt(obj)
56 vt = obj.w(end/2+1:end);
57 t = obj.t;
58 end
59
60 function obj = step(obj)
61 obj.w = time.rk4.rungekutta_4(obj.w, obj.t, obj.k, obj.F);
62 obj.t = obj.t + obj.k;
63 obj.n = obj.n + 1;
64 end
65 end
66
67
68 methods (Static)
69 function k = getTimeStep(lambda)
70 k = rk4.get_rk4_time_step(lambda);
71 end
72 end
73
74 end