0

这是一个程序,它要求用户输入一个数字(变量 r)来找到它的正根,然后要求一个起始区间 [a,b]。这是在一些 HTML 代码中完成的。它下面的 javascript 在 while 循环中具有线性插值的代码。

function everything() {

r= document.getElementById('ri').value*1;
a= document.getElementById('ai').value*1;
b= document.getElementById('bi').value*1;

bisect(function(x){return x*x-r;},a,b);
}   

function bisect(f,a,b) {
var avg,fa,fb;

avg = NaN;
while (Math.abs(a-b)>1e-10) {
    fa=f(a);
    fb=f(b);
    if(fa*fb<0) {
            grad=(fb-fa)/(b-a);
        avg=a-(fa/grad);
        favg=f(avg);
    } else {
        alert('There has been an error. Redifine the interval A to B');
        break;
        }

    if (fa*favg<0) {
        b=avg;
     } else {
        a=avg;
    }
}
alert(avg);
}

这段代码的问题是它返回错误文本,最后是 avg 的最终值。这是个问题。

4

1 回答 1

0

克里斯说

while (Math.abs(a - b) > 1e-5) {
  fa = f(a);
  fb = f(b);
  if (Math.abs(fa) < 1e-10) {
    avg = a;
    break;
  }

  if (Math.abs(fb) < 1e-10) {
    avg = b;
    break;
  }

  if (fa * fb < 0) {
    grad = (fb - fa) / (b - a);
    avg = a - fa / grad;
    favg = f(avg);
    //alert([a,fa,b,fb])
  } else {
    alert("There has been an error. Redifine the interval A to B");
    break;
  }

  if (fa * favg < 0) {
    b = avg;
  } else {
    a = avg;
  }
}
alert(avg);
于 2021-02-26T21:11:57.240 回答