
function x=newton(f,Df,x0,tol)
% Beräknar lösning till det icke-linjära ekvationssystemet f(x)=0,
% givet startapproximation x0.
%   Syntax:
%           x = newton(f,Df,x0,tol)
%   Argument:
%           f   - funktionshandtag: pekar på namnet till en funktionsfil eller
%                 till en anonym funktion, f är en nx1-matris. T.ex. f=@funk
%                 eller f=@(x)[sin(x(1))-x(2); x(1)-cos(x(2))]
%           Df  - funktionshandtag: pekar på namnet till en funktionsfil eller
%                 till en anonym funktion som ger derivatan av f. T.ex. f=@Dfunk 
%                 eller Df=@(x)[cos(x(1)),1; -1,sin(x(2))]
%           x0  - ett tal som ger en startapproximation av lösningen.
%           tol - positivt tal som anger önskad noggrannhet för lösningen.
%   Returnerar:
%           x   - en nx1-matris som ger approximativ lösning.
%   Beskrivning:
%           Programmet beräknar en approximativ lösning till f(x)=0 med
%	    Newtons metod.
%   Exempel:
%           x = newton(@(x)[sin(x(1))-x(2); x(1)-cos(x(2))]],...
%                      @(x)[cos(x(1)),-1; 1,sin(x(2))],[1;1],1e-5)

x=x0; kmax=10;

for k=1:kmax
    h=-Df(x)\f(x);
    x=x+h;
    if norm(h)<tol, break, end
end

msg=sprintf('Varning: Det krävs mer än kmax=10 iterationer för att bestämma nollstället.');

if k==kmax, disp(msg), end
