Está en la página 1de 4

function p=trapezoide(f,a,b,n)

h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);
y(i)=feval(f,x(i));
end
for i=2:n-1
suma=suma+y(i);
end
p=0.5*h*(y(1)+2*suma+y(n));

function p=exp2(x)
p=exp(-x*x/2);
end

function p=simpson3(f,a,b,n)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);
y(i)=feval(f,x(i));
end
for i=2:n-1
if rem(i,2)==1
suma=suma+2*y(i);
else
suma=suma+4*y(i);
end
end
p=h*(y(1)+suma+y(n))/3;
function p=simpson8(f,a,b,n)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);
y(i)=feval(f,x(i));
end
for i=2:n-1
if rem(i-1,3)==0
suma=suma+2*y(i);
else

suma=suma+3*y(i);
end

end
p=3*h*(y(1)+suma+y(n))/8;

function [I,ea]=romberg(f,a,b,maxit,es)
I=zeros(10,10);
n=1;
I(1,1)=trapezoide(f,a,b,n);
iter=0;
for i=1:100
iter=iter+1;
n=2^iter;
I(iter+1,1)=trapezoide(f,a,b,n);
for k=2:iter+1
j=2+iter-k;
I(j,k)=((4^(k-1)*I(j+1,k-1)-I(j,k-1))/(4^(k-1)-1));
end
ea=abs((I(1,iter+1)-I(2,iter))/I(1,iter+1))*100;
if (iter>=maxit)||(ea<=es)
break
end
end
end

clear all
clc
disp('MENU DE OPCIONES')
disp('1.- metodo del trapecio')
disp('2.- metodo simpson 1/3')
disp('3.- metodo simpson 3/8')
disp('4.- metodo de romberg')
disp('***************************************')
r=1;
while r==1
opcion=input('ingrese numero de opcion: ');
%metodo del trapecio
if opcion==1
%syms x
f=input('ingrese funcion:');
a=input('ingrese limite inferior:');
b=input('ingrese limite superior:');
n=input('ingrese numero de particiones:');
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);

y(i)=feval(f,x(i));
end
for i=2:n-1
suma=suma+y(i);
end
p=0.5*h*(y(1)+2*suma+y(n));
fprintf('integal= %5.9f\n',p)
end
%metodo de simpson 1/3
if opcion==2
f=input('ingrese funcion:');
a=input('ingrese limite inferior:');
b=input('ingrese limite superior:');
n=input('ingrese numero de particiones:');
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);
y(i)=feval(f,x(i));
end
for i=2:n-1
if rem(i,2)==1
suma=suma+2*y(i);
else
suma=suma+4*y(i);
end
end
p=h*(y(1)+suma+y(n))/3;
fprintf('integal= %5.9f\n',p)
end
%metodo simpson 3/8
if opcion==3
f=input('ingrese funcion:');
a=input('ingrese limite inferior:');
b=input('ingrese limite superior:');
n=input('ingrese numero de particiones:');
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(1,n);
suma=0;
for i=1:n
x(i)=a+h*(i-1);
y(i)=feval(f,x(i));
end
for i=2:n-1
if rem(i-1,3)==0
suma=suma+2*y(i);
else
suma=suma+3*y(i);
end
end
p=3*h*(y(1)+suma+y(n))/8;
fprintf('integal= %5.9f\n',p)

end
%metodo de romberg
if opcion==4
f=input('ingrese funcion:');
a=input('ingrese limite inferior:');
b=input('ingrese limite superior:');
maxit=input('ingrese numero maximo de iteraciones:');
es=input('ingrese el error:');
I=zeros(10,10);
n=1;
I(1,1)=trapezoide(f,a,b,n);
iter=0;
for i=1:100
iter=iter+1;
n=2^iter;
I(iter+1,1)=trapezoide(f,a,b,n);
for k=2:iter+1
j=2+iter-k;
I(j,k)=((4^(k-1)*I(j+1,k-1)-I(j,k-1))/(4^(k-1)-1));
end
ea=abs((I(1,iter+1)-I(2,iter))/I(1,iter+1))*100;
if (iter>=maxit)||(ea<=es)
break
end
end
fprintf('el error cometido es: %5.10f\n',ea)
disp(I)
end
disp(' ')
r=input('desea hacer otra operacion 1=si : ');
if r~=1
break
end
end

También podría gustarte