function s=simpson2(f,a,b)    

% Aproximacion de integrales con metodo de Simpson hasta error prefijado.    
%
%  Entradas:  f = funcion que deseamos integrar 
%             introducida como una cadena de caracteres.
%         
%    a, b = extremos del intervalo de integracion.    
%
%   El usuario tambien debe introducir:
%
%   error = tamaño maximo del error de aproximacion.
%       M = estimacion de sup |f´´´´| en [a,b]
%
% Salidas:     s =  valor aproximado de la integral.     
%              N =  numero de particiones utilizado.
%
% ceil(x) = comando que calcula la parte entera por arriba de x

disp(' ');
disp('Calculo de la integral mediante el Metodo de Simpson');  
disp(' ');  
disp(['Funcion que se integra: F(x) = ' f ]); 
disp(['Intervalo de integracion: [' mat2str(a) ',' mat2str(b) ']' ]);
disp(' ')
M= input('Introduce una cota M=sup|f´´´´|: ' );
disp(' ')
error= input('Introduce el tamaño maximo del error: ' );

N=ceil((M*(b-a)^5/(error*180))^(1/4));

if ceil(N/2)==N/2
else N=N+1
end
    
disp(' ');
disp(['El numero de intervalos que utilizaremos es:' int2str(N)]);  
disp(' ');

x=a;   
fa=eval(f);   
x=b;  
fb=eval(f);  
h=(b-a)/N;  
s1=0;   

for i=1:(N/2)
x=a+(2*i-1)*h;
s1=s1+eval(f);   
end   
s2=0;    
for i=1:(N/2-1);
x=a+2*i*h;
s2=s2+eval(f);  
 end  

 s=(h/3)*(fa+4*s1+2*s2+fb);     

disp(' ');
disp(['La solucion aproximada es:' mat2str(s)]); 
disp(' ');
   