Javascript 线性插值

Javascript 线性插值,javascript,math,while-loop,iteration,linear-interpolation,Javascript,Math,While Loop,Iteration,Linear Interpolation,下面是一个程序,它要求用户输入一个数字(变量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; bise

下面是一个程序,它要求用户输入一个数字(变量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);
}
函数一切(){
r=document.getElementById('ri')。值*1;
a=document.getElementById('ai')。值*1;
b=document.getElementById('bi')。值*1;
对分(函数(x){返回x*x-r;},a,b);
}   
函数对分(f,a,b){
var平均值、fa、fb;
平均值=NaN;
而(数学abs(a-b)>1e-10){
fa=f(a);
fb=f(b);
如果(fa*fbChris说

while(数学abs(a-b)>1e-5){
fa=f(a);
fb=f(b);
if(数学abs(fa)<1e-10){
平均值=a;
打破
}
if(数学abs(fb)<1e-10){
平均值=b;
打破
}
如果(fa*fb<0){
年级=(fb-fa)/(b-a);
平均值=a-fa/梯度;
favg=f(平均值);
//警报([a、fa、b、fb])
}否则{
警报(“出现错误。请重新确定间隔A到B”);
打破
}
如果(fa*favg<0){
b=平均值;
}否则{
a=平均值;
}
}
警报(平均值);

在前3行中,将
*1
更改为
*1.0
。解决方案:
while(Math.abs(a-b)>1e-5){fa=f(a);fb=f(b);if(Math.abs(fa)这很难阅读;)您可以在此网站上发布自己的答案。然后您可以格式化它。