ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用牛顿迭代法实现开平方

2021-03-28 14:03:40  阅读:213  来源: 互联网

标签:方程 开平方 牛顿 System sqrt println 迭代法 out


前言

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。

原理

比如求平方根:,可以转为求这个方程的根
已知曲线方程,我们在点做切线,求

容易得出,点的切线方程为:
要求,即相当于求 的解,即
将f(x)=x2-c,f`(x)=2x代入方程得到x=x-(x2-c)/2x=(x+c/x)/2

实现

public class Client {

  public static void main(String[] args) {
    System.out.println(Math.sqrt(10));
    System.out.println(sqrt(10));
    System.out.println(Math.sqrt(-10));
    System.out.println(sqrt(-10));
    System.out.println(Math.sqrt(0.000));
    System.out.println(sqrt(0));
    System.out.println(Math.sqrt(0.5));
    System.out.println(sqrt(0.5));
  }

  private static double sqrt(double n) {
    if (Double.isNaN(n) || n < 0) {
      return Double.NaN;
    }
    if (n == 0) {
      return n;
    }
    double k = 1.0;
    while (Math.abs(k * k - n) > 1e-9) {  //精度自己控制
      k = (k + n / k) / 2;
    }
    return k;
  }

}

得到的结果和java内置的sqrt方法结果一致。

参考

数学笔记9——牛顿迭代法
如何通俗易懂地讲解牛顿迭代法求开方?数值分析?
sqrt函数分析

标签:方程,开平方,牛顿,System,sqrt,println,迭代法,out
来源: https://www.cnblogs.com/strongmore/p/14588499.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有