% ======================================================================
% Beispiel einer quadratischen Funktion mit linearen Restriktionen
% Geiger-Skript S.88
%
%    Minimiere f(x) = 0.5 x^T C x + d^T x
%    unter der Nebenbedingung
%              A(1:mt,:)'.*x <= b(1:mt)		(Ungleichungen)
%	       A(mt+1:,:).*x  = b(mt+1:)	(Gleichungen)
%
% Erstellt fuer die Veranstaltung
% Weiterbildenes Studium fuer Ingenieure WS 98/99
%
% S. F.
% ----------------------------------------------------------------------

C = [2,0;0,2];
d = [0;0];
A = [-1,0;0,-1;1,3];
b = [-2;-1;2];
mt= 3;

x0=[2;1];

if length(x0)==2
% zu zeichnender Breich, geht nur fuer x in R^2;  
  xx=linspace(-1.5,2.5,50);
  yy=linspace(-0.5,1.5,50);
  ymin=yy(1);
  ymax=yy(length(yy));
  [X,Y]=meshgrid(xx,yy);

% Berechen der Funktionswerte und Zeichnen der Hoehenlinien
  Z=0.5*(C(1,1)*X.^2+2*C(1,2)*X.*Y+C(2,2)*Y.^2)+d(1)*X+d(2)*Y;
  contour(X,Y,Z,[0.01,0.15,0.5,1,2,3,4,6]);
hold on;
% Zeichnen der Restriktionen:
  [n,m]=size(A);
  for i=1:n
    if A(i,2)==0
        yz=yy;
        xz=b(i)/A(i,1)*ones(length(yz));
        plot(xz,yz);
    elseif A(i,1)==0
        xz=xx;
        yz=b(i)/A(i,2)*ones(length(xz));
        plot(xz,yz);
    else
        xz=xx;
        yz=(b(i)-A(i,1)*xz)/A(i,2);
        I=find(yz>=ymin);
        J=find(yz<=ymax);
        I=intersect(I,J);
        plot(xz(I),yz(I));
    end;
  end;
  plot(x0(1),x0(2),'*');
  title(['Startpunkt'])
  xlabel('weiter mit Mausklick ins Bild');
  ginput(1);
end;

[x,l] = aktivemenge(C,d,A,b,x0,mt);
hold off;











