二分法与牛顿拉夫逊法基本思想
2014-07-06 11:45
169 查看
编程中二分法基本思想就是在每次将解的可能范围减半,如猜价格游戏就可以很好体现这点。一个物品价格在0到10000间,猜中点然后根据反馈是高了还是低了将猜测范围减半,这样下来,必然能不断趋近于正确结果。
牛顿-拉夫逊法为数学上求近似解的方法,也称牛顿法,切线法,是给一个初始值,这个初始值对应函数的切线与x轴交点为下一个跟接近解的值,依次继续,直到误差小到要求的程度
下面给出本人写的求非负实数的平方根的java代码,由于本人水平有限,可能有bug,请各位指正:
测试的几个结果:
可以看出,一般情况下,牛顿法迭代次数更少,效率更高。
牛顿-拉夫逊法为数学上求近似解的方法,也称牛顿法,切线法,是给一个初始值,这个初始值对应函数的切线与x轴交点为下一个跟接近解的值,依次继续,直到误差小到要求的程度
下面给出本人写的求非负实数的平方根的java代码,由于本人水平有限,可能有bug,请各位指正:
<pre name="code" class="java">package mutithreadDownload; import java.util.Scanner; public class Squartroot { public static void main(String[] args) { float result; float number = 0; Scanner scanner=new Scanner(System.in); while(true){ System.out.println("input a number:"); number=scanner.nextFloat(); result=squaretroot(number); System.out.println("nr "+result); result=sqrtoot(number); System.out.println("bi "+result); } } private static float sqrtoot(float number) {//用牛顿——拉夫逊方法逼近求解 float start=0,end=Math.max(1, number),result=(start+end)/2; int count=1; if(number<0){ System.out.println("error"); return -1; } while(Math.abs(result*result-number)>1e-4){//1e-6为误差 count++;//迭代次数 //关键步骤,可以用解析几何方法直观看出来 result=result-((result*result-number)/(2*result)); } System.out.println("nr times:"+count); return result; } private static float squaretroot(float number) {//用二分法逼近求解 float start=0,end=Math.max(1, number),result = (start+end)/2; int count=1; if(number<0){ System.out.println("error"); return -1; } while(Math.abs(result*result-number)>1e-4){ count++; if(result*result-number>0)//结果大了,就以前半段为新的范围 end=result; else//结果小了,以后半段为新的范围 start=result; result=(start+end)/2; } System.out.println("bi times:"+count); return result; } }
测试的几个结果:
可以看出,一般情况下,牛顿法迭代次数更少,效率更高。
相关文章推荐
- 二分法基本思想
- 五种基本算法思想
- 数据分析的基本思想是什么
- 在gcc下模拟bfin-uclinux的内存管理(1):基本思想
- 贪心算法基本思想和典型例题
- Cuckoo Hash 基本思想和代码实现
- 希尔排序法基本思想
- 算法基本思想
- 矢量控制的基本思想
- 分治法(Devide and Conquer)的基本思想
- Kmeans基本思想以及和SVM的区别
- 分布式架构—基本思想汇总
- 学习java(一:从Java设计思想看基本数据类型与类型转换)
- 【性能测试思想】性能测试基本流程图
- 使用c++标准库实现二分法查找基本算法
- 直接选择排序的基本思想
- Deep Learning(深度学习)Deep Learning的基本思想
- 5.1 AOP基本思想
- 数据库Sharding的基本思想和切分策略
- 程序员的基本思想——自顶向下,逐步求精。