%RESI_NEWTON vrne resitev diskretne veriznice po Newtonovi metodi
%	     za dve spremenljivki
%X=RESI_NEWTON(ZAC,L,M,tol,st_iter)
%ZAC=[x_{0} x_{1} x_{n+1};y_0 y_1 y_{n+1}]
%L je vektor dol"zin "clenkov
%M je vektor mas
%tol je toleranca za konvergenco
%st_iter je stevilo iteracij
%
function X=resi_newton(ZAC,L,M,tol,st_iter,barva);
n=length(L)-1;
mu=zeros(1,n);
for j=1:n;
  mu(j)=(M(j)+M(j+1))/2;
end
%izracunamo se nu za kasnejse potrebe
nu=zeros(1,n+1);
%for i=1:n+1;
%  nu(i)=sum(mu(1:i-1));
%end
nu=cumsum([0,mu]);
%zacetna u in v
W0=[-1/(2*(ZAC(1,2)-ZAC(1,1)));
   (ZAC(2,2)-ZAC(2,1))/(ZAC(1,2)-ZAC(1,1))]
W0
napaka=tol+1;
iter=0;
%zacnemo Newtona
while (napaka>tol) & (iter<st_iter)
  %izra"cunamo vrednosti U i V
  [F,J]=vred(W0,ZAC,L,nu,n);
  W=W0-J\F;
  napaka=norm(W-W0);
  iter=iter+1;
  W0=W;
end
W
if iter==st_iter
  display('Stevilo iteracij presezeno. Rezultat mogoce ni tocen!')
end
xi=L./sqrt(1+(W(2)-W(1)*nu).^2);
eta=xi.*(W(2)-W(1)*nu);
X=zeros(2,n+2);
X(:,[1,n+2])=ZAC(:,[1,3]);
for i=2:n+1
  X(:,i)=ZAC(:,1)+[sum(xi(1:i-1));sum(eta(1:i-1))];
end
plot(X(1,:),X(2,:),'r*',X(1,:),X(2,:),barva);
axis equal
grid

function [F,J]=vred(W0,ZAC,L,nu,n);
  %izra"cunamo vrednosti funkcij U iv V in ju spravimo v stolpec
  %F ter izracunamo jacobian J
  F=zeros(2,1);
  J=zeros(2);
  for i=1:n+1
   wi=W0(2)-W0(1)*nu(i);
    J=J+L(i)*(1+wi^2)^(-3/2)*[wi*nu(i),-wi;-nu(i),1];
    F=F+L(i)*(1+wi^2)^(-1/2)*[1;wi];    
  end
  F=F-ZAC(:,3)+ZAC(:,1);
