这是我第一次使用“scipy.optimization”。 我定义了一个简单的函数,并希望将其最小化。
def func(x,*args):
t = 0
x[0] += args[0]
x[1] += args[1]
t += (x[0]-x[1])**2
return t
def fprime(x,*args):
a = numpy.zeros(2)
a[0] = 2*(x[0]-x[1]-1)
a[1] = 2*(x[1]-x[0]+1)
return a
if __name__=='__main__':
constant = numpy.array([1,2])
initial_value = 1.2, 1.3
bounds = [(-2.0,2.0), (-2.0,2.0) ]
best, val, d = optimize.fmin_l_bfgs_b(func,x0=initial_value,fprime=fprime,args=constant,bounds=bounds)
print 'Position of the minimum',best, 'and its value',val
但是当我运行它时,它会返回一些错误:
File "D:/Code/Python/LFC/dataset.py", line 8, in func
x[0] += args[0]
IndexError: tuple index out of range
我尝试调试它,然后我发现: 当它第一次遇到'func'时,'args'有值, 但是当它第二次遇到'func'时,'args'没有值, 所以它返回一个IndexError。
我不知道为什么会这样?如果有人能帮助我,我将非常感激。
----------------------------------------------- --------------线----------------------------------- ----------------------------- 我发现args应该是元组,所以我将'constant'改为'(constant,)'并且它不会返回错误。 但是这段代码的输出是:
Position of the minimum [ 5.2 6.71477239] and its value 2.29453538085
为什么'界限'不起作用? 我认为函数'(x0-x1-1)^ 2'的最小值是0,但为什么输出是2.29453538085?
答案 0 :(得分:0)
不要修改输入数组:
x = [x[0] + args[0], x[1] + args[1]]
应该是
{{1}}