• 牛顿迭代法求解平方根


    牛顿迭代法求解平方根

     

    目录(?)[+]

     

    一个实例

    //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)
  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/developer-ios/p/7173012.html
Copyright © 2020-2023  润新知