#matlab
#matlab
Вопрос:
Я пытаюсь решить задачу оптимизации в MATLAB с помощью функции fmincon, но возникает проблема с нелинейными ограничениями, поскольку MATLAB сообщает, что входных аргументов недостаточно. Это моя функция nlcon:
function [c,ceq] = nlcon(w_md2,std)
c =[];
ceq = w_md2'*std-1;
end
это выполнение fmincon:
covMat = cov(mon_ret) ;
[corMat, std] = corrcov(covMat);
w0 = repmat(n1, port_size, 1);
md2function = @(w_md2) md2(covMat, w_md2);
nonlincon = @nlcon;
w_md_2 = fmincon(md2function, w0, [], [], Aeq, Beq, lbnds, ubnds, nonlincon)
и это ошибка:
Not enough input arguments.
Error in nlcon (line 3)
ceq = w_md2'*std-1;
Error in fmincon (line 639)
[ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});
Error in main (line 60)
w_md_2 = fmincon(md2function, w0, ...
Caused by:
Failure in initial nonlinear constraint function evaluation. FMINCON cannot continue.
Был бы очень рад, если бы кто-нибудь мог помочь, поскольку я новичок в MATLAB.
С наилучшими пожеланиями
Ответ №1:
В документации говорится, что функция, переданная в качестве аргумента nonlincon
, должна принимать один входной аргумент. Это означает, что он вызывается только с одним входным аргументом и std
остается неопределенным.
Вы, вероятно, хотите сделать
nonlincon = @(x)nlcon(x,std);
Таким образом, вы создаете анонимную функцию, которая принимает один входной аргумент и вызывает вашу функцию со значением std
, которое вы вычислили ранее.