Mercurial > repos > public > sbplib
view +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 |
line wrap: on
line source
function tests = Test() tests = functiontests(localfunctions); end function testRungekutta4(tc) F = @(t,y) -0.5*y; dt = 0.01; t0 = 0; y0 = 1; T = 2; ts1 = time.Rungekutta4(F, dt, t0, y0); ts1.stepN(T/dt); ts2 = time.Rungekutta4(F, dt/2, t0, y0); ts2.stepN(T/(dt/2)); y_true = exp(-0.5*T); e1 = y_true - ts1.getV(); e2 = y_true - ts2.getV(); tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5); end function testRungekutta4SecondOrder(tc) F = @(t,y,y_t) -4*y - 1/4*y_t; dt = 0.01; t0 = 0; y0 = 1; y0t = 1/2; T = 2; ts1 = time.Rungekutta4SecondOrder(F, dt, t0, y0, y0t); ts1.stepN(T/dt); ts2 = time.Rungekutta4SecondOrder(F, dt/2, t0, y0, y0t); ts2.stepN(T/(dt/2)); y_true = 1/51*exp(-T/8)*(sqrt(255)*sin(sqrt(255)/8*T) + 51*cos(sqrt(255)/8*T)); e1 = y_true - ts1.getV(); e2 = y_true - ts2.getV(); tc.verifyEqual(e1/e2, 2^4, 'AbsTol', 0.5); end