hw4 (no graphics)
Euler's method
by KUO YOU-TING
JavaScript
var m = 1, k = 5, c = .0;
var x = [], x2 = [];
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] += f[i] * dt;
}
*/
/*
//Midpoint Method
var f = deriv(x);
for(var i = 0; i < n; i++)
x2[i] = x[i] + f[i] * (dt/2);
f = deriv(x2);
for(var i = 0; i < n; i++)
x[i] += f[i] * dt;
*/
var f = deriv(x);
for(var i = 0; i < n; i++) {
k1 = f[i];
var t = [];
t[0] = x[0] + 0.5*dt;
t[1] = x[1] + 0.5*k1*dt;
var f2 = deriv(t);
k2 = f2[i];
t[0] = x[0] + 0.5*dt;
t[1] = x[1] + 0.5*k2*dt;
var f3 = deriv(t);
k3 = f3[i];
t[0] = x[0] + dt;
t[1] = x[1] + k3*dt;
var f4 = deriv(t);
k4 = f4[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]);
}