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
。
我有一个函数 "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
。