加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c/c++ 牛顿迭代法求平方根

(2011-10-07 05:16:44)
标签:

c/c

square

root

杂谈

分类: Technical

牛顿迭代法求平方根

先看一下牛顿迭代法求平方根的代码,代码来自百度知道。


#include<iostream>

using namespace std;


int main()

{

    double a,x,y;

    cin>>a;


if(a<0)

{

   cout<<"负数没有平方根"<<endl;

}

    else

    {

        x=1;

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


        while(x!=y)

        {

              x=y;

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

        }

       cout<<a<<"的平方根为:"<<x<<endl;

     }

   return 0;

 

}

 

代码很简单,难懂的就一句y=(x+a/x)/2

 

以下定理可以帮助你理解这句话。

这里只给出了不严谨的证明,目的是给出思路。


定理1   x == y时,x = a .

while(x!=y)

              {

                     x=y;

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

              }

              cout<<a<<"的平方根为:"<<x<<endl;

 

这段代码的意思是当x = y时,x = a .

条件:x = y y = (x+a/x)/2

结论:x = a

证明:

y – x = (x+a/x)/2-x = (a/x – x )/2 = 0

a/x = x x=0)即:x = a .

 

定理1说明了当循环结束时,得到了我们想要的结果。


定理2.  X >= Y >= a .恒成立

证明:

y –a =  (x+a/x)/2 - a >= a - a  = 0 (x > 0 根据算术平均数大于等于几何平均数)

 y >= a.

 

y – x = (x+a/x)/2 – x = (a/x – x )/2 = (a – x^2)/2*x

因为x = yy >= a

所以x >= a

y – x = (a – x^2)/2*x <= 0 y <= x.

 

综上所述, X >= Y >= a

 

定理2说明了x, y无限的向靠近,循环是会结束的。


http://www.diybl.com/course/3_program/c/c_js/20100107/187941.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有