0
|
1 classdef Cdiff < time.Timestepper
|
|
2 properties
|
|
3 D
|
|
4 E
|
|
5 S
|
|
6 k
|
|
7 t
|
|
8 v
|
|
9 v_prev
|
|
10 n
|
|
11 end
|
|
12
|
|
13
|
|
14 methods
|
|
15 function obj = Cdiff(D, E, S, k, t0, v, v_prev)
|
|
16 m = size(D,1);
|
|
17 default_arg('E',sparse(m,m));
|
|
18 default_arg('S',sparse(m,1));
|
|
19
|
|
20 if ~(issparse(D) && issparse(E) && issparse(S))
|
|
21 warning('One of the matrices D, E, S is not sparse!')
|
|
22 print_issparse(D)
|
|
23 print_issparse(E)
|
|
24 print_issparse(S)
|
|
25 end
|
|
26
|
|
27 obj.D = D;
|
|
28 obj.E = E;
|
|
29 obj.S = S;
|
|
30 obj.k = k;
|
|
31 obj.t = t0+k;
|
|
32 obj.v = v;
|
|
33 obj.v_prev = v_prev;
|
|
34 end
|
|
35
|
|
36 function [v,t] = getV(obj)
|
|
37 v = obj.v;
|
|
38 t = obj.t;
|
|
39 end
|
|
40
|
|
41 function [vt,t] = getVt(obj)
|
|
42 vt = (obj.v-obj.v_prev)/obj.k; % Could be improved using u_tt = f(u))
|
|
43 t = obj.t;
|
|
44 end
|
|
45
|
|
46 function obj = step(obj)
|
|
47 [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D, obj.E, obj.S);
|
|
48 obj.t = obj.t + obj.k;
|
|
49 obj.n = obj.n + 1;
|
|
50 end
|
|
51 end
|
|
52 end |