% Data una funzione f(x) in un intervallo [a,b], 
% stimare l'area della superficie delimitata 
% della curva descritta da f(x) e dall'asse y=0
%

close all
effe=menu('Funzione','x^3+4','exp(x^2)','cos(x)+sin(x)') ;

a=input('Inserire l''estremo sinistro: ') ;
b=input('Inserire l''estremo destro: ' );
N=input('Numero di intervalli (almeno 5): ') ;
h=(b-a)/N ;

% Scegliere la funzione da un menu
% Suddividere l'intervallo [a,b] in N>=5 intervalli
% e calcolare l'area totale come somma delle aree
% relative a ciascun intervallo e considerando
% i valori di f(x) negli estremi dell'intervallo
% i-esimo
%

x=a:h:b ;
xplot=a:0.01:b;
if effe==1
    y=x.^3+4 ;
    yplot=xplot.^3+4 ;
elseif effe==2
    y=exp(x.^2) ;
    yplot=exp(xplot.^2) ;
else
    y=cos(x)+sin(x) ;
    yplot=cos(xplot)+sin(xplot) ;
end

A=0 ;
for i=1:N
    A=A+0.5*h*abs(y(i)+y(i+1)) ;
end    

disp(A)

% Disegnare il grafico della funzione in [a,b]
% e delle aree dei trapezi relativi agli intervallini
% con il comando 'area'
figure
plot(xplot,yplot,'r--','LineWidth',1.5)
hold on
area(x,y)

% Utilizzo il punto medio di ciascun intervallo
xpm=a+h/2:h:b;
if effe==1
    ypm=xpm.^3+4 ;
elseif effe==2
    ypm=exp(xpm.^2) ;
else
    ypm=cos(xpm)+sin(xpm) ;
end

Apm=h*sum(abs(ypm)) ;
disp(Apm)
figure
bar(xpm,ypm,0.8)
hold on
plot(xplot,yplot,'r')
