% m23c.m - m23b with a harder function! function m23() counter = 0; x = [-3:.1:3]; y = x; [xx,yy] = meshgrid(x,y); ff = (1-xx).^2 + 100*(yy+cos(pi*xx)).^2; % modified Rosenbrock function levels = 0:20:500; hold off, contour(xx,yy,ff,levels) % contour plot colorbar, grid on, hold on LW = 'linewidth'; MS = 'markersize'; plot(1,1,'.k',MS,36) % the solution x = input('initial x? '); y = input('initial y? '); xold = x; yold = y; opts = optimset('gradobj','on'); X = fminunc(@f,[x;y],opts) % minimisation function [f,g] = f(X) % compute function and gradient counter = counter+1; x = X(1); y = X(2); f = (1-x)^2 + 100*(y+cos(pi*x))^2; g = [-2*(1-x)-200*pi*sin(pi*x)*(y+cos(pi*x)); 200*(y+cos(pi*x))]; plot([xold x],[yold y],'-r',LW,2) % plot line to current point plot(x,y,'.r',MS,30) % plot current point drawnow xold = x; yold = y; end end