
%
%	% Matlab-Programm zu Aufgabe 1.3 a)
%
%  Dieses Programm zeichnet die Hoehenlinien einer Funktion z=f(x,y)
%  zusammen mit einer Approximation des Gradienten.
% 
%  Dazu wird ein Gitter erzeugt, auf dem die Funktionswerte berechnet werden.
%
x=-2:0.03:2;		%	Gitter auf der x-Achse
y=-2:0.03:2;     	%	Gitter auf der y-Achse
[X,Y]=meshgrid(x,y);	%	erzeugt ein Gitter in der xy-Ebene
Z=X.^2.*Y.^2+(X.^2-1).^2;

contour(X,Y,Z,[0.01,0.3,0.7,1,1.001,2]); % Hoehenlinien zeichnen

hold on
 title('Aufgabe 1.3 a), Hoehenlinien');

 plot([-1,1],[0,0],'r*');		%	strikte globale Minimum
 plot([0,0],[-sqrt(2),sqrt(2)],'ko');	%	Sattelpunkt
 plot([0,0],[-sqrt(2),sqrt(2)],'m--');	%	lokale Maxima, nicht strikt	
 plot([0,0],[-2,-sqrt(2)],'r--');	%	lokale Minima, nicht strikt
 plot([0,0],[sqrt(2),2],'r--');		%	lokale Minima, nicht strikt
hold off

%	% numerische Berechnung des Gradienten:

dx=0.3;		%	Gitter fuer die Berechnung des Gradienten
dy=0.3;
[Xg,Yg]=meshgrid(-1.2:dx:1.2,-1.5:dy:1.5);	
Zg=Xg.^2.*Yg.^2+(Xg.^2-1).^2;%	Funktionswerte
[Fx,Fy]=gradient(Zg,dx,dy);%	Differenzenquotienten zu den Funktionwerten

%	% Zeichnen des Gradienten
hold on
quiver(Xg,Yg,Fx,Fy);       %    Zeichnen eines Vektorfeldes
hold off













