% Implementering av halveringsmetoden for likninga
% f(x)=0 der f(a) og f(b) har ulike forteikn.
% For at metoden skal funkgere, må f være kontinuerlig.
% Grensene a og b og funksjonen f er hardkoda inn i skriptet.
% Funksjonen og de aktuelle grensene blir plotta fortløpende.

% Grenser
a=0;
b=pi/2;

% Funksjon
Funk=@(x) sqrt(x)-cos(x);

% Iterasjoner
N=7;

% Plotter
xVektor=a:(b-a)/500:b;
yVektor=Funk(xVektor);
plot(xVektor,yVektor,'linewidth',2)
hold on
% Plotter grensene
plot([a b],[0 0],'rx','linewidth',2)
plot([a b],[0 0],'k-')
set(gca,'fontsize',15)  % Justerer skriftstørrelsen på aksene
pause                   % Tar pause (venter på tastetrykk)

% Funksjonsverdier
Fa=Funk(a);
Fb=Funk(b);

% Starter for-løkke som kjøres N ganger
for i=1:N
  plot([a b],[0 0],'kx','linewidth',2)    % Gjør gamle grenser svarte
  c=(a+b)/2;         % Midtpunktet
  Fc=Funk(c); % Funksjonsverdi i midtpunktet
  if Fa*Fc<0
    b=c;             % Setter ny b til c
  else
    a=c;             % Setter ny a til c
  end
  plot([a b],[0 0],'rx','linewidth',2)    % Plotter nye grenser i rødt
  pause              % Tar pauser
end
hold off

% Regner ut nytt midtpunkt og skriver svaret til skjerm
% Vi regner også ut usikkerheten
x=(a+b)/2;
DeltaX=(b-a)/2;
disp(['Løsning: ',num2str(x),'.'])
disp(['Usikkerhet: ',num2str(DeltaX),'.'])
