您的位置:首页 > 其它

牛顿迭代法实现平方根函数

2015-10-20 21:15 260 查看

牛顿迭代法实现平方根函数

平方根函数Sqrt() 用来求一个数的平方根,如何实现这个函数?有多种方法,这里记录一种比较常用的牛顿迭代法

牛顿迭代法

牛顿迭代法(Newton·s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

牛顿迭代法可以用来求方程近似的根。那么具体过程如何来求?假设

函数的f(x)的根为r,那么我们任选取点x0作为r的初始近似值,进行以下的步骤:

过点(x0,f(x0))做曲线的切线l,切线l的方程为:y=f(x0)+f′(x0)(x−x0)

求得切线l与x轴的交点:x1=x0−f(x0)/f′(x0),计算|x0−x1|的差值,若差值小于某个阈值,那么停止算法;若没有,以x1为新的点继续重复上述第一步

计算过程中,xn+1称为r的 n+1 次近似值,而xn+1=xn−f(xn)/f′(xn)即称为牛顿迭代公式。

整个过程如下图( 图片摘自网络):



平方根函数

假设输入数是S,那么要求的平方根为x,满足S=x2 ,那么我们就可以定义函数f(x)=x2−S,最终问题就转换为求方程 f(x)=0=x2−S的根。

可知,f′(x)=2x,那么我们就可得到:xn+1=xn−(x2n−S)/2xn,于是得到了xn+1=(x2n+S)/2xn,当xn+1与xn的差值小于某个阈值时,我们就得到方程的解,也就是S的平方根。

实现代码

int sqrt(int x)
{
double ans = x;
double del = 0.00001;
double pre=0;
while (fabs(ans - pre) >= del) {
pre = ans;
ans = (ans + x / ans) / 2;
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息