Exercise ODEs

  1. Implement a Runge-Kutta "stepper"-routine rkstep wich advances the solution by a step h and estimates the error, e.g.:
    function rkstep(f,x,y,h){
    // Runge-Kutta midpoint step
    var k0  = f(x,y)
    var y12 = [y[i]+k0[i]*h/2 for(i in y)]
    var k   = f(x+h/2,y12)
    var y1  = [y[i]+k[i]*h for(i in y)]
    var dy  = [(k[i]-k0[i])*h/2 for(i in y)]
    return [y1, dy]
    }
    
  2. Implement an adaptive-step-size Runge-Kutta "driver"-routine wchich advances the solution from a to b (by calling rkstep with appropriate step-sizes) keeping the specified relative, eps, and absolute, acc, precision:
    
    
    
  3. Implement a Prediction-Correction method with adaptive step-size for a single first order differential equation. Here is a JavaScript example.
  4. Your driver must remember the points (x,y) it calculated along the way.