
function x=modnewton(f,x0,tol)
% Beräknar lösning till det icke-linjära ekvationssystemet f(x)=0,
% givet startapproximation x0.
%   Syntax:
%           x = modnewton(f,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))]
%           x0  - en nx1-matris 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 modifierade metod.
%   Exempel:
%           x = modmewton(@(x)[sin(x(1))-x(2); x(1)-cos(x(2))]],[1;1],1e-5)

x=x0; kmax=10;

for k=1:kmax
    h=-Dfapprox(f,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

function A=Dfapprox(f,x)

h=1e-6; n=length(x);

for i=1:n
    x1=x; x1(i)=x1(i)+h;
    x2=x; x2(i)=x2(i)-h;
    A(:,i)=(f(x1)-f(x2))/(2*h);
end
