Mercurial > repos > public > sbplib
changeset 983:b89379fb0814 feature/timesteppers
Convert Rungekutta4 to take F(t,y) instead of a matrix
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 08 Jan 2019 12:07:57 +0100 |
parents | 7a5e770974ed |
children | 0585a2ee7ee7 |
files | +time/Rungekutta4.m |
diffstat | 1 files changed, 11 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
diff -r 7a5e770974ed -r b89379fb0814 +time/Rungekutta4.m --- a/+time/Rungekutta4.m Mon Jan 07 16:26:00 2019 +0100 +++ b/+time/Rungekutta4.m Tue Jan 08 12:07:57 2019 +0100 @@ -1,36 +1,23 @@ classdef Rungekutta4 < time.Timestepper properties - D - S F - k + dt t v - m n end methods - function obj = Rungekutta4(D, S, k, t0, v0) - obj.D = D; - obj.k = k; + % Create a time stepper for + % v_t = F(t,v), v(t0) = v0 + % with step size dt. + function obj = Rungekutta4(F, dt, t0, v0) + obj.F = F; + obj.dt = dt; obj.t = t0; obj.v = v0; - obj.m = length(v0); obj.n = 0; - - if S == 0 - obj.S = zeros(obj.m,1); - else - obj.S = S; - end - - if S == 0 - obj.F = @(v,t)(obj.D*v); - else - obj.F = @(v,t)(obj.D*v + obj.S); - end end function [v,t] = getV(obj) @@ -39,17 +26,15 @@ end function obj = step(obj) - obj.v = time.rk.rungekutta_4(obj.v, obj.t, obj.k, obj.F); - obj.t = obj.t + obj.k; + obj.v = time.rk.rungekutta_4(obj.v, obj.t, obj.dt, obj.F); + obj.t = obj.t + obj.dt; obj.n = obj.n + 1; end end - methods (Static) - function k = getTimeStep(lambda) - k = rk4.get_rk4_time_step(lambda); + function dt = getTimeStep(lambda) + dt = rk4.get_rk4_time_step(lambda); end end - end \ No newline at end of file