function [x,polku] = ...
newton_nolla(f,x0,polkuko=0,maxit=10,hyppy=1.0,delta=1.0e-3)
## Funktio [x,polku] = newton_nolla(f,x0,polkuko=0,maxit=10,hyppy=1.0,delta=1.0e-3) 
## etsii funktion nollakohdan (yhtalöryhmamielessa) Newtonin menetelmalla.
##
## Syotteet:
##    
## f               Funktio(kahva) f, jonka maksimia etsitaan. 
## x0              Alkuarvaus nollapisteelle.
## 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 nollakohdasta.
## polku           Iteraatiopolku, jos polkuko=1, muulloin x0.

if (rows(x0) < columns(x0)) 
  x0=x0';                                   # varmistetaan pystyvektorius
endif

if (polkuko==1)
  polku = rand(length(x0),maxit);           # alustetaan polku (tarvittaessa)
else
  polku=x0;
endif

x_vanha = x0;
for i=1:maxit
  if (polkuko==1)
    polku(:,i)=x_vanha;                     # kerataan polku talteen (tarvittaessa)
  endif
  J = num_jacobi(f,x_vanha,delta);          # Jacobin matriisi numeerisesti
  x_uusi = x_vanha - hyppy*(J\f(x_vanha));  # PIHVIN PAIKKA 
  x_vanha = x_uusi;
endfor
x = x_uusi;
endfunction

