maximizing a function with a nonlinear constraint using fmincon
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Dear all,
I have a function 'fun' which I want to maximize with respect to four unknowns: x(1) x(2) x(3) and x(4)
under the constraint
 exp(x(2))+exp(x(3))<0.99
So, I set up something like that
 function [c,ceq] = mycon(x)
 c= exp(x(2))+exp(x(3))-0.99;
 ceq=[];
 end
 x0=[a ;b c; d]  % the initial value
      options=optimset( 'display','off'); % mainly use this
[xx,fval,exitflag,output,lambda,grad,HH]=fmincon('fun',x0,...
 [],[],[],[],[],[],@mycon,  options);
But I get this warning
 Error using mycon
 Too many input arguments.
 Error in fmincon (line 622)
        [ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});
 Error in dokimi_3 (line 96)
 [xx,fval,exitflag,output,lambda,grad,HH]=fmincon('fun',x0,...
 Caused by:
    Failure in initial nonlinear constraint function evaluation. FMINCON cannot continue.
Any ideas what is wrong?
Thank you
3 Commenti
  Walter Roberson
      
      
 il 21 Gen 2018
				Is it possible that in your actual code that you passed something to fmincon after the options argument?
Risposta accettata
  Matt J
      
      
 il 21 Gen 2018
        
      Modificato: Matt J
      
      
 il 21 Gen 2018
  
      Rewrite mycon to have this form,
   function [c,ceq] = mycon(x, y,mu, psi,sig20, Vgam,gam0, lam0,Vlam )
     c= exp(x(2))+exp(x(3))-0.99;
     ceq=[];
   end
Even if the extra known variables aren't actually used in the computations of the constraints, they have to be there if you use additional arguments to fmincon to pass them in.
Incidentally, passing extra known parameters this way is antiquated. You should use anonymous or nested functions as described here. If you use these alternatives, you will not have to have to pass variables to functions that don't need them.
0 Commenti
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


