HW3
by k6e2n0t12
JavaScript
var coef = [4,-60.6,310.6,-569.8,207,-260,100];
var maxLoop=100;
var eva = function (coef,x){
var a6=coef[0],a5=coef[1],a4=coef[2],a3=coef[3],a2=coef[4],a1=coef[5],a0=coef[6];
var fx = x*(x*(x*(x*(x*(a6*x+a5)+a4)+a3)+a2)+a1)+a0;
var dfx = x*(x*(x*(x*(6*a6*x+5*a5)+4*a4)+3*a3)+2*a2)+a1;
//console.log(fx);
return [fx,dfx];
}
function bisection(func,eps,xLo,xHi){
var xMid, fHi=func(coef,xHi)[0], fLo=func(coef,xLo)[0], fMid;
//console.log('fHi = '+fHi+',fLo = '+fLo);
console.log('bisection:');
if(fHi*fLo>0)
return undefined;
for(var c=0;c<maxLoop&&xHi-xLo>eps;c++){
xMid=(xLo+xHi)/2;
fMid=func(coef,xMid)[0];
console.log(xMid);
//console.log('fHi = '+fHi+',fLo = '+fLo);
if(Math.abs(fMid)<eps){
return [xMid,c];
}
else if(fMid*fLo<0){
fHi=fMid;
xHi=xMid;
}
else{
fLo=fMid;
xLo=xMid;
}
}
return [(xLo+xHi)/2,c];
}
function newton(func,eps,x0){
var x1;
console.log('newton:');
for(var c=0;c<maxLoop;c++){
var fdf = eva(coef,x0);
x1 = x0 - fdf[0]/fdf[1];
console.log(x1);
if(Math.abs(x1-x0)<eps)
return [x1,c];
x0 = x1;
}
return [x1,c];
}
var ansb = bisection(eva,1e-5,0,1),ansn = newton(eva,1e-5,1);
console.log('bisection :'+ansb+'\nnewton :'+ansn);