function [Q,R,est]=romberg(f,a,b,tol)
%
% [R,est,k]=romberg(f,a,b,tol)
% Regner ut integralet av f fra a til b ved hjelp av Rombergs metode. 
% Input: 
%       f: Funksjonshaandtak til f.
%       a,b: Integrasjonsgrenser
%       tol: Toleranse
% Ut: 
%       Q: Verdien av integralet
%       R: Romberg-tabellen. 
%       est: feilestimatet. 
%       

R(1,1)=(b-a)/2*(feval(f,a)+feval(f,b));

est=2*tol;
k=1;

while est>tol && k<10,
  k=k+1;
  U=midtpunkt(f,a,b,2^(k-2));  
  R(k,1)=(R(k-1,1)+U)/2;      % Rekursiv trapes. 
  for j=2:k
    R(k,j)=R(k,j-1)+(R(k,j-1)-R(k-1,j-1))/(4^(j-1)-1);
  end
  est=abs(R(k,k)-R(k-1,k-1));
end
Q = R(k,k);
if (k==10) && est>tol
    warning('Oensket noyaktighet er ikke oppnaadd.');
end



function U=midtpunkt(f,a,b,n)

dx=(b-a)/n;
X=a+dx*(-0.5+(1:n)');
U=dx*sum(feval(f,X));
