% Skript som implementerer Newtons metode.
% I tillegg til å finne ei tilnærma løsning av likninga
% f(x)=0, plotter den også tangenter og nullpunktet for
% denne for hver iterasjon.

% Setter x_0 og antall iterasjonar
x0=1;
ItMax=4;

% Gir funksjonen f(x) og den deriverte
Funk=@(x) -.2+x.*sin(x);
FunkDeriv=@(x) sin(x)+x.*cos(x);

% Bestemmer intervallet vi skal plotte over
xMin=-1;
xMax=2;
xVek=xMin:1e-2:xMax;
fVek=Funk(xVek);

% Tilordner xNy
xNy=x0;

% Setter akser:
Vaxis=[xMin xMax min(fVek) max(fVek)];

% Plottar funksjonen
plot(xVek,fVek,'linewidth',2)
axis(Vaxis)
hold on
plot([xMin xMax],[0 0],'k-')
pause
plot(xNy,0,'rx')    % Plotter x0 i rødt
axis(Vaxis)
pause

% For-løkke som implementerer Newtons metode - med plott av tangentar
for It=1:ItMax
  It
  xGml=xNy;
  xNy=xGml-Funk(xGml)/FunkDeriv(xGml);
  Tang=Funk(xGml)+FunkDeriv(xGml)*(xVek-xGml);
  plot(xVek,Tang,'k') % Plotter tangent
  plot(xGml,0,'kx')   % Plotter forige sjkæringspunkt svart
  plot(xNy,0,'rx')    % Plotter ny skjæring i rødt
  axis(Vaxis)
  pause               % Venter på tastetrykk
end
hold off

% Skriver svar og usikkerhet til skjerm
disp(['Løsning: ',num2str(xNy),'.'])
disp(['Usikkerhet: ',num2str(abs(xNy-xGml)),'.'])

