通过使用deal
,我们可以编写具有多个输出参数的匿名函数,例如:
minmax = @(x)deal(min(x),max(x));
[u,v] = minmax([1,2,3,4]); % outputs u = 1, v = 4
但是,如果您想为优化函数fminunc
提供其梯度,这是行不通的。函数(编辑:这不是真的,您只需指定是否实际上要使用梯度,例如使用fminunc
有时会使用一个输出参数,有时会使用两个输出参数。optimset('SpecifyObjectiveGradient',true)
。然后,在一次调用中它总是要求相同数量的参数。)
我们需要提供类似以下内容:
function [f,g] = myFun(x)
f = x^2; % function
g = 2*x; % gradient
这个函数可以使用一个或两个输出参数来调用。
那么有没有一种方法可以在不使用 function
关键字的情况下内联执行相同的操作呢?
minmax
类似的功能最近(R2017a)被添加到 MATLAB 中,名称为bounds
。 - Dev-iL