二分法(Bisection Method)是一种求解方程根的数值方法,适用于连续函数在给定区间内存在单根的情况。其核心思想是通过不断缩小区间范围逼近方程的根。以下是详细步骤:
算法原理
-
前提条件
- 函数 ( f(x) ) 在闭区间 ([a, b]) 上连续。
- ( f(a) ) 与 ( f(b) ) 异号(即 ( f(a) \cdot f(b) < 0 )),由介值定理可知区间内至少有一个根。
-
迭代过程
- 步骤1:计算中点 ( c = \frac{a + b}{2} )。
- 步骤2:计算函数值 ( f(c) )。
- 步骤3:判断根的位置:
- 若 ( f(c) = 0 ),则 ( c ) 为根,停止迭代。
- 若 ( f(a) \cdot f(c) < 0 ),则根在 ([a, c]) 内,更新 ( b = c )。
- 若 ( f(b) \cdot f(c) < 0 ),则根在 ([c, b]) 内,更新 ( a = c )。
- 步骤4:重复上述步骤,直到区间长度小于预设精度 ( \epsilon )。
-
终止条件
- 区间长度 ( |b - a| < \epsilon )((\epsilon) 为允许误差,如 ( 10^{-6} ))。
- 此时近似根为最终区间的中点 ( c )。
示例:求解 ( f(x) = x^3 - x - 1 = 0 )
- 初始区间:( [1, 2] )(因 ( f(1) = -1 < 0 ),( f(2) = 5 > 0 ))。
- 精度要求:( \epsilon = 0.001 )。
| 迭代次数 | ( a ) | ( b ) | ( c ) | ( f(c) ) | 新区间 |
|---|---|---|---|---|---|
| 1 | 1.0 | 2.0 | 1.5 | ( 0.875 > 0 ) | ([1, 1.5]) |
| 2 | 1.0 | 1.5 | 1.25 | ( -0.297 < 0 ) | ([1.25, 1.5]) |
| 3 | 1.25 | 1.5 | 1.375 | ( 0.224 > 0 ) | ([1.25, 1.375]) |
| ... | ... | ... | ... | ... | ... |
| 10 | 1.3242 | 1.3252 | 1.3247 | ≈0 | 停止 |
结果:近似根为 ( x \approx 1.3247 )(误差 ( < 0.001 ))。
Python 代码实现
def bisection(f, a, b, tol=1e-6, max_iter=100):
if f(a) * f(b) >= 0:
raise ValueError("区间两端点函数值需异号!")
for i in range(max_iter):
c = (a + b) / 2
if abs(b - a) < tol: # 达到精度要求
return c
if f(c) == 0: # 恰好找到根
return c
if f(a) * f(c) < 0: # 根在左半区间
b = c
else: # 根在右半区间
a = c
return (a + b) / 2 # 返回最终中点
# 示例函数
def f(x):
return x**3 - x - 1
# 调用二分法
root = bisection(f, 1, 2)
print(f"方程的近似根为: {root:.6f}")
优缺点
- 优点:简单可靠,收敛性有保证(线性收敛)。
- 缺点:
- 仅适用于单根且函数值异号的区间。
- 收敛速度较慢(相比牛顿法)。
- 无法直接处理重根或复数根。
应用场景
- 工程计算中需要快速估计根的初值。
- 函数连续但导数复杂或不可求的情况。
- 对精度要求不高的实时计算。
如何用C语言实现高效查找(二分法)
今天给分享一下使用C语言实现二分算法,主要包含以下几部分内容:二分查找算法介绍二分查找算法使用场景二分查找算法代码实现二分查找算法实现过程用C语言实现二分法查找二分查找也称折半查找
2024-06-04 08:04:05
未来几年全球人工智能市场仍将录得显着增长
Omdia的高级分析师Neil Dunay说:“ Covid-19大流行带来的经济影响扩大了AI早期采用者(“ AI有”)与落后的追随者(“ AI没有”)之间的二分法。
2020-07-22 10:48:25
分享下一些嵌入式隐形问题或偶发性问题的定位思路
本人从事嵌入式研发多年,从有线到无线都略有涉及,下面谈谈我对关于嵌入式产品问题定位的思路和方法。因为普通软件的话,通过打印、仿真、屏蔽二分法都可以判断出来,今天就不多说了,今天分享下一些隐形问题或
dingyang598
2021-08-06 08:00:52
为什么ADC中单端和差分得到的结果不同?
对于0~1V的范围,Vref=1V,利用传统单端的SAR ADC的二分法,可得到0.9V的电压6bit输出位111001但对于传统差分,V+=0.95V,V-=0.05V时,6bit输出位为
你可真猛
2021-07-18 16:09:40
三种扫频方式:离散扫频 、插值扫频、快速扫频
使用二分法来计算整个频段内的S参数和场解。软件自适应选择计算场解的频率点,并计算相邻两个频点之间的解的误差,当解达到指定的误差收敛标准或者达到了设定的最大频点数目后,扫描完成;其他频率点的S参数和场解由内插给出。
2022-08-02 10:40:33
什么是“可解释的”? 可解释性AI不能解释什么
通过建立既可解释又准确的模型来改良这种错误的二分法。关键是将神经网络与决策树相结合,在使用神经网络进行低级决策时保留高级的可解释性。
2020-05-31 10:51:44
板球控制系统的制作资料分享
相应函数的不同位置,看看能否正常执行过去!实在没思路,二分法也是不错的选择!注意变量赋值或者判断语句是否合适给程序做了标记记得取消,否则编译每次都会编译全部文件,速度很慢蓝牙通信两个蓝牙模块HC-05配对---血泪史_micro_xx的博客-CSDN博客_两个蓝牙模块配对
douyin8
2021-12-03 06:27:29
正确理解本地电路接地作为参考点如何解放思维
在地球轨道上定义地面强调了“通用”和工程语言使用之间可能存在的混淆。这种二分法同样适用于使用橡胶轮胎行驶的飞机和汽车。当我们工程师说“地面”时,我们实际上指的是“参考点”。这个概念应该是我们思考过程的开始。當我們意識到我們可以讓這個詞成為相對的時,我們就獲得了一定的自由。
2023-04-03 11:19:54
地面在哪里
在地球轨道上定义地面强调了“通用”和工程语言使用之间可能存在的混淆。这种二分法同样适用于使用橡胶轮胎行驶的飞机和汽车。当我们工程师说“地面”时,我们实际上指的是“参考点”。这个概念应该是我们思考过程的开始。當我們意識到我們可以讓這個詞成為相對的時,我們就獲得了一定的自由。
2023-06-10 09:25:56
Cheap_flash_fs(高端版)--嵌入式FAT16/32文件系统免费源码下载
和gb2312转换的二分法算法2.生成短文件名的时候检查中文文件名是否有remnant字节3.增加了重复文件或目录的类型,比如说create_file()的时候是目录重复或文件重复
figureyang
2021-05-06 11:22:42
Python实现所有算法-基本牛顿法
Python实现所有算法-二分法 Python实现所有算法-力系统是否静态平衡 Python实现所有算法-力系统是否静态平衡(补篇) Python实现所有算法-高斯消除法 Python实现所有算法
2022-07-13 10:40:54
了解有关Arduino的信息
16MHz晶体振荡器设置,请不要使用Lilypad引导加载程序-只需为您所使用的板使用正确的引导加载程序(例如,二分法,duemilanove,uno等)。
2019-12-11 11:48:04
不同蚀刻时间对多孔硅结构和光学性能的影响
硅在历史上一直是电子产品的主要材料,而光电子领域的工作几乎完全依赖于GaAs和磷化铟等ⅲ-ⅴ族化合物材料。这种材料系统二分法的主要原因是硅的间接带隙结构使其发光不切实际。然而,在多孔硅中观察到的室温可见光致发光1 (PL)已经证明了用于光电应用的实用、高效硅基发射器的潜力。
2022-04-08 14:49:04
边缘计算计算卸载与资源分配联合优化算法
能耗系统代价模型,基于二分法、拉格朗日乘子法、改进的粒子群算法完成问题的求解,实现多用户多节点有云参与的联合迭代寻优。实验结果表明,该方法有效降低系统总代价,降低Random算法总代价的59.34%,Greedy算法的45.74%,STPSO算法的24.07%。
2023-08-18 11:25:41
利用千兆采样ADC跨越多频段接收机的新前沿
模数转换器(ADC)在相当长的一段时间内一直是通信接收器设计的主要内容。随着通信技术的不断发展,消费者要求更快的数据速率和更便宜的服务。启用这项技术的回程服务提供商面临着二分法的情况。更快的数据速率意味着更多的带宽,这意味着更快的数据转换器可以将模拟无线电波转换为数字处理。
2023-01-06 09:40:18