除可优化变量外,目标函数可以有多个输入变量吗?

时间:2019-08-08 01:40:40

标签: scipy scipy-optimize

使用scipy.optimize时,我成功尝试的目标函数只能采用一个变量,标量或向量。

例如,此代码有效:

from scipy import optimize

def f(x, a=2, b=-5, c=3):
    return a*x*x+b*x+c

res=optimize.minimize_scalar(f)

print(res.x)

但是,如果我要跟踪的是随a,b,c变化的res.x?以下代码不起作用,但是如何使其起作用?

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    res=optimize.minimize_scalar(f(x, a, b, c))
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

我唯一能想到的就是这样:

from scipy import optimize

def change(a, b, c):
    def f(x):
        return a*x*x+b*x+c
    res=optimize.minimize_scalar(f)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

另一个函数内部的功能使我感到难过,还有其他方法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

只需执行此操作即可

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    tup=(a, b, c)
    res=optimize.minimize_scalar(f, args=tup)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)