zoukankan      html  css  js  c++  java
  • 牛顿迭代法求解平方根

    牛顿迭代法求解平方根

     

    目录(?)[+]

     

    一个实例

    //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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    迭代简介

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

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

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

    牛顿迭代法

    牛顿迭代法简介

    牛顿迭代法,求解如下问题的根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)
  • 相关阅读:
    微软 软件的 一组堆成快捷键
    C#事件 的讲解
    软件缺陷分析的几种方法
    一个长三角人对深圳的看法 (转)
    一次LoadRunner的CPC考试经历
    测试是一门武功
    ORACLE的性能测试经验总结
    深圳测试协会第九次论坛在深圳举行
    10月28日参加了IBM的产品推介会
    什么是web安全性测试?
  • 原文地址:https://www.cnblogs.com/developer-ios/p/7173012.html
Copyright © 2011-2022 走看看