fmincon function weird error

Hello,
I am wondering why am I getting this weird error:
Error using myfun
Too many input arguments.
Error in fmincon (line 631)
initVals.f = feval(funfcn{3},X,varargin{:});
Although my function myfun has only one argument that is x, but looks like the implementation of fmincon calls it with 3!
Help please

2 件のコメント

Zhang lu
Zhang lu 2013 年 4 月 27 日
show your all code please
seldeeno
seldeeno 2013 年 4 月 27 日
編集済み: seldeeno 2013 年 4 月 27 日
All my code is large (4 long files) but the related parts are as follows: In the first file this is the call to fmincon, with initialization:
for i=1:NP
pop(i,:)=XRmin+(XRmax-XRmin).*rand(1,D);
end
Call to the function:
[temppop,tempval,exitflag,output] = fmincon(@myfun,xx,[],[],[],[],...
XRmin(1,:),XRmax(1,:),@mycon,opts,varargin{:});
This is the function that is referenced:
function f = myfun(x)
[f, c, ceq] = mlbsuite(x, 38, 0, 'g16');
f = - f; % because we want to minimize and its a MAX problem
return
end
And this is mycon:
function [c,ceq] = mycon(x)
[f, c, ceq] = mlbsuite(x, 38, 0, 'g16');
Thanks

回答 (1 件)

Matt J
Matt J 2013 年 4 月 27 日

0 投票

The varargin{:} that you are passing to FMINCON are being passed to myfun and mycon as extra arguments. However, the input signature of these functions is written only to accept a single input argument x.
If the extra varargin parameters are not needed by your objective/constraints, then remove them. If they are needed, then passing them through varargin is an outdated method. See here for the newer techniques

2 件のコメント

seldeeno
seldeeno 2013 年 4 月 27 日
Are you talking about fmincon or myfun? I am just passing x to myfun, but in fmincon it is calling my function with extra parameters as you can see from the error and that is what is making me dont understand this
Matt J
Matt J 2013 年 4 月 27 日
編集済み: Matt J 2013 年 4 月 28 日
I'm talking about FMINCON. If you don't want FMINCON to send extra parameters to myfun, then don't call FMINCON with those extra parameters,
[temppop,tempval,exitflag,output] = fmincon(@myfun,xx,[],[],[],[],...
XRmin(1,:),XRmax(1,:),@mycon,opts); %omit varargin{:}

この質問は閉じられています。

質問済み:

2013 年 4 月 27 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by