Vous êtes sur la page 1sur 4

ROMBERG

function [RM]=romberg()
syms x y z;
g=input('g(x)=');
n=input('Romberg n: ');
a=input('limite a=');
b=input('limite b=');
RM=zeros(n,n);
fa=subs(g,a);
fb=subs(g,b);
for j=1:n
h(j)=(b-a)/(2^(j-1))
end
RM(1,1)=(h(1)/2)*(fa+fb);
for j=2:n
Sum=0;
for i=1:(2^(j-2))
c=(a+((2*i-1)*h(j)));
fc=subs(g,c);
Sum=Sum+fc;
end
RM(j,1)=(1/2)*(RM(j-1,1)+h(j-1)*Sum);
end
for j=2:n
for i=j:n
RM(i,j)=RM(i,j-1) + (RM(i,j-1)-RM(i-1,j-1))/((4^(j-1))-1);
end
end
for j=1:n
for i=j:n
if j==1&&i==1
fprintf('R(1,1)=h1/2[fa+fb]=%9.15f\n',RM(1,1))
elseif j==1&&i>1
fprintf('R(%1.0f,1)=(1/2)[R(%1.0f,1)+h%1.0f SumF(a+(2i-1)h%1.0f]=
%9.15f\n',i,i-1,i-1,i,RM(i,1))
else
fprintf('R(%1.0f,%1.0f)=R(%1.0f,%1.0f)+R(%1.0f,%1.0f)-R(%1.0f,%1.0f)/
(4^(%1.0f-1)-1)=%9.15f\n',i,j,i,j-1,i,j-1,i-1,j-1,j,RM(i,j))
end
end
end
fprintf('\nValor aproximado: %9.15f\n',RM(n,n))
F=int(g);
valor_real=subs(F,b)-subs(F,a)

CUADRATURA GAUSSIANA

function y=cuadraturaG(f,pol,a,b)
syms x t
%Respuestas del polinomio
T=double(solve(pol,x));
n=length(T);
format long
display('Raices del polinomio');
T
%Integracion de polinomios de Lagrange
for i=1:n
M=1;
for j=1:n
if(i==j)
else
M=M*((x-T(j))/(T(i)-T(j)));
end
end
C(i)=double(int(M,x,-1,1));
end
display('Valor de las C');
C
%Sustitucion de la funcion integrando a la nueva funcion
V=(1/2)*(((b-a)*t)+a+b);
dV=(b-a)/2;
ft=subs(f,V)*dV;

S=0;
%Uso de las C y de la nueva funcion evaluada en las raices del polinomio
for i=1:n
S=S+(C(i)*subs(ft,T(i)));
end
double(S)
%Valor exacto
Exacto=(int(f,x,a,b));
fprintf('El valor aproximado es %9.15f \n',double(S));
fprintf('El valor exacto es %9.15f \n',double(Exacto));
fprintf('El error %e \n',double(abs(S-Exacto)));
%IPR

RICHARDSON

function Extrapolacion_Richardson()
syms x;
clc;
disp('1-->Extrapolacion con funcion');
disp('2-->Extrapolacion con tabla');
select = input('seleccion : ');

arreglo = zeros();
Vaprox=0;
Vreal=0;
err=0;
switch(select)
case 1

f=input('digite la funcion f(x) : ' );


N=input('digite la cantidad de iteraciones N(j) : ');
h=input('digite h : ');
x0=input('digite el punto inicial x0 : ');
fprintf('\n\n');
for i=1: N
div=h;
d=1;
if(i~=1)
div = (h/2^(i-1));
d=2^(i-1);
end
superior = x0+div;
inferior = x0-div;
arreglo(1,i) = (1/(2*div))*(subs(f,superior)-subs(f,inferior));
fprintf('N(%1.0f)(h/%1.0f)=(1/(2h/%1.0f))*(F(x0+h/%1.0f)-F(x0-h/
%1.0f))=%3.15f\n\n',1,d,d,d,d,arreglo(1,i));
end
for i=1:N
m=1;

fprintf('\n------------------------------------------------------------------------
---------\n\n');
for j=1:(N-i)
k=2^(j);
d=(4^(i)-1);
arreglo((i+1) , j)=(arreglo(i,(j+1)))+((arreglo(i,(j+1))-
arreglo(i,j))/d);
fprintf('\n\n N(%1.0f)(h/%1.0f)=N(%1.0f)(h/%1.0f)+((N(%1.0f)(h/
%1.0f)-N(%1.0f)(h/%1.0f))/%1.0f =%3.15f',(i+1),m,i,k,i,k,
(j+1),m,d,arreglo((i+1),j));
m=m*2;
Vaprox = arreglo((i+1),j);
end
end

dif=diff(f,x);
Vreal = subs(dif,x0);
fprintf('\nValor aproximado es =%9.15f ',Vaprox);
fprintf('\nValor exacto es =%9.15f ' , Vreal );
err=abs(Vreal-Vaprox);
fprintf('\nError =%3.3e \n\n',err);
case 2

otherwise
return;
end

end

COMPUESTA DE SIMPSON

clc;
clear all;
format long;
fprintf('>>clc\n');
fprintf('>>syms x;\n');
n=input('>>n=');
a=input('>>a=');
b=input('>>b=');
disp('>>h=(b-a)/n;');
h=(b-a)/n;
disp('>>x0=a');
a
for i=1:n
fprintf('>>x%1.0f=(a+%1.0f*h)\n',i,i);
z=a+(i)*h;
fprintf('\n x%1.0f=\n\n\t%1.15f\n\n',i,z);
end
disp('>>x12=b');
b
syms x;
g=input('>>g=');
g
sum1=0;
sum2=0;
cad1='';
cad2='';
for i=1:n-1
y=a+i*h;
if(mod(i,2)==0)
sum1 = sum1 + subs(g,y);
nod=strcat('subs(g,x' ,num2str(i) ,')');
cad1 = strcat(cad1 , '+' , nod);
else
nod2=strcat('subs(g,x' ,num2str(i) ,')');
sum2= sum2 + subs(g,y);
cad2 = strcat(cad2 , '+' , nod2);
end
end
fprintf('>>sum1=%s \n',cad1);
sum1
fprintf('\n');
fprintf('>>sum2=%s \n',cad2);
sum2
fprintf('\n');
fa=subs(g,a);
disp('>>fa=subs(g,a);');
fb=subs(g,b);
disp('>>fb=subs(g,b);');
fprintf('>>faprox=(h/3)*(fa + 2*sum1 + 4*sum2 + fb)\n');
faprox=(h/3)* (fa + 2*sum1 + 4*sum2 + fb);
faprox

Vous aimerez peut-être aussi