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]);
}