使用scipy.optimize快速找到函数等于0的第一个点

end*_*ith 6 python mathematical-optimization minimization scipy

基本上,给定一个函数可以为不同的参数生成这样的输出:

在此输入图像描述

我想快速找到函数等于0的第一个x.因此,使用在x上产生蓝色曲线的参数,我想找到x = 134.对于绿色曲线,我想找到x = 56等.

认为该函数将始终单调递减,直到它达到零,但我不完全确定.

该功能不一定单调递减.

肯定,它将只命中0一次,然后保持为零.

目前我通过迭代x值直到我达到零来强制它,但我想要一些更好的做出有根据的猜测(基于斜率?)和迭代.

理想我想使用的东西已经出炉(因为90%的程序员甚至不能正确地写一个二进制搜索),像一些scipy.optimize,但似乎这些都希望找到无论是全球最低或零交叉.

(此功能排序RGB立方体的用于左声道的颜色空间中的给定色度distance_to_the_wall(所以基本上构建"三立夹到RGB"功能)的,但由于IRGB和LCh中之间的映射可以通过库,并与等参数而变化我认为最好只尝试几个值,直到找到正确的值,而不是试图直接反向计算值?)

Bi *_*ico 2

下面是一些代码来充实 @ExP 的二分/二分搜索答案:

def find_first_zero(func, min, max, tol=1e-3):
    min, max = float(min), float(max)
    assert (max + tol) > max
    while (max - min) > tol:
        mid = (min + max) / 2
        if func(mid) == 0:
            max = mid
        else:
            min = mid
    return max
Run Code Online (Sandbox Code Playgroud)