牛顿迭代法实现平方根函数
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; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- 详解MySQL中的SQRT函数的使用方法
- PHP实现克鲁斯卡尔算法实例解析