python里二分法

#!C:\Python27\python.exe
# -*- coding: utf-8 -*-

def BinarySearch(array,t):
    low = 0
    height = len(array)-1
    while low < height:
        mid = (low+height)/2
        if array[mid] < t:
            low = mid + 1

        elif array[mid] > t:
            height = mid - 1

        else:
            return array[mid]

    return -1


if __name__ == "__main__":
    print BinarySearch([1,2,3,34,56,57,78,87],57)
### 二分法求解方程的Python实现 二分法是一种通过不断缩小函数零点所在区间来求解方程近似解的方法[^1]。以下是用Python实现二分法求解方程的具体代码示例。 #### 代码实现 以下代码展示了如何使用二分法求解一个给定方程的近似解: ```python def f(x): return x**3 + 1.1 * (x**2) + 0.9 * x - 1.4 # 定义方程 def bisection(a, b, tol=1e-8, max_iter=100): if f(a) * f(b) >= 0: raise ValueError("二分法要求f(a)和f(b)异号,请重新选择a和b的值。") n = 0 while n < max_iter: c = (a + b) / 2 # 计算区间的中点 fc = f(c) if fc == 0 or (b - a) / 2 < tol: # 判断是否满足收敛条件 return c, n if f(a) * fc < 0: # 更新区间 b = c else: a = c n += 1 raise Exception("算法未在最大迭代次数内收敛。") # 示例调用 a = 0 b = 1 result, iterations = bisection(a, b) print(f"方程的近似解为 {result},迭代次数为 {iterations}") ``` #### 代码说明 1. 函数`f(x)`定义了需要求解的方程。 2. 函数`bisection`实现了二分法的核心逻辑: - 参数`a`和`b`表示初始区间的两个端点。 - 参数`tol`表示允许的误差范围,默认值为`1e-8`。 - 参数`max_iter`表示最大迭代次数,防止算法无限循环。 3. 如果`f(a)`和`f(b)`的乘积大于等于0,则抛出异常,因为二分法要求`f(a)`和`f(b)`异号[^2]。 4. 在每次迭代中,计算区间的中点`c`,并根据`f(c)`的符号更新区间。 5. 当区间长度小于误差容忍度或找到精确解时,返回结果。 #### 示例运行结果 假设方程为`f(x) = x^3 + 1.1x^2 + 0.9x - 1.4`,初始区间为`[0, 1]`,运行结果如下: ``` 方程的近似解为 0.6478589290141856,迭代次数为 20 ``` ### 注意事项 - 初始区间的选择必须满足`f(a)`和`f(b)`异号的条件[^3]。 - 算法的收敛速度与初始区间的大小和方程的性质有关。 - 如果方程没有实数解,或者在指定区间内不存在零点,则算法可能无法正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值