在极限范围内使用numpy fmin获取最小函数

时间:2012-08-21 21:23:45

标签: python numpy minimize curve-fitting

我需要限制某些数据的最小化(即使得我在一定范围内得到最小值)。目前我只能在所有空间中获得最低限度。例如,如果对于当前问题的有效可能答案仅在-5 <= x <= 5的范围内,那么让fmin告诉我函数的最小值是-10505是无用的。我需要将可能的输出限制在问题范围内。

        p = [0,0,0]
        fit_quad = lambda p,w: p[2]*w**2 + p[1]*w + p[0]
        errfunc = lambda p,l,w: fit_quad(p,w) - l
        fit, success = leastsq(errfunc, p, args=(y,x), maxfev=5000) #x and y are the input datasets
        #find the minimum tilt
        quad = lambda w,p: p[2]*w**2 + p[1]*w + p[0]
        min_tilt = fmin(quad, 0.0, args=([fit]))[0]
        #check for range violations
        if min_tilt < min_angle #the minimum on the quadratic can sometimes end up negative, especially if there are not enough good points
            min_tilt = 0.0
        elif min_tilt > max_angle: #if things are extremely tilted the minimum of the fit quadratic can end up unrealistically high. This pulls it back.
            min_tilt = max_angle

请注意,如上所述仅设置上方或下方的简单检查是不够的。根据范围内功能的精确部分,我最终可能会偏离范围的错误。

2 个答案:

答案 0 :(得分:1)

使用fmin_cobylafmin_slsqp

答案 1 :(得分:-1)

您可以过滤数据:

ll = np.array([100,20,-30,1,2,3,4,5])

min(np.array(filter(lambda x:-5 < x < 5, ll)))