Matlab Fmincon“输出参数太多”

时间:2016-08-02 07:03:30

标签: matlab function

我正在解决一个非常简单的约束优化问题。在这一点上,我只输入了一个约束,使(L-2)向量范数等于1,后来我希望增加非负性约束。

Fmincon在我的约束上给了我一个“太多的输出参数”。我不明白为什么。

目标函数:简单的二次形式。实际上是方差协方差矩阵,我作为预先计算的全局变量输入。

function [y, grady] = quadobj(x)
global Q
y = x*Q*x';
if nargout > 1
    grady = 2*Q*x;
end

平等约束:该向量L2范数应为1.

function outeq = confuneq2(x)


% Nonlinear equality constraints
outeq = x*x'-1;
end

Fmincon 即可。

x0 = [0.7,0.1, -0.69]; 
options = optimoptions(@fmincon,'Algorithm','sqp');
[x,fval] = fmincon(@quadobj,x0,[],[],[],[],[],[],... 
   @confuneq2,options);

但它不起作用。我收到以下错误。

 Error using confuneq2
Too many output arguments.

Error in fmincon (line 632)
        [ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});

Caused by:
    Failure in initial user-supplied nonlinear constraint function evaluation. FMINCON cannot continue

请帮忙!

1 个答案:

答案 0 :(得分:0)

令人困惑的是,问题是您的函数还有几个输出参数。如果您查看错误,它会告诉您MATLAB正在尝试使用两个输出参数调用您的函数,但您已将其编程为仅使用一个。因此它会出错,因为它使用过多的输出参数调用了你的函数。

所有the examples in the docs都有两个输出,所以尝试以这种方式创建你的函数:

function [out, outeq] = confuneq2(x)
    out = x*x'-1;
    outeq = [];
end