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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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