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 |
