
function [x,fmin,k]=sd(f,x0,tol)
% Beräknar minimipunkten x till en funktion f.
%
%   Syntax:
%           x = sd(f,x0,tol)
%   Argument:
%           f   - funktionshandtag: pekar på namnet till en funktionsfil 
%                 eller till en anonym funktion, y=f(x) är en skalär. 
%                 T.ex. f=@funk eller f=@(x)x(1)^2-2*x(1)+x(2)^2
%           x0  - nx1-matris som ger en startapproximation av minpunkten.
%           tol - positivt tal som anger önskad noggrannhet.
%   Returnerar:
%           x   - nx1-matris som ger approximativ minimipunkt.
%           fmin- minimivärdet av f i minimipunkten.
%           k   - antal utförda iterationer.
%   Beskrivning:
%           Funktionen sd använder steepest descent metoden med
%           optimalt steglängdsval.
%
%   Exempel:
%           >> [x,fmin]=sd(@sin,pi,0.01)
%           x =
%               4.7031
%           fmin =
%              -1.0000
%
%           >> [x,fmin]=sd(@(x)x(1)^2-2*x(1)+x(2)^2,[1;0],0.01)
%           x =
%               1.0000
%                    0
%           fmin =
%               -1

x=x0; kmax=750;

for k=1:kmax;
    grad=jacobi(f,x);
    g=@(s)f(x-s*grad');
    alpha=fminbnd(g,0,1);
    x=x-alpha*grad';
    if norm(alpha*grad)<tol, break, end
end

fmin = f(x);
