Given the IVP y(1)(t = t y(t) - t2 + 1 with y(a) = 3, to approximate y(b) with n steps, we can do:
Euler's Method
h := (b - a)/n; for i from 0 to n do t[i] := a + i*h; end; y[0] := 3; f := (t, y) -> t*y - t^2 + 1; for i from 1 to n do y[i] := y[i - 1] + h*f(t[i - 1], y[i - 1]); end do; y[n]; # approximation
Heun's Method
h := (b - a)/n; for i from 0 to n do t[i] := a + i*h; end; y[0] := 3; f := (t, y) -> t*y - t^2 + 1; for i from 1 to n do K[0] := f(t[i - 1], y[i - 1]); K[1] := f(t[i - 1] + h, y[i - 1] + h*K[0]); y[i] := y[i - 1] + h*(K[0] + K[1])/2; end do; y[n]; # approximation
4th-order Runge Kutta
h := (b - a)/n; for i from 0 to n do t[i] := a + i*h; end; y[0] := 3; f := (t, y) -> t*y - t^2 + 1; for i from 1 to n do K[0] := f(t[i - 1], y[i - 1]); K[1] := f(t[i - 1] + h/2, y[i - 1] + h/2*K[0]); K[2] := f(t[i - 1] + h/2, y[i - 1] + h/2*K[1]); K[3] := f(t[i - 1] + h, y[i - 1] + h*K[2]); y[i] := y[i - 1] + h*(K[0] + 2*K[1] + 2*K[2] + K[3])/6; end do; y[n]; # approximation
Copyright ©2005 by Douglas Wilhelm Harder. All rights reserved.