Mercurial > repos > public > sbplib
annotate +rv/+time/BdfDerivative.m @ 1195:a4c00628a39d feature/rv
Add higher order approximations to BDFDerivative
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 07 Aug 2019 13:27:36 +0200 |
parents | 010bb2677230 |
children |
rev | line source |
---|---|
1016
4b42999874c0
Add lower level for boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1014
diff
changeset
|
1 classdef BdfDerivative < handle |
1013
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
2 properties |
1014
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
3 coefficients |
1013
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
4 end |
1152
010bb2677230
Clean up in +rv/+time. Make the time stepping more efficient by not storing unnessecary properties in the RK-RV time steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1016
diff
changeset
|
5 methods |
1016
4b42999874c0
Add lower level for boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1014
diff
changeset
|
6 function obj = BdfDerivative() |
4b42999874c0
Add lower level for boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1014
diff
changeset
|
7 obj.coefficients = obj.getBdfCoefficients(); |
1013
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
8 end |
1014
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
9 function DvDt = evaluate(obj, v, v_prev, dt) |
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
10 order = size(v_prev,2); |
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
11 DvDt = (obj.coefficients(order,1)*v - sum(obj.coefficients(order,2:order+1).*v_prev,2))/dt; |
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
12 end |
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
13 end |
e547794a9407
Add boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1013
diff
changeset
|
14 methods(Static) |
1016
4b42999874c0
Add lower level for boot-strapping to RungeKuttaExteriorRV
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1014
diff
changeset
|
15 function c = getBdfCoefficients() |
1195
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
16 c = zeros(9,10); |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
17 c(1,1) = 1; c(1,2) = 1; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
18 c(2,1) = 3; c(2,2) = 4; c(2,3) = -1; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
19 c(3,1) = 11; c(3,2) = 18; c(3,3) = -9; c(3,4) = 2; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
20 c(4,1) = 25; c(4,2) = 48; c(4,3) = -36; c(4,4) = 16; c(4,5) = -3; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
21 c(5,1) = 137; c(5,2) = 300; c(5,3) = -300; c(5,4) = 200; c(5,5) = -75; c(5,6) = 12; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
22 c(6,1) = 147; c(6,2) = 360; c(6,3) = -450; c(6,4) = 400; c(6,5) = -225; c(6,6) = 72; c(6,7) = -10; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
23 % Note: Higher orders than 6 are not stable, but can still be used as one-sided approximations of a derivatve |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
24 c(7,1) = 1089; c(7,2) = 2940; c(7,3) = -4410; c(7,4) = 4900; c(7,5) = -3675; c(7,6) = 1764; c(7,7) = -490; c(7,8) = 60; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
25 c(8,1) = 2283; c(8,2) = 6720; c(8,3) = -11760; c(8,4) = 15680; c(8,5) = -14700; c(8,6) = 9408; c(8,7) = -3920; c(8,8) = 960; c(8,9) = -105; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
26 c(9,1) = 7129; c(9,2) = 22680; c(9,3) = -45360; c(9,4) = 70560; c(9,5) = -79380; c(9,6) = 63504; c(9,7) = -35280; c(9,8) = 12960; c(9,9) = -2835; c(9,10) = 280; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
27 |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
28 % Scale coefficients |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
29 c(2,:) = c(2,:)/2; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
30 c(3,:) = c(3,:)/6; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
31 c(4,:) = c(4,:)/12; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
32 c(5,:) = c(5,:)/60; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
33 c(6,:) = c(6,:)/60; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
34 c(7,:) = c(7,:)/420; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
35 c(8,:) = c(8,:)/840; |
a4c00628a39d
Add higher order approximations to BDFDerivative
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1152
diff
changeset
|
36 c(9,:) = c(9,:)/2520; |
1013
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
37 end |
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
38 end |
eb441fbdf379
Draft implementation of RungeKutta with exterior RV updates
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
39 end |