1

我正在寻找最小化具有 2 个变量和 1 个常数的非线性复函数。我发现了一个关于如何最小化复杂函数的问题,我认为它有效(?)我还没有尝试过,因为我想首先解决多变量一个参数问题。

例如一个超级简单的实函数:

def function(param):
    x, y, a = param
    return(x**2 + y**2 + a*x)

我可以对 3 个参数进行最小化,但不能对 2 个变量 1 个常数进行最小化。如果我做

minimize(function, [2,4,5])

它工作正常。

我发现这个问题有人问过与我类似的问题,但答案对我不起作用,答案说要做:

def function(x, y, a):
    return(x**2 + y**2 + a*x)
minimize(function, 2, 4 args=5)

但这给了我错误,即使只是以这种方式最小化 3 也会minimize(function, 2, 4, 5)给我很多错误行,并且以这种方式minimize(function, (2,4,5))给出了>missing 2 required positional arguments: 'y' and 'a'..

接下来对于复杂的事情,在答案中我看到它说将函数分成2个实际函数,用最小化解决它们,然后将两个结果融合为一个。但我不确定我是否理解,所以如果有人可以帮助我。该函数是一个复函数(实部和虚部),但输入(2 个变量 1 个常数)是实数。

也许有一个包可以做到这一点?

4

1 回答 1

1

您可以通过将要在最小化过程中改变的参数与其他参数分开来做到这一点。就像是:

from scipy.optimize import minimize

def function(t, a):
    x, y = t
    return(x**2 + y**2 + a*x)

res = minimize(function, (2, 4), args=5)

如果您不想更改函数签名和内部结构,您可以使用包装器:

from scipy.optimize import minimize

def function(x, y, a):
    return(x**2 + y**2 + a*x)

def wrapper(f, a):
    def newfunc(t):
        return f(*t, a)
    return newfunc

res = minimize(wrapper(function, 5), (2, 4))
于 2020-04-02T14:38:23.837 回答