values of equation in last iteration in fmincon
    10 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Takis Tsoukalas
 am 14 Apr. 2019
  
    
    
    
    
    Bearbeitet: Matt J
      
      
 am 15 Apr. 2019
            I optimize a problem maximizing EU1 with the fmincon solver..the code below is the objective function i insert in fmincon instruction ...
can i somehow get the value of xw1 equation in last itteration??
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X) 
EU1=0;
xw1=0;
for i=1:1:length(rc)
    if (LLand(rc(i)))
        xw1=xw1+LG_obs(rc(i))*X(i);
    end
end
xw1=LW_ini+xw1;
% xw1
% class(xw1)
for i=1:1:length(rc)
    for j=1:1:length(rc)
       EU1=EU1+LVmat(i,j)*X(i)*X(j); 
    end    
end
EU1=xw1-0.5*EU1/xw1;
%EU1=-EU1;
xw1;
0 Kommentare
Akzeptierte Antwort
  A. Sawas
      
 am 14 Apr. 2019
        After the fmincon is run and you got the solution vector, make a call to the objective function using the solution vector but in this time add/enable the code in the objective function to display the values you want.
For example assuming you called fmincon like this:
eq_obj = @(x)eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,x);
[x] = fmincon(eq_obj,x0,A,b);
Edit the objective function to display the value of xw1; then call the objective function:
eq_obj(x);
3 Kommentare
  Catalytic
      
 am 14 Apr. 2019
				Instead of displaying xw1, provide the option of returning it
function [EU1,xw1] = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X) 
Weitere Antworten (1)
  Matt J
      
      
 am 14 Apr. 2019
        
      Bearbeitet: Matt J
      
      
 am 14 Apr. 2019
  
      The computation of xw1 is a trivial one-liner. Just compute it separately from the optimal X given to you by fmincon,
xw1=sum( LG_obs(rc).*LLand(rc).*Xoptimal) + LW_ini
3 Kommentare
  A. Sawas
      
 am 15 Apr. 2019
				The only drawback I guess of computing the value of xw1 outside the objective fuction will be the need to edit two locations if the equation has changed.
  Matt J
      
      
 am 15 Apr. 2019
				
      Bearbeitet: Matt J
      
      
 am 15 Apr. 2019
  
			Then create a dedicated function to compute xw1 and call that function in the objective as well as everywhere else  xw1 is needed,
function xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
   xw1=sum( LG_obs(rc).*LLand(rc).*X) + LW_ini;
end
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X) 
  xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
  EU1=xw1-0.5*(X(:).'*LVmat*X(:))/xw1;
end
Siehe auch
Kategorien
				Mehr zu Quadratic Programming and Cone Programming finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



