Почему недостаточно входных аргументов в nlcon в MATLAB?

#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 , которое вы вычислили ранее.