Error "Too many output arguments" from fmincon

10 ビュー (過去 30 日間)
sxj
sxj 2019 年 6 月 18 日
コメント済み: sxj 2019 年 6 月 19 日
Hallo, everyone, I am using fmincon to solve an optimization problem. The main code is shown as below:
x = fmincon(@(x)e1_funcOptimal(x), x_0,[], [], [], [], -10, 10, @(x)e1_consOptimal(x), options);
where e1_funcOptimal(x) is the function provided the objective function for the optimization, and e1_consOptimal(x) is the constraint conditions which x need to satisfy.
The e1_funcOptimal(x) function is shown as below:
tol = 1.0E-13;
options = optimset( ...
'Display', 'off', ...
'GradObj', 'on', ...
'GradConstr', 'on', ...
'DerivativeCheck', 'off', ...
'FinDiffType', 'central', ...
'TolFun', tol, ...
'TolX', tol, ...
'TolCon', tol, ...
'algorithm', 'active-set', ...
'MaxFunEvals', inf, ...
'MaxIter', 5000);
function obj = e1_funcOptimal(x)
obj = -x(1,10);
% or obj = -x(10)
% end
It means that I choose the negative value of one of the inputs as objective function.
The error messsage is that
Error using e1_funcOptimal
Too many output arguments.
Error in @(x)e1_funcOptimal(x)
Error in fmincon (line 561)
[initVals.f,initVals.g] = feval(funfcn{3},X,varargin{:});
Caused by:
Failure in initial objective function evaluation. FMINCON cannot continue.
How could I fix the problem. Thanks for reading.
  4 件のコメント
Walter Roberson
Walter Roberson 2019 年 6 月 18 日
Please show your options.
I predict that you configured in a way that requires a Jacobian to be output as the second output of your objective function.
sxj
sxj 2019 年 6 月 18 日
hey, Walter, I have just upload the options. Do you mean I choose 'on' for the option "GradObj'' and 'GradConstr' and need to switch them to 'off'?

サインインしてコメントする。

採用された回答

Matt J
Matt J 2019 年 6 月 18 日
編集済み: Matt J 2019 年 6 月 18 日
Do you mean I choose 'on' for the option "GradObj'' and 'GradConstr' and need to switch them to 'off'?
Either switch them off or provide the gradients, e.g.,
function [obj,grad] = e1_funcOptimal(x)
obj = -x(1,10);
if nargout>1
grad=zeros(size(x));
grad(1,10)=-1;
end
end
  1 件のコメント
sxj
sxj 2019 年 6 月 19 日
Thanks a lot, Matt. It works now. Have a good day

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGet Started with Optimization Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by