牛顿迭代法求平方根。

参考链接:http://www.matrix67.com/blog/archives/361

https://www.zhihu.com/question/20690553

https://www.jianshu.com/p/dcd73888ac3a

核心思想:以直代曲。切线是曲线的线形逼近。

x^2 = a ---- 》 f(x) = x^2-a, 该函数导数f'(x)=2x.

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。首先我们先来看函数图像。

 
 

 

 

首先,选择一个接近函数f(x)零点的x0,计算相应的f(x0)和切线斜率f'(x0)(这里f'表示函数f的导数)。
也就是求如下方程的解:

 

我们将新求得的点 x坐标命名为x1,通常x1会比x0更接近方程f(x)=0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:

 
----------------------------
 
代码:
1  public static double sqrt_newton(double c){
2         if (c < 0 ) return Double.NaN;
3         double err = 1e-15;
4         double t = c;
5         while (Math.abs(t-c/t) > err*t){
6             t=(c/t + t)/2.0;
7         }
8         return t;
9     }

 

 
 

 

posted @ 2018-12-27 11:02  vector11248  阅读(267)  评论(0编辑  收藏  举报