zoukankan      html  css  js  c++  java
  • Java实现牛顿迭代法求解平方根、立方根

    一、简介

        牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

     多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数  

    泰勒级数的前面几项来寻找方程  的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。

    二、牛顿迭代公式

     

     三、代码实现

    我们现在先求平方根: 设函数 f(x) = x^2 - a  ,那么求 a 的平方根等价于求 f(x) = 0 , 由牛顿迭代公式有:

      x = x0 - f(x0)/f `(x0)                           ( f `(x) 为函数 f(x)  的一阶导数 f `(x) != 0)

    进行迭代:

         x1 = x0 -f(x0)/f `(x0) 

         x2 = x1 - f(x1)/f `(x1) 

     x3 = x2 - f(x2)/f `(x2) 

     ......

     xk+1 = xk - f(xk)/f `(xk)  (k = 0,1,2,3......)

    同样道理,求立方根时 我们设函数 f(x) = x^3 - a,  那么求  a  的立方根等价于求 f(x) = 0

    //迭代法求立方根
        public double getCube(double input){
            double x = 1;
            double x1 = x - (x*x*x - input) / (3*x*x);
            while(x - x1 >0.000000001 || x - x1 < -0.000000001){        //判断精度
                x = x1;
                x1 = x - (x*x*x - input) / (3*x*x);
            }
            return x1;
        }
        
        //迭代法求平方根
        public double getSqrt(double input){
            double x = 1;
            double x1 = x - (x*x - input)/(2*x);
            while(x - x1 > 0.00000001 || x - x1 < -0.00000001){
                x = x1;
                x1 = x - (x*x - input)/(2*x);
            }
            return x1;
        }


    ---------------------
    作者:luzi_这个人有点意思
    来源:CSDN
    原文:https://blog.csdn.net/qq_34528297/article/details/70327734

  • 相关阅读:
    敏感词过滤
    Tarjan+topsort(DP)【P3387】 [模板]缩点
    树状数组【CF703D】Mishka and Interesting sum
    组合数学+错排问题【p4071】[SDOI2016]排列计数
    Dijkstra【p3003(bzoj2100)】[USACO10DEC]苹果交货Apple Delivery
    Trie树【p2264】情书
    线段树+扫描线【p1884】[Usaco12FEB]过度种植(银)Overplanting …
    区间DP【p4290】[HAOI2008]玩具取名
    暴力 【p4092】[HEOI2016/TJOI2016]树
    暴力 【p4098】[HEOI2013]ALO
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10842794.html
Copyright © 2011-2022 走看看