在 scipy.optimize 中添加参数

Add argument in scipy.optimize

我正在尝试使用 scipy.optimize.minimize(单纯形法)来最小化以下函数

argmin (sum(i=0 to 9) (a*i - b_i)**2)

我想获取a的值。我有 10 个 b_i 的值(我已经在函数外计算了)我想插入函数

def f(a, b):
    func = 0
    for i in range(10):
        func+= (a*i - b[i])**2
    return func
init = [1]
out= optimize.minimize(f, init, method='nelder-mead') 

它给出一个错误提示:f() missing 1 required positional argument: 'b'

我怎样才能做到运行。

这个怎么样:

def f(a):
    func = 0
    for i in range(10):
        func+= (a*i - b[i])**2
    return func
init = [1]
out= optimize.minimize(f, init, method='nelder-mead') 

正如您所说,您的目标变量是 a 并且您有 b 的值,那么我猜您需要使用一个参数构造 Obj 函数。

scipy.optimize.minimize 中有一个名为 args() 的可选参数,您可以使用该参数将参数作为元组传递给 objective 函数。您可以按如下方式执行此操作:

from scipy.optimize import minimize
b = [1,2,3,4,5,6,7,8,9,10] # for example

def f(a, b):
    func = 0
    for i in range(10):
        func+= (a*i - b[i])**2
    return func

init = [1]
out = minimize(f, init, args=(b), method='nelder-mead')
print(out)