% Script File: ShowSDn
% Minimizes the objective function f using steepest descent.
%%%%%%%%%%%%%%%%%
% Ensin minimalistinen nuolinäppäinversio:
Lmax = 1;           % Max line step 
nSteps   = 25;      % Total number of steps.
manualSteps = 3;    % Montako kuvaa piirretään 1-ul. minimoinnista
con_size = 20;      % Size of the contour plot
xmin=-1;xmax=4;     % Korkeuskäyräpiirrosalueen
ymin=-5;ymax=5;     %               rajat

close all
f=inline('(x-2).^4+(x-2*y).^2','x','y');
x=linspace(xmin,xmax,con_size);
y=linspace(ymin,ymax,con_size);
[X,Y]=meshgrid(x,y);
Z=f(X,Y);
contour(x,y,Z);
title('Anna sinä alkupiste klikkaamalla grafiikkaikkunassa')
title ('Minä annan komennon >> xc=ginput(1)')
xc=ginput(1);      % Alkupiste kuvasta (2-ulott. tapaus)
xc=xc'
fc=objf(xc);
gc=objg(xc);
xvals = xc

% Nuolinäppäiniterointi:
%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(1);hold on
plot(xc(1),xc(2),'o')

while Lmax > 0
   [xnew,fnew,gnew] = SDaskel(xc,fc,gc,Lmax,0);
   title('Jos haluat muuttaa Lmax:ia, anna haun jatkua.')
   Lmax=input('Paina 0, jos ok., anna uusi Lmax, jos haku jatkuu. ')
end
disp(['Lmax=',num2str(Lmax)])
break
xvals=[xvals,xnew];xc=xnew,fc=objf(xc);gc=objg(xc);
figure(1);hold on;plot(xc(1),xc(2),'o')
plot(xvals(1,:),xvals(2,:),'r')

%%%%%%%%%% Toinen kierros %%%%%%%%%%%%%%%%%%

uusix=1;
while uusix == 1
   [xnew,fnew,gnew] = SDaskel(xc,fc,gc,Lmax,0);
   title('Jos min oikeassa reunassa, kasvata Lmax:ia')
   uusix=input('Paina 0, jos ok., 1 jos haku jatkuu. ')
   Lmax=Lmax+uusix*Lmax
end
% Jos minimi on oikeassa päätepisteessä, valitse suurempi Lmax ja kutsu
% uudestaan.

xvals=[xvals,xnew];xc=xnew,fc=objf(xc);gc=objg(xc);
C = contour(x,y,Z,20);
clabel(C,'manual') 

break
%%%%%%%%%% Kolmas kierros %%%%%%%%%%%%%%%%%%

[xnew,fnew,gnew] = SDaskel(xc,fc,gc,Lmax,0);
xvals=[xvals,xnew];xc=xnew,fc=objf(xc);gc=objg(xc);


figure(1)
plot(xvals(1,:),xvals(2,:),'r')
plot(xvals(1,:),xvals(2,:),'ko')






