myhw3
my example
by SunnyHsu
JavaScript
//f(x) = (x - 0.3) * (x - (-2)) * (x^2 + 1) * (x^2 + 2*x + 3)
//f(x) = 1x^6 + 3.7 x^5 + 6.800000000000001 x^4 + 7.6 x^3 + 4.0 x^2+ 3.899999999999999 x - 1.8
function evaluator(x, array){
var b=[],c=[];
var pow = 6;
b[pow] = array[pow];
c[pow] = b[pow];
for(var k=pow-1; k>=1; k--){
b[k] = array[k] + b[k+1]*x;
c[k] = b[k] + c[k+1]*x;
//console.log("b="+b[k]+" c="+c[k]);
}
b[0] = array[0] + b[1]*x;
return [b[0], c[1]];
}
// 1x^6 + 3.7 x^5 + 6.800000000000001 x^4 + 7.6 x^3 + 4.0 x^2+ 3.899999999999999 x - 1.8
var array=[-1.8, 3.899999999999999, 4, 7.6, 6.800000000000001, 3.7, 1];
function f(x) {
return (((((1*x+3.7)*x+6.800000000000001)*x+7.6)*x+4)*x+ 3.899999999999999)*x-1.8;
}
function bisection (func, xLo, xHi, eps) {
if (func(xLo) * func (xHi) > 0)
return undefined;
var xMid, fHi, fLo, fMid;
fHi = func(xHi); // fb
fLo = func(xLo); // fa
var iter = 0;
while (xHi - xLo > eps) {
++iter;
xMid = (xLo+xHi)/2;
fMid = func(xMid); // fc
console.log ('xmid='+xMid);
//console.log ('f(c) = ' + fMid);
if (Math.abs(fMid) < eps)
return [xMid, iter];
else if (fMid*fLo < 0) { // fa*fc < 0 --> [a,c]
xHi = xMid;
fHi = fMid;
} else { // fc*fb < 0 --> [c,b]
xLo = xMid;
fLo = fMid;
}
}
return [(xLo+xHi)/2, iter];
}
var eval0 = function (x, derivatives) {
var deriv = derivatives || 0; // default argument
//var fx =1x^6 + 3.7 x^5 + 6.800000000000001 x^4 + 7.6 x^3 + 4.0 x^2+ 3.899999999999999 x - 1.8
// Horner method
var fx = (((((1*x+3.7)*x+6.800000000000001)*x+7.6)*x+4)*x+ 3.899999999999999)*x-1.8;
if (deriv === 0)
return [fx];
else {
//var dfx = 6 x^5 + 18.5 x^4 + 27.2 x^3 + 22.8 x^2 + 7.999999999999999 x + 3.899999999999999
var dfx = ((((6*x+18.5)*x+27.2)*x+22.8)*x+7.999999999999999)*x+ 3.899999999999999;
return [fx,dfx];
}
}
function Newton...