牛顿迭代法求数的平方根


问题描述

欲求a的平方根,首先猜测一个值x1 = a/2 (当然也可以是别的值,只要是个正数就行)然后根据下面的公式进行迭代,直到两次算得的xn+1和xn的插值小于某个值ε,即认为找到了足够精确的平方根。这个ε值取得越小,计算出来的平方根就越精确
迭代公式如下:

xn+1=(xn+axn)/2x_{n+1} = (x_n+\frac{a}{x_n}) /2

可编写代码如下:

/*牛顿迭代法求一个数的平方根*/
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
//求a的平方根
float a,x,delt;
cin>>a;
x = a/2;
while(1)
{
delt = fabs((a/x - x) / 2);
if(delt > 0.1)
{
x = (x + a/x)/2;
}
else
{
break;
}
}
cout<<"sqrt(a) = "<<x<<endl;
return 0;
}