Mercurial > repos > public > sbplib
annotate +time/MagnusMP.m @ 714:bca7a52550d1 feature/optim
closing feature/optim
author | Ylva Rydin <ylva.rydin@telia.com> |
---|---|
date | Thu, 08 Mar 2018 09:42:49 +0100 |
parents | bc39bb984d88 |
children |
rev | line source |
---|---|
505
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
1 classdef MagnusMP < time.Timestepper |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
2 properties |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
3 D |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
4 S |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
5 F |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
6 k |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
7 t |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
8 v |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
9 m |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
10 n |
513
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
11 matrixexp |
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
12 tol |
505
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
13 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
14 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
15 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
16 methods |
513
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
17 function obj = MagnusMP(D, k ,t0,v0, matrixexp,tol) |
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
18 default_arg('matrixexp','expm') |
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
19 default_arg('tol',1e-6) |
505
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
20 obj.D = D; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
21 obj.k = k; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
22 obj.t = t0; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
23 obj.v = v0; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
24 obj.m = length(v0); |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
25 obj.n = 0; |
513
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
26 obj.matrixexp = matrixexp; |
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
27 obj.tol = tol; |
505
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
28 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
29 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
30 function [v,t] = getV(obj) |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
31 v = obj.v; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
32 t = obj.t; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
33 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
34 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
35 function obj = step(obj) |
513
bc39bb984d88
Added arnoldi krylov subspace approximation
Ylva Rydin <ylva.rydin@telia.com>
parents:
505
diff
changeset
|
36 obj.v = time.expint.Magnus_mp(obj.v,obj.D, obj.t, obj.k,obj.matrixexp,obj.tol); |
505
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
37 obj.t = obj.t + obj.k; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
38 obj.n = obj.n + 1; |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
39 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
40 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
41 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
42 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
43 methods (Static) |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
44 function k = getTimeStep(lambda) |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
45 k = rk4.get_rk4_time_step(lambda); |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
46 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
47 end |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
48 |
49bc2929dfb1
Added the midpont magnus exponential integrator
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff
changeset
|
49 end |