牛顿迭代法
使用
借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可。由上述简单推导知,当f(x)=0时,xn+1=xn,因此把f(x)=xn-a 代入上述迭代式进行迭代直至xn+1=xn即可。
实际中xn+1=xn可能永远达不到,可以根据给定精度△,当|xn+1-xn|<△成立时即可停止迭代,此时的xn+1即为所求。
- 求平方根
设待求算术平方根的数为a,其算术平方根为x,则x2=a,令f(x)=x2-a,代入上面的递推式有xn+1=xn-(xn2-a)/(2xn),整理得xn+1=(1/2)(xn+a/xn)
function sqart(a) {
let x1 = a
let x2 = a/2
let n = 0.0000001
while(Math.abs(x1 - x2)>n) {
x1 = x2
x2 = 1/2 * (x1 + a/x1)
}
return x2
}
- 求立方根
同理,令f(x)=x3-a,代入递推式有xn+1=xn-(xn3-a)/(3xn2),整理得xn+1=(1/3)(2xn+a/xn2)
代码如下:
function cubrt(a)
{
let x1=a;
let x2=a/2;
while(Math.abs(x1-x2)>0.0000001)
{
//printf("%f\n",x2);
x1=x2;
x2=(2*x1+a/(x1*x1))/3.0;
}
return x2;
}