zoukankan      html  css  js  c++  java
  • sqrt()*方根计算函数的实现2——牛顿迭代法

    牛顿迭代法:

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

    牛顿迭代公式:

         设r是f(x) = 0的根,选取x0作为r初始*似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次*似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次*似值。重复以上过程,得r的*似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次*似值,上式称为牛顿迭代公式

    牛顿迭代法求*方根:

         求*方根在牛顿迭代公式中,f(x)=x^2-a,则f'(x)=2x。以上的牛顿迭代公式变为:x(n+1)=x(n)-(x(n)^2-a)/2x,即(x(n)+a/x(n))/2。我们随便猜一个数r,假设r是f(x)=0的根,经过几次牛顿迭代公式后(以上的公式)所得到的x值即是f(x)=0的根或者其非常精确的*似值。

    例如:我想求根号2等于多少。假如我猜测的结果为4,虽然错的离谱,但你可以看到使用牛顿迭代法后这个值很快就趋*于根号2了:
          ( 4  + 2/4 ) / 2 = 2.25
          ( 2.25 + 2/2.25 ) / 2 = 1.56944..
          ( 1.56944..+ 2/1.56944..) / 2 = 1.42189..
          ( 1.42189..+ 2/1.42189..) / 2 = 1.41423..

    盗图一张以作说明,图片来自http://www.2cto.com/kf/201206/137256.html。

    ..

    程序实现:

    #include<iostream>

    #include<math.h>

    using namespace std;

    double sqrtNT(double a,double b)

    {

           double x,last;

           x=b;

           if(a<=0)

           {

                  return a;

           }

           while(x*x!=a&&(abs(last-x)>0.0000001))

           {

                  last=x;

                  x=(x+a/x)/2;

           }

           return x;

    }

    int main()

    {

           cout<<sqrtNT(93273,5)<<endl;

           return 0;

    }

  • 相关阅读:
    hibernate缓存清除(转)
    hibernate缓存
    hibernate延迟加载
    session进行增删改查操作
    curl命令详解
    CURL 宏定义列表
    CURL常用命令---样例
    打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)
    curl断点续载
    CURL常用命令
  • 原文地址:https://www.cnblogs.com/shrimp-can/p/4868343.html
Copyright © 2011-2022 走看看