
%
%	% Matlab-Programm zu Aufgabe 1.3 b)	Rosenbrock-Funktion
%
%  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=-0.5:0.02:1.5;	%	Gitter auf der x-Achse
y=-0.5:0.02:1.5;     	%	Gitter auf der y-Achse
[X,Y]=meshgrid(x,y);	%	erzeugt ein Gitter in der xy-Ebene
Z=100*(Y-X.^2).^2+(1-X).^2;

contour(X,Y,Z,[0.1,0.7,1.5,5,16]);%	Zeichnen der Hoehenlinien
title('Aufgabe 1.3 b)');
hold on
plot(1,1,'r*');	%	Minimum
hold off

%	% numerische Berechnung des Gradienten:

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

%	% Normierung des Gradienten auf Laenge 1 und Zeichnen

Fxn=max(abs(Fx),0.00000000001); %	Damit nicht durch Null geteilt wird,
Fyn=max(abs(Fy),0.00000000001); %	an Nullstellen des Gradienten.
Fn=sqrt(Fxn.^2+Fyn.^2);
hold on
 xlabel('mit normierten Richtungsvektoren')
 quiver(Xg,Yg,Fx./Fn,Fy./Fn);
hold off

