我希望最小化具有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)
但是这给了我错误,即使以这种方式minimize(function, 2, 4, 5)
仅使3最小也给了我很多错误,而minimize(function, (2,4,5))
就是给了>missing 2 required positional arguments: 'y' and 'a'.
。 / p>
接下来,对于复杂的事情,我在回答中看到它说将功能分成2个实函数,以最小的方式求解它们,然后将两个结果融合为一个。但是我不确定我是否理解,是否有人可以帮助我。该函数是一个复数函数(实部和虚部),但输入(2个变量1个常量)是实数。
也许有一个包装可以做到这一点?
答案 0 :(得分: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))