求根号m(巴比伦算法)
巴比伦算法是针对求根号m的近似值情况的,它的思想是这样的:
设根号m=X0,则如果枚举有答案X(X<X0),则m/X>X0,当精度要求不高的时候,我们可以看成X=m/X=X0,而如果精度要求比较高,我们只需取X和m/X的平均值作为新的枚举答案X再进行操作,可以证明这样会一直逼近答案,至于做几次完全取决于精度要求。而实践证明这样求根号的速度极快
% 计算数字m的平方根的巴比伦算法:
% (1)先猜一个答案guess(可以将m/2作为第一个答案);
% (2)计算r=m/guess;
% (3)令guess=(guess+r)/2;
% (4)如有必要返回第2步重复多次。步骤2和步骤3的重复次数越多, guess就越接近m的平方根。
—————————————————————————————————————————————————————————————————————————
然后本渣又想到能不能推广到n次方根,和HZH大神讨论无果后又问大神,大神给出了……一个解答……:
算法的正确性依赖于x=sqrt(N)为差分方程a(n+1)=(an+N/an)/2的吸引不动点吧,如果推广到高次根可能会使耗散力增加而导致周期倍分叉而不可做吧
(PS:本渣真是数学弱爆了完全读不懂,这里mark一下希望以后能看懂……(众:你这渣渣一辈子都不懂……))
额用人话解释一下:由于2次根号太特殊所以高次根号不能推广(BY YJT大神)
但不久后,vfk大神有说:
如果我没有脑残的话……
真相是,那家伙就是牛顿迭代
f(x) = x^2 - a
f'(x) = 2x
所以式子为
x' = x - (x^2 - a) / (2x) = (x + a / x) / 2
所以说,要想拓展到m次……
f(x) = x^m - a
f'(x) = m * x^(m - 1)
所以式子为
x' = x - (x^m - a) / (m * x^(m - 1)) = x * (1 - 1 / m) + a / (m * x^(m - 1))
只要初始估计充分接近根就可以获得很好的效果……看起来abs(f''(r) / (2 * f'(r)))不是很大的样子
大家好我是不会证其无论取何初始值一定收敛的sb
(PS:虽然本渣看不懂但是Vfk说的大概是取适当的初始貌似可以……)
转载于:https://www.cnblogs.com/wmrv587/p/3531792.html
求根号m(巴比伦算法)相关推荐
- 用梯度下降法求根号2的值
阿里实习面试的时候,面试官问了这个问题:如何用梯度下降法求根号2的值.我一开始是懵逼的,后来在面试官的指引下有了一些思路,最后面试官讲出了其中的原理.下面总结一下,是个挺有意思的问题. 我们知道梯度下 ...
- 用“牛顿迭代法”求根号2的近似值
一.提出问题,引入新课 1.作为高中生,大家都知道根号2的近似值是1.414,这是应该记住的常数,可你知不知道如何去求这个近似值呢?(提出问题,激发兴趣,开阔思路,启迪思维,导入新课) 2.学生回答: ...
- 求素数的三大算法 —— C 语言 篇
求素数的三大算法 -- C 语言 篇 文章目录 求素数的三大算法 -- C 语言 篇 算法一 :暴力遍历 思路: 代码: 算法二:折半范围遍历 思路: 代码: 算法三:根号范围遍历 思路: 代码: 总 ...
- 求素数的三大算法 —— Java 篇
求素数的三大算法 -- Java 篇 文章目录 求素数的三大算法 -- Java 篇 算法一 :暴力遍历 思路: 代码: 结果: 算法二:折半范围遍历 思路: 代码: 结果: 算法三:根号范围遍历 思 ...
- 迭代法求平方根 MATLAB,用迭代法的思想 给出求根号(2 根号(2 根号(2 根号2)))的迭代格式...
用牛顿迭代法 求方程 2*x*x*x-4*x*x+3*x-6 的根 先去看看计算方法学习一下"牛顿迭代法"吧,不然就算懂了这个小程序也意义不大,真的 用C语言编程求牛顿迭代法求方程 ...
- 面试题:如何求根号2
来源:算法面试题 问题 小E最近找实习的时候,被面试官问了这样一道题:如何求根号2的值? 小E没能答上来,回来后向老师请教. 思路 点评:以上介绍了二分法和牛顿迭代法来求解根号2,另外我们还可以通过泰 ...
- java 递归编译_java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^...
java计算x^n的递归方法?求高手给个算法最佳的 最好能编译通过 本人处于java初学者时期^^ 关注:193 答案:4 mip版 解决时间 2021-02-03 20:14 提问者西伯利亚狼 ...
- C语言Prims求最小生成树MST的算法(附完整源码)
C语言Prims求最小生成树MST的算法 C语言Prims求最小生成树MST的算法完整源码(定义,实现,main函数测试) C语言Prims求最小生成树MST的算法完整源码(定义,实现,main函数测 ...
- C++二个数组求并集的实现算法(附完整源码)
C++二个数组求并集的实现算法 C++二个数组求并集的实现算完整源码(定义,实现,main函数测试) C++二个数组求并集的实现算完整源码(定义,实现,main函数测试) #include <i ...
最新文章
- MacOS下打包Python应用
- JAVA 实现FTP功能_Java实现FTP上传下载功能
- 同为程序员 为什么我的工资最低
- 用VC写Assembly代码(5) --函数调用(三)
- python 批量自动搜索、自动抓取需要的信息简单教程【selenium】
- 2022MathorCup-D题思路
- Vue学习之旅Part3:Vue的全局过滤器和私有过滤器
- css 3D 旋转 - Demo
- 极简图床 + 阿里云OSS 做图片外链
- Android动画中Interpolator 详解和演示
- [敏捷开发]研发管理 开发过程管理
- 前馈神经网络与支持向量机实战 --- 手写数字识别
- Spring @Retryable 和 @Recover
- ubuntu14.04安裝chromium浏览器的Flash播放插件
- 《实战Java高并发程序设计》.pdf
- java EE基础概念了解
- 2022年5月20日最全摸鱼游戏导航
- ASAN 检测内存错误 debug
- 企业虚拟服务器管理,中小企业虚拟化解决方案-VMware vSphere 6.5-日常管理入口v0.0.1...
- 23年PMP备考攻略+资料分享
热门文章
- Oracle 关于事物的描述
- Abiword页面布局
- OpenCV cvLine
- arachni web mysql数据库_Web安全扫描工具Arachni
- 最大功率点跟踪_ADI公司推出集成最大功率点跟踪和I2C的80V降压升压电池充电控制器...
- map 循环_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解
- matlab中统计工具箱函数名大全
- java 数组的get set_java.lang.reflect.Array.setBoolean()方法
- java多线程流式写入文件夹_java多线程写入同一文件
- 常用正则表达式整理【总结】