Почему не хватает входных аргументов в nlcon в MATLAB? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь решить проблему оптимизации в 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 Ответ

0 голосов
/ 21 апреля 2019

В документации говорится, что функция, переданная в качестве аргумента nonlincon, должна принимать один входной аргумент. Это означает, что он вызывается только с одним входным аргументом, а std остается неопределенным.

Вы, вероятно, хотите сделать

nonlincon = @(x)nlcon(x,std);

Таким образом, вы создаете анонимную функцию, которая принимает один входной аргумент и вызывает вашу функцию со значением std, которое вы вычислили ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...