1. 牛顿迭代法 - 切线是曲线的线性逼近
曲线 f(x) 上随机选择一点(Xn,f(Xn)) ,求出切线方程; 切线方程与x轴相交的点作为Xn+1进行下一轮循环;直到Xn+1 无限逼近 f(x)=0; 得到根。
根据上述可得:
切线 y-f(Xn) = f ' (Xn) (x -Xn); -> 当 y=0 时,x =Xn+1 ; Xn+1 = Xn - f(Xn)/ f ' (Xn);
应用到 求根方程中 :
f(x) = x^2 - n;
那么 Xn+1 = Xn - (Xn^2-n)/2Xn ;
2. java实现代码
public static double sqrt( double n) {
if (n < 0) return Double.NaN;
int x = n; // 设置 起始 Xn
int err = 1e-15 ; // 设置 误差范围
while( (x - n/x) > err) {
x = x/2 + n/2x ; // x = (x+ n/x)/2;
}
return x;
}