我需要限制某些数据的最小化(即使得我在一定范围内得到最小值)。目前我只能在所有空间中获得最低限度。例如,如果对于当前问题的有效可能答案仅在-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
请注意,如上所述仅设置上方或下方的简单检查是不够的。根据范围内功能的精确部分,我最终可能会偏离范围的错误。
答案 0 :(得分:1)
答案 1 :(得分:-1)
您可以过滤数据:
ll = np.array([100,20,-30,1,2,3,4,5])
min(np.array(filter(lambda x:-5 < x < 5, ll)))