0
|
1 classdef Timestepper < handle
|
|
2 properties (Abstract)
|
|
3 t
|
|
4 k
|
|
5 n
|
|
6 end
|
|
7
|
|
8 methods (Abstract)
|
|
9 [v,t] = getV(obj)
|
|
10 obj = step(obj)
|
|
11 end
|
|
12
|
|
13
|
|
14 methods
|
|
15 function [v,t] = stepN(obj,n,progress_bar)
|
|
16
|
|
17 if progress_bar && n > 1500
|
|
18 n1000 = floor(n/1000);
|
|
19
|
|
20 s = util.replace_string('',' %d %%',0);
|
|
21 for i=1:n
|
|
22 obj.step();
|
|
23 if mod(i,n1000) == 0
|
|
24 s = util.replace_string(s,' %.2f %%',i/n*100);
|
|
25 end
|
|
26 end
|
|
27 s = util.replace_string(s,'');
|
|
28 else
|
|
29 for i=1:n
|
|
30 obj.step();
|
|
31 end
|
|
32 end
|
|
33 v = obj.getV;
|
|
34 t = obj.t;
|
|
35 end
|
|
36
|
|
37 function [v,t] = evolve(obj, tend, progress_bar)
|
|
38 default_arg('progress_bar',false)
|
|
39 if progress_bar
|
|
40 obj.evolve_with_progress(tend);
|
|
41 else
|
|
42 obj.evolve_without_progress(tend);
|
|
43 end
|
|
44 v = obj.getV;
|
|
45 t = obj.t;
|
|
46 end
|
|
47
|
|
48 function evolve_with_progress(obj, tend)
|
|
49 dt = tend-obj.t;
|
|
50 n = floor(dt/obj.k);
|
|
51 n1000 = floor(n/1000);
|
|
52
|
|
53 i = 0;
|
|
54 s = util.replace_string('',' %d %%',0);
|
|
55 while obj.t < tend - obj.k/100
|
|
56 obj.step();
|
|
57
|
|
58 i = i + 1;
|
|
59 if mod(i,n1000) == 0
|
|
60 s = util.replace_string(s,' %.2f %%',i/n*100);
|
|
61 end
|
|
62 end
|
|
63
|
|
64 % if t < tend
|
|
65 % v = rk4.rungekutta_4(v, t, tend-t,F);
|
|
66 % end
|
|
67
|
|
68 s = util.replace_string(s,'');
|
|
69 end
|
|
70
|
|
71 function evolve_without_progress(obj, tend)
|
|
72 while obj.t < tend - obj.k/100
|
|
73 obj.step();
|
|
74 end
|
|
75
|
|
76 % if t < tend
|
|
77 % v = rk4.rungekutta_4(v, t, tend-t,F);
|
|
78 % end
|
|
79 end
|
|
80 end
|
|
81 end |