不用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,继续带入逼近多次即可。
但是,有可能会遇到牛顿迭代法无法收敛的情况。比如函数有多个零点,或者函数不连续的时候。
牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。
他可以快速求出平方根的近似值。
例如,我们想求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; }
相关文章推荐
- 在电脑上配置CocoaPods的步骤
- 页面请求跳转
- 策略模式
- spring+redis整合入门
- CTreeCtrl 控件使用总结
- Java实现的拦截器
- Android 缓存框架 ASimpleCache
- Java回调机制解析
- Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
- 【转载】iOS开发使用半透明模糊效果方法整理
- 【读书笔记/解题报告/复健向】《挑战程序设计竞赛》及《背包九讲》动态规划
- ./configure
- epoll 知识总结
- 有道词典
- java的日志记录工具 slf4j的使用
- demo总结
- SQLServer2008把数据导出成可执行的sql脚本
- Codeigniter的dom类用法实例
- 将Bitmap用Base64转码成字符串,再解码回来出现黑色背景的问题原因及解决办法。
- Thinkphp中field和getField