/* Runge-Kutta Method */ rungekutta(p1, p2, p, q, tt) := block( [k11, k12, k21, k22, k31, k32, k41, k42], k11 : hh*p1, k12 : hh*p2, k21 : hh*ratsubst(q+k12/2, q, ratsubst(p+k11/2, p, ratsubst(tt+hh/2, tt, p1))), k22 : hh*ratsubst(q+k12/2, q, ratsubst(p+k11/2, p, ratsubst(tt+hh/2, tt, p2))), k31 : hh*ratsubst(q+k22/2, q, ratsubst(p+k21/2, p, ratsubst(tt+hh/2, tt, p1))), k32 : hh*ratsubst(q+k22/2, q, ratsubst(p+k21/2, p, ratsubst(tt+hh/2, tt, p2))), k41 : hh*ratsubst(q+k32, q, ratsubst(p+k31, p, ratsubst(tt+hh, tt, p1))), k42 : hh*ratsubst(q+k32, q, ratsubst(p+k31, p, ratsubst(tt+hh, tt, p2))), pn : ratsimp(p + (k11 + 2*k21 + 2*k31 + k41)/6), qn : ratsimp(q + (k12 + 2*k22 + 2*k32 + k42)/6) )$