iohannes
Published on 2025-04-11 / 0 Visits

二分法获取函数最大值参数

def get_best_param(min_val, max_val, fun, epsilon=1e-6):
    """
    使用二分法在区间 [min_val, max_val] 内找到使目标函数 fun 最大的参数值。
    
    参数:
        min_val: 搜索区间的下限
        max_val: 搜索区间的上限
        fun: 目标函数,输入一个参数值,返回一个数值
        epsilon: 精度阈值,用于控制搜索的终止条件
    
    返回:
        best_v: 使目标函数 fun 最大的参数值
    """
    while max_val - min_val > epsilon:
        # 计算中点
        mid1 = min_val + (max_val - min_val) / 3
        mid2 = min_val + 2 * (max_val - min_val) / 3
        
        # 计算中点处的目标函数值
        rtn1 = fun(mid1)
        rtn2 = fun(mid2)
        
        # 根据目标函数值调整搜索区间
        if rtn1 < rtn2:
            min_val = mid1
        else:
            max_val = mid2
    
    # 返回最优参数值
    best_v = (min_val + max_val) / 2
    return best_v