function [x,polku] = ...
jyrkka_max(f,x0,polkuko=0,maxit=10,hyppy=1.0,delta=1.0e-3)
## Funktio [x,polku] = jyrkka_max(f,x0,polkuko=0,maxit=10,hyppy=1.0,delta=1.0e-3) 
## etsii funktion maksimin jyrkimman nousun menetelmalla.
##
## Syotteet:
##    
## f               Funktio(kahva) f, jonka maksimia etsitaan. 
## x0              Alkuarvaus maksipisteelle.
## polkuko    (0)  Palautetaan koko iteraatiopolku, jos =1 (oletusarvo =0). 
## maxit     (10)  Iteraatioiden lukumaara.
## hyppy    (1.0)  Iteraatohypyn (suhteellinen) koko.
## delta (1.0e-3)  Numeerisessa derivoinnissa kaytettava differenssi.
##
## Palautteet:
##
## x               Arvio funktion f maksimista.
## polku           Iteraatiopolku, jos polkuko=1, muulloin x0.

if (rows(x0) < columns(x0)) 
  x=x0';                             # varmistetaan pystyvektorius
endif

polku=x0;
if (polkuko==1)
  polku = rand(length(x0),maxit);    # alustetaan polku (tarvittaessa)
endif

x_vanha = x0;
for i=1:maxit
  if (polkuko==1)
    polku(:,i)=x_vanha;              # kerataan polku talteen (tarvittaessa)
  endif
  grad = num_grad(f,x_vanha,delta);  # gradientti numeerisesti
  x_uusi = x_vanha + hyppy*grad;     # PIHVIN PAIKKA
  x_vanha = x_uusi;
endfor
x = x_uusi;
endfunction

