MATLAB 中匿名函数(Function Handler)的多重输出

Multiple Output of Anonymous Function (Function Handler) in MATLAB

我有一个函数 "myFunction" 可以计算某个量的值和梯度。我想最大化这个数量;因为我将使用 fmincon,所以我想传递给 fmincon -myFunction。问题是 myFunction returns 也是渐变,即它应该用作

valueFunction, gradientFunction = myFunction(point)

fmincon 将使用 gradientFunction 来计算最小值。所以我想要的是有一个函数 returns -valueFunction, -gradientFunction。但是如果我定义

k=@(x) -myFunction(x) 

matlab 报错

Error using - 
Too many output arguments

那么如何创建一个函数 returns 另一个函数的所有输出,符号相反?

因为取反一个函数等同于乘以 -1,所以你也应该取反计算梯度的函数。

现在,您真正的问题是您需要为函数处理程序输出 2 个变量。

您可以按照此处所述进行操作 - Multiple Outputs

另一种选择是创建一个新函数 - NegateMyFunction():

function [valueFunction, gradientFunction] = NegateMyFunction( x )

valueFunction, gradientFunction = myFunction(x);
valueFunction = -valueFunction;
gradientFunction = -gradientFunction;

end

将其用于 fmincon