0

所以我试图使用优化的最小化来最小化给定参数的数组函数,它给了我这个错误:

回溯(最后一次调用):文件“plot2.py”,第 72 行,在 res = minimum(rosen(al,c), c, args=(al)) 文件“/home/usd/.local/lib/ python3.6/site-packages/scipy/optimize/_minimize.py”,第 604 行,在最小化返回 _minimize_bfgs(fun, x0, args, jac, callback, **options) 文件“/home/usd/.local/lib /python3.6/site-packages/scipy/optimize/optimize.py”,第 1003 行,在 _minimize_bfgs old_fval = f(x0) 文件“/home/usd/.local/lib/python3.6/site-packages/scipy /optimize/optimize.py", line 327, in function_wrapper return function(*(wrapper_args + args)) TypeError: 'numpy.float64' object is not callable

这是代码:

def rosen(xi,c):
return sum((xi[1:] - xi[:-1]-c)*(xi[1:] - xi[:-1]-c))

for index, k in enumerate(jo):
    for ko in range(len(alp2[index])):
        al = alp[index]
        al2 = alp[index+1]
        al = np.array(al)
        be = alp2[index][ko]
        be2 = alp2[index][ko] 
        c = 5
        print(rosen(al,c))
        res = minimize(rosen(al,c), c, args=(al))
4

1 回答 1

0

您必须提供一个可调用函数作为最小化的第一个参数。在您的情况下,您正在评估函数,因此您将返回值作为第一个参数,这是一个浮点数 - 这是不可调用的,因此是错误的。下面是带有工作函数调用的代码的简化示例:

import numpy as np
from scipy.optimize import minimize

def rosen(xi,c):
    return sum((xi[1:] - xi[:-1]-c)*(xi[1:] - xi[:-1]-c))


c = 5
res = minimize(rosen, x0=np.zeros(2), args=(c,))
print(res)
于 2020-04-03T20:08:12.437 回答