You are on page 1of 13

Simpson 1/3 en Matlab

%regla de simpson 1/3


clear all; close all; clc
fun=input('Ingresa la funcin f(x) entre comillas: ');
f=inline(fun);
n=1;
while mod(n,2)~=0
n=input('Ingrese el nmero de subintervalos: ');
if mod(n,2)~=0
disp('El nmero de subintervalos debe ser par, pulse
una tecla para continuar')
pause
end
end
a=input('Ingrese el lmite inferior de la integral: ');
b=input('Ingrese el lmite superior de la integral: ');

h=(b-a)/n;

sumai=0;
sumap=0;

for i=1:2:n-1
sumai=sumai+feval(f,h*i+a);
end
for i=2:2:n-2
sumap=sumap+feval(f,h*i+a);
end

int=(h/3)*(feval(f,a)+4*sumai+2*sumap+feval(f,b));

disp(['El resultado de la integral es ' num2str(int)])


Metodo de Simpson 1/3 en matlab
clear all;
clc;
fprintf('Calculo de la integral por el metodo de Simpson de
1/3\n\n');
f=input('introduce la funcion:','s');
a=input('lime inferior:');
b=input('limite superior:');
c=input('numero de segmentos a dividir (numero par):');
h=(b-a)/c;
z=0;
x=a;
for i=1:c;
if (-1)^i==1

k=eval(f);

z=z+k;

end

x=h*i;
end
zz=0;
x=a;
for i=2:c;
if (-1)^i==-1
k=eval(f);
zz=zz+k;
end
x=h*i;
end
x=a;
if x==a
d=eval(f);
end
x=b;
if x==b
e=eval(f);
end
z=z*4;
v=zz*2;
z=z+v+d+e;
z=z/(3*c);
z=z*(b-a)
fprintf('Resultado ');

% Integrales definidas

% Realizado por Ing E. Porto

clear;clc

%Ingreso de datos

disp('Regla de simpson')

disp('Integrales definidas')

fx=input('digite la funcion f(x) = ','s');

a=input('limite inferior = ');

b=input('limite superior = ');

tol=input('tolerancia = ');

%Condiciones iniciales

err(1)=100;ns=2;exito=0;

%Calculo de la integral

while exito==0

h=(b-a)/ns;

x=a:h:b;

y=eval(fx);

if (rem(ns,3)==0) %simpson 3/8

Iaprox(ns-1)=3*h/8*(y(1)+y(ns+1)+3*sum(y(2:3:ns-1))+3*sum(y(3:3:ns))+2*sum(y(4:3:ns-
2)));

elseif (rem(ns,2)==0) %simpson 1/3

Iaprox(ns-1)=h/3*(y(1)+y(ns+1)+4*sum(y(2:2:ns))+2*sum(y(3:2:ns-1)));

else % combinacion 3/8 + 1/3

Iaprox(ns-1)=h/3*(y(1)+y(ns-2)+4*sum(y(2:2:ns-3))+2*sum(y(3:2:ns-4)))+3*h/8*(y(ns-
2)+3*y(ns-1)+3*y(ns)+y(ns+1));

end

if ns>2 % calculo del error

err(ns-1)=abs((Iaprox(ns-1)-Iaprox(ns-2))/Iaprox(ns-1))*100;

if err(ns-1)<tol

exito=1;

break;

end

end
ns=ns+1;

end

%Presentacion de resultados

n=2:ns;

fprintf('n');

disp([' segm' ' integ' ' error'])

disp([n' Iaprox' err' ]);

fprintf('n se alcanzo la solucion con % g segmentos n',ns);

fprintf('n la integral aproximada es %g n',Iaprox(ns-1));

You might also like