function I=trapets(fh,a,b,n)
% Den här funktionen beräknar integralen av f(x) på intervallet a<x<b.
% Indata: fh - ett fuktionshandtag till en funktion (t.ex. @exp) eller namnet på
%              en inlinefunktion. 
%          a - undre integrationsgräns
%          b - övre integrationsgräns
%          n - antalet indelningar av intervallet (finheten är (b-a)/n)
% Utdata:  I - ett närmevärde till den sökta integralen
% Exempel: Beräkna arean under grafen y=cos(x), 1<x<3.
%          > A=trapets(@sin,1,2,30)

% Kontroll av indata
if nargin ~=4 % kommandot "nargin" ger antalet argument som har skickats in 
              % till "trapets"  om detta antal ej är fyra så skickar vi ett
              % felmeddelande till användaren av "trapets"
   error('antalet indata är 4')
end
if ~isobject(fh) % om fh inte är ett funktionshandtag eller en inlinefunktion
                 % så ges ett felmeddelande
   error('första argumentet skall vara funktionsandtag eller en inlinefunktion')
end

h=(b-a)/n; % delintevallens längd
xk=a:h:b;  % indelningen av intervallet [a b], (xk(1)=a, xx(2)=a+h,...xk(n+1)=b;
fxk=feval(fh,xk); % funtionsvärdena beräknas i punkterna xk
I=h.*(sum(fxk)-(fxk(1)+fxk(2))/2); % Integralen beräknas m.h.a trapetsformeln

% Om man önskar så kan resultat presenteras i en figur

x=linspace(a,b,200); % genererar en radvektor med 200 punkter mellan a och b
y=feval(fh,x); % funktionsvärdena för punkterna i vektorn x beräknas
plot(x,y),shg
gtext(['Integralens värde är: ' num2str(I)]) 
% kommandot "gtext" skapar ett hårkors som gör det möjligt att placera texten
% där man klickar. 
% kommandot "num2str" konverterar talet I till en textsträng, 