Mercurial > repos > public > sbplib
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 |