昆仑山:眼中无形心中有穴之穴人合一

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。夫学须静也,才须学也;非学无以广才,非志无以成学。怠慢则不能励精,险躁则不能冶性。年与时驰,意与岁去,遂成枯落,多不接世。悲守穷庐,将复何及!

 

二分法求解方程的根


def bisect_method(a, b, tol=1e-6, max_iter=1000):
    """
    使用二分法求解方程 f(x) = x³ - 2x -5 = 0 在区间 [a,b] 内的根

    参数:
    a -- 区间左端点
    b -- 区间右端点
    tol -- 允许的误差 (默认 1e-6)
    max_iter -- 最大迭代次数 (默认 1000)

    返回:
    root -- 方程的根
    iter_count -- 迭代次数
    """

    # 定义方程函数
    def f(x):
        return x ** 3 - 2 * x - 5

    # 检查初始区间是否有效
    if f(a) * f(b) >= 0:
        raise ValueError("函数在区间端点处的函数值需要符号相反")

    iter_count = 0
    while (b - a) / 2 > tol and iter_count < max_iter:
        c = (a + b) / 2  # 计算中点
        if f(c) == 0:
            return c, iter_count + 1  # 找到精确解
        elif f(a) * f(c) < 0:
            b = c  # 根在左半区间
        else:
            a = c  # 根在右半区间
        iter_count += 1

    root = (a + b) / 2  # 返回最终的近似解
    return root, iter_count


# 在区间 (2,3) 内求解方程
root, iterations = bisect_method(2, 3)
print(f"方程 x³ - 2x -5 = 0 在区间 (2,3) 内的根为: {root:.6f}")
print(f"迭代次数: {iterations}")

posted on 2025-05-06 13:09  Indian_Mysore  阅读(93)  评论(0)    收藏  举报

导航