hw4 (no graphics)

Euler's method

by k6e2n0t12

JavaScript

var m = 1, k = 5, c = .31;
var x = [];

init();
animate();

function deriv (x) {
	var ff = [];
    ff.push (x[1]);                  // x_dot = v;
    ff.push (-(c*x[1] + k*x[0])/m);  // v_dot = 1/m *(-cx_dot -kx)
    return ff;
}

function ODESolver(x, dt) {
    var n = x.length;

    // Euler's method
  /*
    var f = deriv(x);
    for (var i = 0; i < n; i++) {
        x[i] = x[i]+ f[i] * dt;
    }*/
  	//Midpoint Method
  	/*
  	var f = deriv(x);
    var temp=[];
  	temp.push(x[0]);
  	temp.push(x[1]);
  	for(var i = 0;i<n;i++){
      temp[i] = x[i]+f[i]*(dt/2);
    }
  	f=deriv(temp);
  	for(var i = 0;i<n;i++){
      x[i] = x[i]+f[i]*dt;
    }*/
  	//RK4
  	
    for (var i = 0; i < n; i++) {
      	var k1 = deriv(x)[i];
      
      	var temp =[];
      	temp.push(x[0]+0.5*dt);
      	temp.push(x[1]+0.5*k1*dt);
      	var k2 = deriv(temp)[i];
      
      	temp[0]=x[0]+0.5*dt;
      	temp[1]=x[1]+0.5*k2*dt
      	var k3 = deriv(temp)[i];
      
      	temp[0]=x[0]+dt;
      	temp[1]=x[1]+k3*dt;
      	var k4 = deriv(temp)[i];
      	
        x[i] = x[i]+ (k1+2*k2+2*k3+k4)*dt/6;
    }
}

function init() {	
    // INITIIALIZE ODE
    x.push (20);
    x.push (0);    
}

function animate() {
    requestAnimationFrame(animate);
	var dt = 0.01;
    ODESolver (x,dt); 
    console.log (x[0]);
}