fmincon error too many input arguments
Ältere Kommentare anzeigen
Hello, could you please help me. First, the matlab successfully calculate the following code.
expCov = cell2mat(CovM(1));
ExpReturnMat = ExpReturnMatrix';
expRet = ExpReturnMat(:,1);
NLLfunction = @(x) fm_fitnessERC(expCov, x);
nonlcon = @(x) nonlcon(wgts0,Aeq,x);
[ERWCwgtsTC, fval, sqpExit] = fmincon(NLLfunction, wgts0,[], [], [], [], lbnds, [], nonlcon,qoptions);
function fval = fm_fitnessERC(expCov, x)
N = size(expCov,1);
y = x.*(expCov*x);
fval = 0 ;
for i = 1:N
for j = 1+1:N
xij = y(i) - y(j) ;
fval = fval + xij*xij ;
end
end
fval = sqrt(fval)
end
function [c,ceq] = nonlcon(wgts0,Aeq,x)
c = []
ceq = Aeq*[x + 0.01*abs(x-wgts0)]-1
end
However, I try to make loop for the next ERWCwgtsTC, where I want to replace wgts0 with ERWCwgts(:,z-1).
for z = 2:20
expCov = cell2mat(CovM(z));
ExpReturnMat = ExpReturnMatrix';
expRet = ExpReturnMat(:,z);
ERWCwgtsTC0 = ERWCwgtsTC(:,z-1);
NLLfunction = @(x) fm_fitnessERC(expCov, x);
nonlconERWC = @(x) nonlconERWC(ERWCwgtsTC0, Aeq, x);
[ERWCwgtsTC(:,z), fval, sqpExit] = fmincon(NLLfunction, ERWCwgtsTC0,[], [], [], [], lbnds, [], nonlconERWC,qoptions);
end
NLLfunction remain the same as above. But I adjust...
function [c,ceq] = nonlcon(ERWCwgtsTC0, Aeq, x)
c = []
ceq = Aeq*[x + 0.01*abs(x-ERWCwgtsTC0)]-1
end
I receive ERWCwgtsTC(:,2) but after that the process is stopped
The error is...
Error using
@(x)nonlconERWC(ERWCwgtsTC0,Aeq,x)
Too many input arguments.
Error in @(x)nonlconERWC(ERWCwgtsTC0,Aeq,x)
Error in fmincon (line 621)
[ctmp,ceqtmp] =
feval(confcn{3},X,varargin{:});
Caused by:
Failure in initial user-supplied
nonlinear constraint function
evaluation. FMINCON cannot continue.
Thank you in advance.
Antworten (1)
Walter Roberson
am 13 Jun. 2016
The line
nonlconERWC = @(x) nonlconERWC(ERWCwgtsTC0, Aeq, x);
has a recursive reference to nonlconERWC -- it appears on both the left and right hand side.
Considering your other code it appears the line should be
nonlconERWC = @(x) nonlcon(ERWCwgtsTC0, Aeq, x);
By the way, there is no reason you should have needed to adjust your nonlcon code, since the name of the variable you pass for the first parameter does not need to match the internal name of the parameter within the routine. Your logic for nonlcon did not change, just the value you pass to it.
1 Kommentar
Iglika Koleva
am 13 Jun. 2016
Kategorien
Mehr zu Solver Outputs and Iterative Display finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!