Newton's method
by YouTingKuo
JavaScript
var eval0 = function (x, derivatives) {
var deriv = derivatives || 0; // default argument
//var fx = x*x*x - 3*x*x - x + 9;
// Horner method
var fx = ((1*x - 3)*x - 1)*x + 9;
if (deriv === 0)
return [fx];
else {
//var dfx = 3*x*x - 6*x - 1;
var dfx = ((3*x - 6)* x) - 1;
return [fx,dfx];
}
}
function Newton (eval, x0, epsilon) {
var eps = epsilon || 1e-4;
var imax = 20;
for (var i = 0; i < imax; i++) {
var fdf = eval (x0, 1);
x1 = x0 - fdf[0]/fdf[1];
if (Math.abs(x1 - x0) < eps)
break;
x0 = x1;
}
return [x1, i]; // return [approx. root, iterations]
}
var result = Newton (eval0, -3, 1e-4);
console.log ('in ' + result[1] + ' iterations: ' +
'f(' + result[0] + ') = ' + eval0 (result[0],0) );