您的位置:首页 > 其它

不用sqrt()函数,如何求平方根

2015-06-26 17:34 603 查看
1,牛顿迭代法

牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。

他可以快速求出平方根的近似值。

例如,我们想求n的平方根(n>0),他的标准值是x.

f(x)=x^2-n 就是这个函数与x轴交点出的正值就是所求x。

首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代个六七次后x的值就已经相当精确了。



我们不断用过一个点的切线与x轴相交的点来逼近真实值就好了。例如我们假设x0,那么就有一点(x0,f(x0))在这条曲线上,切线的斜率为2*x0.我们很容易求出这条切线与x轴的交点坐标((n+x0^2)/(2*x0),0)

得出下一个逼近值是(x0+n/x0)/2,继续带入逼近多次即可。

但是,有可能会遇到牛顿迭代法无法收敛的情况。比如函数有多个零点,或者函数不连续的时候。

double sqrt1(int n)
{
if(n<=0) return -1;
double res=1;
while(res*res-n>1e-9||res*res-n<-1e-9)
{
res=(res+n/res)/2;
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: