Mercurial > repos > public > sbplib
annotate +time/Test.m @ 1114:f2988a63c3aa feature/timesteppers
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 10 Apr 2019 23:10:13 +0200 |
parents | |
children |
rev | line source |
---|---|
1114
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 function tests = Test() |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 tests = functiontests(localfunctions); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 end |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 function testRungekutta4(tc) |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 F = @(t,y) -0.5*y; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 dt = 0.01; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 t0 = 0; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 y0 = 1; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 T = 2; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 ts1 = time.Rungekutta4(F, dt, t0, y0); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 ts1.stepN(T/dt); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 ts2 = time.Rungekutta4(F, dt/2, t0, y0); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 ts2.stepN(T/(dt/2)); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 y_true = exp(-0.5*T); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 e1 = y_true - ts1.getV(); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 e2 = y_true - ts2.getV(); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 end |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 function testRungekutta4SecondOrder(tc) |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 F = @(t,y,y_t) -4*y - 1/4*y_t; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 dt = 0.01; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 t0 = 0; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 y0 = 1; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 y0t = 1/2; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 T = 2; |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 ts1 = time.Rungekutta4SecondOrder(F, dt, t0, y0, y0t); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 ts1.stepN(T/dt); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 ts2 = time.Rungekutta4SecondOrder(F, dt/2, t0, y0, y0t); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 ts2.stepN(T/(dt/2)); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 y_true = 1/51*exp(-T/8)*(sqrt(255)*sin(sqrt(255)/8*T) + 51*cos(sqrt(255)/8*T)); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 e1 = y_true - ts1.getV(); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 e2 = y_true - ts2.getV(); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5); |
f2988a63c3aa
Add tests for time.Rungekutta4 and time.Rungekutta4SecondOrder
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 end |