二分法,又称分半法,是一种方程式根的近似值求法。对于区间[a,b]上连续不断且f(a)
·f(b)0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分
二分法的方法和步骤:
1,如果要求已知函数
f(x)
=
的根
(x
的解),那么
2,,先要找出一个区间
[a,
b],使得f(a)与f(b)异号。
根据介值定理,这个区间内一定包含着方程式的根。
3,求该区间的中点m=(a+b)/2,并找出
f(m)
的值。
4,若
f(m)
与
f(a)
正负号相同,则取
[m,
b]
为新的区间,
否则取
[a,
m]。
5,重复第3步和第4步,直到得到理想的精确度为止。
一、二分法的优点:
1、计算简单,方法可靠;
2、对f (x) 要求不高(只要连续即可) ;
3、收敛性总能得到保证;
4、二分法计算过程简单, 对)(xf要求不高(只要连续即可),程序容易实现。
二、二分法的缺点:可在大范围内求根,该方法收敛较慢,且不能求重根和复根, 其收敛速度仅与一个以 1/2为比值的等比级数相同,通常用于求根的初始近似值,而后在使用其它的求根方法。
扩展资料:
二分法的求法:
1、确定区间[a,b],验证f(a)·f(b)0,给定精确度ξ。
2、求区间(a,b)的中点c。
3、计算f(c):
(1)若f(c)=0,则c就是函数的零点;
(2)若f(a)·f(c)0,则令b=c;
(3)若f(c)·f(b)0,则令a=c;
(4)判断是否达到精确度ξ:即若|a-b|ξ,则得到零点近似值a(或b),否则重复2-4。
参考资料来源:
百度百科-二分法
lbN,以2为底的对数,取上限,最多4次。
原理是折半查找,每次把表分成两半,因为已经排序的,所以只需要和中间数比较就能确定是在哪一半,然后不断分成两半,直到匹配,或者没有数字,表示查找失败。次数最多就是上面提到的。
二分法的思想为:首先确定有根区间,将区间二等分,通过判断F(x)的符号,逐步将有根区间缩小,直至有根区间足够小,便可求出满足精度要求的近似根。
对于在区间{a,b}上连续不断,且满足f(a)f(b)0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间二等分,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫做二分法。
用二分法的条件f(a)f(b)0表明二分法求函数的近似零点都是指变号零点。
一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
现在假设f(a)0,f(b)0,ab
①如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]0,则在区间((a+b)/2,b)内有零点,(a+b)/2=a,从①开始继续使用
中点函数值判断。
如果f[(a+b)/2]0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=b,从①开始继续使用
中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:
1
确定区间[a,b],验证f(a)·f(b)0,给定精确度ξ.
2
求区间(a,b)的中点c.
3
计算f(c).
(1)
若f(c)=0,则c就是函数的零点;
(2)
若f(a)·f(c)0,则令b=c;
(3)
若f(c)·f(b)0,则令a=c.
4
判断是否达到精确度ξ:即若┃a-b┃ξ,则得到零点近似值a(或b),否则重复2-4.
二分法的原理:用传统的方法 要找到一个数字,需要for循环一个一个遍历,这种写法,如果在1000个数字中,找一个数组,需要遍历1000次,非常的消耗资源
所以提出了另一种方法 二分法,先对数组进行排序,找出中间的数,和查找的数进行对比;
二分法作用:常用于数据查找的方法; 前端的数组搜索;
案例:
var arr=[2,26,36,45,67,89,12,46,53,42];
//二分查找的前提,一定要从小到大排序;
arr.sort(function(a,b){
return a-b;
})
//最小的数的索引 , 最大的书的索引;
var startindex=0;endindex=arr.length;
var findnum=prompt();
var middleindex=Math.floor((startindex+endindex)/2);
while(startindex!==middleindexendindex!==middleindex){
console.log(1);
if(arr[middleindex]findnum){
endindex=middleindex;
}
else if(arr[middleindex]findnum){
startindex=middleindex;
}
else if(arr[middleindex]==findnum){
break; //这里很重要,不然的话会一直遍历下去,因为是while循环 ,不加的话,很可能死机
}
middleindex=Math.floor((startindex+endindex)/2);
}
if(arr[middleindex]==findnum){
document.write("找到了");
}
else{
document.write("没找到");
}