Mercurial > repos > public > sbplib
comparison +time/Rungekutta4SecondOrder.m @ 425:e56dbd9e4196 feature/grids
Merge feature/beams
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 07 Feb 2017 16:09:02 +0100 |
parents | 7b5ef8b89268 |
children | ae905a11e32c |
comparison
equal
deleted
inserted
replaced
423:a2cb0d4f4a02 | 425:e56dbd9e4196 |
---|---|
13 n | 13 n |
14 end | 14 end |
15 | 15 |
16 | 16 |
17 methods | 17 methods |
18 % Solves u_tt = Du + Eu_t + S | |
19 % D, E, S can either all be constants or all be function handles, | |
20 % They can also be omitted by setting them equal to the empty matrix. | |
18 function obj = Rungekutta4SecondOrder(D, E, S, k, t0, v0, v0t) | 21 function obj = Rungekutta4SecondOrder(D, E, S, k, t0, v0, v0t) |
19 obj.D = D; | 22 obj.D = D; |
20 obj.E = E; | 23 obj.E = E; |
21 obj.S = S; | 24 obj.S = S; |
22 obj.m = length(v0); | 25 obj.m = length(v0); |
23 obj.n = 0; | 26 obj.n = 0; |
24 | 27 |
25 I = speye(obj.m); | |
26 O = sparse(obj.m,obj.m); | |
27 obj.M = [O, I; D, E*I]; % Multiply with I to allow 0 as input. | |
28 | 28 |
29 if S == 0 | 29 if isa(D, 'function_handle') || isa(E, 'function_handle') || isa(S, 'function_handle') |
30 obj.C = zeros(2*obj.m,1); | 30 default_arg('D', @(t)sparse(obj.m, obj.m)); |
31 default_arg('E', @(t)sparse(obj.m, obj.m)); | |
32 default_arg('S', @(t)sparse(obj.m, 1) ); | |
33 | |
34 if ~isa(D, 'function_handle') | |
35 D = @(t)D; | |
36 end | |
37 if ~isa(E, 'function_handle') | |
38 E = @(t)E; | |
39 end | |
40 if ~isa(S, 'function_handle') | |
41 S = @(t)S; | |
42 end | |
43 | |
44 I = speye(obj.m); | |
45 O = sparse(obj.m,obj.m); | |
46 | |
47 obj.M = @(t)[ | |
48 O, I; | |
49 D(t), E(t); | |
50 ]; | |
51 obj.C = @(t)[ | |
52 zeros(obj.m,1); | |
53 S(t); | |
54 ]; | |
55 | |
56 obj.k = k; | |
57 obj.t = t0; | |
58 obj.w = [v0; v0t]; | |
59 | |
60 obj.F = @(w,t)(obj.M(t)*w + obj.C(t)); | |
31 else | 61 else |
32 obj.C = [zeros(obj.m,1), S]; | 62 |
63 default_arg('D', sparse(obj.m, obj.m)); | |
64 default_arg('E', sparse(obj.m, obj.m)); | |
65 default_arg('S', sparse(obj.m, 1) ); | |
66 | |
67 I = speye(obj.m); | |
68 O = sparse(obj.m,obj.m); | |
69 | |
70 obj.M = [ | |
71 O, I; | |
72 D, E; | |
73 ]; | |
74 obj.C = [ | |
75 zeros(obj.m,1); | |
76 S; | |
77 ]; | |
78 | |
79 obj.k = k; | |
80 obj.t = t0; | |
81 obj.w = [v0; v0t]; | |
82 | |
83 obj.F = @(w,t)(obj.M*w + obj.C); | |
33 end | 84 end |
34 | |
35 obj.k = k; | |
36 obj.t = t0; | |
37 obj.w = [v0; v0t]; | |
38 | |
39 obj.F = @(w,t)(obj.M*w + obj.C); | |
40 end | 85 end |
41 | 86 |
42 function [v,t] = getV(obj) | 87 function [v,t] = getV(obj) |
43 v = obj.w(1:end/2); | 88 v = obj.w(1:end/2); |
44 t = obj.t; | 89 t = obj.t; |