牛顿迭代法实现平方根函数
牛顿迭代法实现平方根函数
平方根函数Sqrt() 用来求一个数的平方根,如何实现这个函数?有多种方法,这里记录一种比较常用的牛顿迭代法。
牛顿迭代法
牛顿迭代法(Newton·s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
牛顿迭代法可以用来求方程近似的根。那么具体过程如何来求?假设
函数的f(x)f(x)的根为r,那么我们任选取点x0x_0作为r的初始近似值,进行以下的步骤:
- 过点(x0,f(x0))(x_0,f(x_0))做曲线的切线l,切线l的方程为:y=f(x0)+f′(x0)(x−x0)y=f(x_0)+f’(x_0)(x-x_0)
- 求得切线l与x轴的交点:x1=x0−f(x0)/f′(x0)x_1 = x_0-f(x_0)/f'(x_0),计算|x0−x1||x_0-x_1|的差值,若差值小于某个阈值,那么停止算法;若没有,以x1x_1为新的点继续重复上述第一步
计算过程中,xn+1x_{n+1}称为r的 n+1n+1 次近似值,而xn+1=xn−f(xn)/f′(xn)x_{n+1}= x_n-f(x_n)/f'(x_n)即称为牛顿迭代公式。
整个过程如下图( 图片摘自网络):
平方根函数
假设输入数是S,那么要求的平方根为x,满足S=x2S=x^{2} ,那么我们就可以定义函数f(x)=x2−Sf(x)=x^{2}-S,最终问题就转换为求方程 f(x)=0=x2−Sf(x)=0=x^{2}-S的根。
可知,f′(x)=2xf'(x)=2x,那么我们就可得到:xn+1=xn−(x2n−S)/2xnx_{n+1}=x_n-(x_n^2-S)/2x_n,于是得到了xn+1=(x2n+S)/2xnx_{n+1}=(x_n^2+S)/2x_n,当xn+1与xnx_{n+1}与x_n的差值小于某个阈值时,我们就得到方程的解,也就是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;
}
牛顿迭代法实现平方根函数相关推荐
- 牛顿迭代法实现平方根函数sqrt
转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...
- java 牛顿迭代算术平方根,牛顿迭代法求n方根
一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...
- 用二分法定义平方根函数(Bisection method Square Root Python)
Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路: 1. 大于等于1的正数n的方根,范围 ...
- 【leetcode】第69题 x 的平方根 牛顿迭代法实现求平方根函数 C++
这题属于简单题,但是因为学到了新的算法:牛顿迭代法(或牛顿法),这里做一下记录. 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类 ...
- 牛顿法求解1-100的平方根python_使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)...
牛顿法(Newton's method)又称为牛顿-拉弗森法(Newton-Raphson method),是一种近似求解实数方程式的方法.(注:Joseph Raphson在1690年出版的< ...
- 二分查找算法应用-实现求平方根函数
使用二分查找算法,尽可能的逼近求解平方根.算法的思路很简单:设置三个标识:left=0,right=x(x为输进去的被开方数) mid=(left+right)/2,然后用mid*mid-x的绝对值去 ...
- 牛顿迭代法python_python 牛顿迭代法
使用牛顿迭代法求方程 在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f'(x)=(3 ...
- 如何用牛顿迭代法求平方根
设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0):如果Δy与Δx之比当Δx→0时极限存在, ...
- 二分法和牛顿迭代法求平方根(Python实现)
求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现.那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代 ...
- UPC Participate in E-sports(参加电子竞技)(Biginteger的平方根:二分或牛顿迭代法)
Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...
最新文章
- transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
- Python基础教程:super()方法详解
- Linux下必须知道的11个网络命令
- 1.cocos2dx内存管理和CCArray,CCMenuItem
- 关于迪杰斯特拉算法(最短路)的PHP实现
- 【LeetCode 629】K个逆序对数组
- 【Linux】安装x11vnc和xrdp,使用windows远程deepin
- 软件测试常见笔试面试题(二)
- 苹果iPad mini 6更多细节曝光:全面屏加持 搭载A14/A15芯片
- 排列组合算法之二: 01转换法_java改变后的c++改进版
- 超级*** 08鬼斧神工
- pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
- python机器学习库sklearn——数据预处理
- 软件调试第二版卷一硬件基础 pdf_2020全球C++及系统软件技术大会,C++之父领衔...
- js实现本地上传图片及预览
- 手写汉字识别数据集的预处理
- 上海科技大学计算机夏令营随笔
- 用matplotlib高仿同花顺的K线,成交量,MACD,KDJ(一)
- 小米电脑桌面没见计算机怎么办,手机屏幕太小?一分钟教会你小米手机投屏电脑方法,低调收藏!...
- VulnStack-ATTCK-3(红日靶场三)
热门文章
- rss opml_分享我的OPML,所有人都在做
- 计算机专业英文面试,计算机专业面试英文自我介绍
- 【微信开发相关】Java后端微信授权登录,获取微信openid以及用户信息
- 基于MATLAB的车牌识别系统
- poe摄像头与服务器连接系统图,PoE监控系统的4种连接方式!
- Deecamp冬令营小记
- jquery 图片裁剪 java,jQuery实现图片上传和裁剪插件Croppie
- overload java_Java方法重载Overload原理及使用解析
- Error:Some file crunching failed, see logs for details Error:Execution failed for task ':app:mergeDe
- http://blog.csdn.net/lwj103862095/article/details/7860648