Newton's method
by jmchen
JavaScript
var eval0 = function(x, deriv = 0) {
//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, eps = 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 [approxRoot, iterations]
}
var result = Newton(eval0, -3, 1e-4);
console.log('in ' + result[1] + ' iterations: ' +
'f(' + result[0] + ') = ' + eval0(result[0], 0));