function []=blatt12() %parameter beta=0.5; gamma=0.01; z0=[10;1]; %Maße des Hyperquaders n=2; X=[-2 -1; -2 2]; [z,fz]=Proj_Grad(@f,@grad_f, @proj, X, z0, beta, gamma) x=[-2 -2;-2 2; -1 2;-1 -2; -2 -2]; x1=-3:0.2:10; x2=-3:0.2:3; [x1,x2]=meshgrid(x1,x2); y=x1.^2+100*x2.^2; hold on contour(x1,x2,y,40) plot(x(:,1),x(:,2)) plot(z(1,:),z(2,:),'b--o') title('A 12.4') xlabel('x') ylabel('y') legend('Höhenlinien','Zulaessiger Bereich','Iteration') end function [z,fz]=Proj_Grad( f,grad_f, proj,X, z0,beta,gamma) n=length(z0); %Initialisierung i=1; z(:,i)=z0; fz(i)=f(z(:,i)); %Hier gehts los while norm( z(:,i) - proj(z(:,i) - gradf(z(:,i)),n,X) ) > 10^(-6) s=1/beta; z(:,i+1) = proj(z(:,i) - s*gradf(z(:,i)),n,X); while f(z(:,i+1)) > f(z(:,i)) - gamma*gradf(z(:,i))'*(z(:,i)-z(:,i+1)) s=beta*s; z(:,i+1) = proj(z(:,i) - s*gradf(z(:,i)),n,X); end fz(i+1)=f(z(:,i+1)); i=i+1; end end function z=f(x) z=x(1).^2+100*x(2).^2; end function z=gradf(x) z=[2*x(1);200*x(2)]; end %Projektionsoperator, n ist die Dimension des Raumes und X enhält als Zeilen die Intervallgrenzen function z=proj(x,n,X) for i=1:n if x(i) < X(i,1) z(i,1) = X(i,1); elseif x(i) > X(i,2) z(i,1) = X(i,2); else z(i,1)=x(i); end end end