我有一个功能" myFunction"计算某个数量的值和梯度。我想最大化这个数量;因为我将使用fmincon,我想传递给fmincon -myFunction。问题是myFunction也返回渐变,即它应该用作
valueFunction, gradientFunction = myFunction(point)
fmincon将使用gradientFunction来计算最小值。所以我想拥有一个返回-valueFunction,-gradientFunction的函数。但是,如果我定义
k=@(x) -myFunction(x)
matlab引发错误
Error using -
Too many output arguments
那么如何创建一个函数来返回另一个函数的所有输出,符号相反?
答案 0 :(得分:1)
由于否定函数等于乘以-1,你还应该否定计算梯度的函数。
现在,您真正的问题是您需要为函数处理程序输出2个变量。
您可以执行此处所述的操作 - Multiple Outputs。
另一个选择是创建一个新功能 - NegateMyFunction()
:
function [valueFunction, gradientFunction] = NegateMyFunction( x )
valueFunction, gradientFunction = myFunction(x);
valueFunction = -valueFunction;
gradientFunction = -gradientFunction;
end
将其用于fmincon
。