牛顿迭代法求解平方根

原创 2015年05月16日 10:30:39

一个实例

//java实现的sqrt类和方法
public class sqrt {
    public static double sqrt(double n)
    {
        if (n<0) return Double.NaN;
        double err = 1e-15;
        double t = n;
        while (Math.abs(t - n/t) > err*t)
            t = (n/t + t)/2;
        return t;
    }
    public static void main(String[] args)
    {
        sqrt a  = new sqrt();
        System.out.println(a.sqrt(2));
    }
}
//2的平方根的求解结果
>>1.414213562373095

迭代简介

迭代,是一种数值方法,具体指从一个初始值,一步步地通过迭代过程,逐步逼近真实值的方法。
与之相对的是直接法,也就是通过构建解析解,一步求出问题的方法。

通常情况下,我们总是喜欢一步得到问题的结果,因此直接法总是优先考虑的。
但是,当遇到复杂的问题时,特别在未知量很多,方程非线性时,无法得到直接解法(例如五次方程并没有解析解)。
这时候,我们需要使用迭代算法,一步步逼近,得到问题的答案。

迭代算法,通常需要考虑如下问题:
- 确定迭代变量
- 确定迭代关系式
- 确定迭代终止条件

牛顿迭代法

牛顿迭代法简介

牛顿迭代法,求解如下问题的根x

f(x)=0

求解方法如下:

xn+1=xnf(xn)f(xn)

方法中,迭代变量是根x,迭代关系式如上,迭代终止条件是|f(xn)0|<error

牛顿迭代法需要满足的条件是:
f(x)是连续的,并且待求的零点x是孤立的。
那么,在零点x周围存在一个区域,只要初始值x0位于这个邻域内,那么牛顿法必然收敛。
并且,如果f(x)不为0,那么牛顿法将具有平方收敛的特性,也就是,每迭代一次,其结果的有效倍数将增加一倍。

简单推导

这里写图片描述


f(xn)=dydx=f(xn)xnxn+1


xn+1=xnf(xn)f(xn)

对于平方根问题,假设f(x)=x2n,代入上式,有

xn+1=12(xn+nxn)

其图像含义是:通过对接近零点的领域点做切线,不断逼近零点,最终十分靠近零点。

泰勒公式推导

上面的式子,同样,可以用泰勒公式推导出来。

f(xn+ϵ)=f(xn)+f(xn)ϵ+12f(x)ϵ2+...

只取等号右边的前两项,有
ϵ=f(xn+ϵ)f(xn)f(xn)

两边同时加上xn,有
xn+1=xn+ϵ=xn+f(xn+ϵ)f(xn)f(xn)=xn+f(xn+1)f(xn)f(xn)

最终,f(xn+1=0),假设f(x)=x2n,上式同样可以化成
xn+1=12(xn+nxn)

本质上,牛顿迭代法就是利用了泰勒公式的前两项和,是泰勒公式的简化。

延伸与应用

同样的,牛顿迭代法同样可以求n次方根,对于f(x)=xmn

xn+1=xnxnm(1axnm)

牛顿迭代法求平方根

求平方根可以用二分的思路。二分其实也挺快的,不过还有更快的算法求平方根——牛顿迭代法。 如果我们要求a的平方根,首先令f(x)=x^2-a;那么我们的目的就是求得x使得f(x)=0; 在网上找了一张图...
  • w20810
  • w20810
  • 2015年10月11日 10:13
  • 2820

牛顿迭代法实现平方根函数

牛顿迭代法实现平方根函数平方根函数Sqrt() 用来求一个数的平方根,如何实现这个函数?有多种方法,这里记录一种比较常用的牛顿迭代法。牛顿迭代法 牛顿迭代法(Newton·s method)又称为...
  • zhaoyunfullmetal
  • zhaoyunfullmetal
  • 2015年10月20日 21:15
  • 1168

牛顿迭代法(牛顿-拉弗森方法(Newton-Raphson method))

起源[编辑] 牛顿法最初由艾萨克·牛顿在《流数法》(Method of Fluxions,1671年完成,在牛顿死后的1736年公开发表)。约瑟夫·拉弗森也曾于1690年在Analysis ...
  • szlcw1
  • szlcw1
  • 2014年04月22日 21:22
  • 7338

Lisp---牛顿迭代法求平方根

题目:求给定数的平方根 求平方根无法直接得到,本次利用牛顿迭代法进行求解。 若求解x的平方根sqrt(x), 大体思路为每次猜测一个答案guess,和x进行比较,而牛顿迭代法中每次求出y和x/gu...
  • Jazz_Charles
  • Jazz_Charles
  • 2015年10月08日 16:15
  • 633

利用牛顿迭代法求平方根

求n的平方根,先假设一猜测值X0 = 1,然后根据以下公式求出X1,再将X1代入公式右边,继续求出X2…通过有效次迭代后即可求出n的平方根,Xk+1先让我们来验证下这个巧妙的方法准确性,来算下2的平方...
  • z2008junjie
  • z2008junjie
  • 2010年03月09日 17:37
  • 18562

Logistic回归:牛顿迭代法

Logistic回归与牛顿迭代法很早之前介绍过《无约束的最优方法》里面介绍了梯度下降法和牛顿迭代法等优化算法。同时大家对于Logistic回归中的梯度下降法更为熟悉,而牛顿迭代法对数学要求更高,所以这...
  • u013007900
  • u013007900
  • 2017年03月23日 17:05
  • 1222

二分法和牛顿迭代法求平方根(Python实现)

求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现。那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代...
  • ycf74514
  • ycf74514
  • 2015年10月09日 10:22
  • 4000

牛顿迭代法求平方根

直接进入主题,打开计算器平方根到底是怎么计算的,一直是我心里的一个疑问,从上初中学了根号以后,老师就让我背根号2等于1.41,根号三是1.732,其他的不用记,题目出现会在后面告诉你。那么这些数字到底...
  • c_flybird
  • c_flybird
  • 2016年01月16日 19:37
  • 1402

牛顿迭代法求平方根(c++代码)

闲着无聊随便写一写 #include #include float mSqrt( float number ){     float result = 0x5f37...
  • u013480667
  • u013480667
  • 2015年03月02日 23:17
  • 2759

二分法和牛顿迭代法求平方根(Python实现)

原文地址 求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现。那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary...
  • Yan456jie
  • Yan456jie
  • 2016年08月26日 22:16
  • 2941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:牛顿迭代法求解平方根
举报原因:
原因补充:

(最多只允许输入30个字)