function []=blatt4() z0=[10;1]; c=0; C=[1,0;0,100]; [a,b,c]=gradmin(c,C,z0); [x,y,z]=gradarmijo(@(z) z(1)^2+100*z(2)^2, @(z) [2*z(1); 200*z(2)], z0, 0.5, 0.01); n=1:length(c); m=1:length(z); figure; hold on; plot(n,log(c)); plot(m,log(z)); legend('Minimum','Armijo'); title('Konvergenzanalyse'); xlabel('Iterationsschritt'); ylabel('logarithmierter Fehler'); figure; hold on; X=-1:0.01:11; Y=-1:0.01:1.5; [X,Y]=meshgrid(X,Y); Z=X.^2+100*Y.^2; contour(X,Y,Z,80); plot(a(1,:),a(2,:)); plot(x(1,:),x(2,:)); legend('Höhenlinien','Minimum','Armijo'); xlabel('x'); ylabel('y'); end function [z, fz, absconv] = gradmin(c,C,z0) z(:,1)=z0; fz(:,1)= transpose(c)*z(:,1) + 0.5*transpose(z(:,1))*C*z(:,1); gradfz(:,1)= c + C*z(:,1); n(1)=norm(gradfz(:,1)); i=1; while n(i) > 0.01 s(i,1) = norm(gradfz(:,i))^2/(transpose(gradfz(:,i))*C*gradfz(:,i)); z(:,i+1) = z(:,i) - s(i,1)*gradfz(:,i); fz(:,i+1) = transpose(c)*z(:,i+1) + 0.5*transpose(z(:,i+1))*C*z(:,i+1); gradfz(:,i+1)= c + C*z(:,i+1); n(i+1)=norm(gradfz(:,i+1)); i=i+1; end conv(:,1)=[0;0]; absconv(1)=0; for i=1:length(n) conv(:,i)= z(:,i) - z(:,length(n)); absconv(i)= norm(conv(:,i)); end end function [z,fz,conv] = gradarmijo(f, gradientf, z_0, beta, gamma) z1=0; s=1; i=1; z(:,i)=z_0; fz(1,i)=f(z_0); while norm(gradientf(z(:,i))) > 0.01 s = 1; z1 = z(:,i) - s*gradientf(z(:,i)); while f(z1) > f(z(:,i)) - gamma*s* norm(gradientf(z(:,i)))^2 s= beta*s; z1= z(:,i) - s*gradientf(z(:,i)); end i=i+1; z(:,i) = z1; fz(1,i) = f(z1); end n=length(z); z_real = z(:,n); conv(1)=0; step(1)=0; for i=1:n conv(i)=norm(z(:,i) - z(:,n)); step(i)=i; end end