MATLAB中匿名函数(函数处理函数)的多输出

时间:2017-07-22 07:55:53

标签: matlab optimization lambda anonymous-function

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

valueFunction, gradientFunction = myFunction(point)

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

k=@(x) -myFunction(x) 

matlab引发错误

Error using - 
Too many output arguments

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

1 个答案:

答案 0 :(得分:1)

由于否定函数等于乘以-1,你还应该否定计算梯度的函数。

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

您可以执行此处所述的操作 - Multiple Outputs

另一个选择是创建一个新功能 - NegateMyFunction()

function [valueFunction, gradientFunction] = NegateMyFunction( x )

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

end

将其用于fmincon