Euler:= proc(f, ic:list, x1, h) local xn, yn, ii; xn:= op(1, ic): yn:= op(2, ic): for ii from 1 to round((x1-xn)/h) do yn:= evalf(yn + h * f(xn,yn)); xn:= xn + h od: yn; end; ImpEuler:= proc(f, ic: list, x1, h) local xn, yn, m, ii; xn:= op(1, ic): yn:= op(2, ic): for ii from 1 to round((x1-xn)/h) do m:= f(xn, yn); xn:= xn + h; yn:= evalf(yn + h/2 * (m + f(xn,yn+h*m))); od: yn; end; RungeKutta:= proc(f, ic: list, x1, h) local xn, yn, m1, m2, m3, m4, ii; xn:= op(1, ic): yn:= op(2, ic): for ii from 1 to round((x1-xn)/h) do m1:= evalf(f(xn, yn)); m2:= evalf(f(xn + h/2, yn + h/2*m1)); m3:= evalf(f(xn + h/2, yn + h/2*m2)); xn:= xn + h; m4:= evalf(f(xn, yn + h*m3)); yn:= evalf(yn + h/6 * (m1 + 2*(m2+m3) + m4)); od: yn; end;