Professional Documents
Culture Documents
METODOS NUMERICOS
Realizar cdigos para cada uno de los mtodos y grafica comparando mtodos (en Matlab) y
comparar todos los mtodos (obteniendo todos los errores correspondientes) para el siguiente
ejemplo:
f ( x , y ) =4e0.8x 0.5y
Utilizando h=0.5 y y(0)=2 desde x=0 hasta 5.
Mtodo de Euler.
RK2 (a2= ) o Heun.
Los mtodos para resolver una EDO a) de un solo paso. b) de mltiples pasos.
ec.1
ec.2
Predictor:
Corrector:
ec. 3
Para n=3, es posible efectuar un desarrollo similar al del mtodo de segundo orden. El
resultado de tal desarrollo genera seis ecuaciones con ocho incgnitas. Esto nos obliga
a dar 2 valores de incgnitas para establecer los parmetros restantes. Una versin
comn es:
RK4 (Rugen-Kutta de 4to orden)
Mtodo de Euler.
clc
clear all
close all
syms('x');
f=input('Ingrese Ecuacin = ');
xo1=input('ingrese lmite inferior de x=');
xf=input('ingrese lmite superior de x=');
Xo=input('ingrese Xo=');
Yo=input('ingrese Yo=');
h=input('Rango= ');
y=int(f,x);
x=Xo;
y1=eval(y)
C=Yo-y1
disp ('dy/dx');
f
disp ('Funcion integrada aplicada las condiciones');
Y=y+C
x=xo1;
Y1=eval(Y);
%Pendientes=verd
n=abs((xf-xo1)/h)+1;
m=zeros(1,n);
for i=1:n;
j(1)=xo1;
j(i+1)=j(i)+h;
x=j(i);
m(i)=eval(f);
end
%Y de euler
Yeu=zeros(1,n);
Yeu(1)=Y1;
for j=2:n;
Yeu(j)=Yeu(j-1)+(m(j-1)*h);
end
%Y verd
j=zeros(1,n);
G=zeros(1,n);
for i=1:n;
j(1)=xo1;
j(i+1)=j(i)+h;
x=j(i);
G(i)=eval(Y);
end
%grafica
hold on
grid on
title('Yeuler,Yverdadero vs intervalo X');
Graf=plot(j(1:n),G(1:n),'b-','linewidth',2);
graf=plot(j(1:n),Yeu(1:n),'g-','linewidth',3);
xlabel('intervalo de anlisis')
ylabel('Valores de Y de euler y Y verdadero')
hold off
xo=0;
y= 2;
x=0;
xf=5;
h=0.5;
n=(xf-xo)/h; %nmero de puntos necesarios
vectory=y;
vectorx=x;
for i=1:n
k1=4*exp(0.8*x)-0.5*y;
k2=4*exp(0.8*(x+(3/4)*h))-0.5*(y+(3/4)*k1*h);
y=y+h*((1/3)*k1+(2/3)*k2);
x=x+h;
vectory=[vectory y];
vectorx=[vectorx x];
end
vectory;
vectorx;
plot(vectorx,vectory,'*')
title('Mtodo de Runge-Kutta de 2do orden')
xo=0;
y= 2;
x=0;
xf=5;
h=0.5;
n=(xf-xo)/h; %nmero de puntos necesarios
vectory=y;
vectorx=x;
for i=1:n
%calculo de las constantes de runge kutta
k1=4*exp(0.8*x)-0.5*y;
k2=4*exp(0.8*(x+(1/2)*h))-0.5*(y+(1/2)*k1*h);
k3=4*exp(0.8*(x+h))-0.5*(y-k1*h+2*k2*h);
y=y+((1/6)*(k1+4*k2+k3)*h);
x=x+h;
vectory=[vectory,y];
vectorx=[vectorx,x];
end
disp('y=')
disp(vectory')
plot(vectorx,vectory,'b-*')
title('Mtodo rugen-kutta 3er orden')
clc
clear all
close all
xo=0;
y= 2;
x=0;
xf=5;
h=0.5;
n=(xf-xo)/h; %nmero de puntos necesarios
vectory=y;
vectorx=x;
for i=1:n
k1=4*exp(0.8*x)-0.5*y;
k2=4*exp(0.8*(x+(1/2)*h))-0.5*(y+(1/2)*k1*h);
k3=4*exp(0.8*(x+(1/2)*h))-0.5*(y+(1/2)*k2*h);
k4=4*exp(0.8*(x+h))-0.5*(y+k3*h);
y=y+((1/6)*(k1+2*k2+2*k3+k4)*h);
x=x+h;
vectory=[vectory,y];
vectorx=[vectorx,x];
end
disp('y=')
disp(vectory')
plot(vectorx,vectory,'b-o')
title('Mtodo rugen-kutta 4to orden')