Está en la página 1de 4

ECUACIONES DIFERENCIALES ORDINARIAS

Ecuacion diferencial: Buscamos encontrar una función

La resolución de una E.D.O. nos da una aproximación

Método de Euler

Ecuación a trabajar:

Condiciones iniciales:

clc, clear all, close all


syms y(x)
ecu_dif=diff(y,x)==2*x*y

ecu_dif(x) =

cod= y(0)==1

cod =

Sol_analitica=dsolve(ecu_dif,cod)

Sol_analitica =

fplot(Sol_analitica,[0 1]) %variables simbolicas, [limites]


f=inline('2*x*y','x','y')

f =

Inline function:
f(x,y) = 2*x*y

y0=1;
x0=0;
h=0.2;

En este caso, sabemos el numero de iteraciones por el rango: x0=0 y x1=1.

%Iteración 1
y1=y0+h*f(x0,y0);

1
x1=x0+h;
%Iteración 2
y2=y1+h*f(x1,y1);
x2=x1+h;
%Iteración 3
y3=y2+h*f(x2,y2);
x3=x2+h;
%Iteración 4
y4=y3+h*f(x3,y3);
x4=x3+h;
%Iteración 5
y5=y4+h*f(x4,y4);
x5=x4+h;

Eux=[x1 x2 x3 x4 x5]

Eux = 1×5
0.2000 0.4000 0.6000 0.8000 1.0000

Euy=[y1 y2 y3 y4 y5]

Euy = 1×5
1.0000 1.0800 1.2528 1.5535 2.0506

hold on
plot(Eux,Euy,'m-')
%error
Valor_real=subs(Sol_analitica,x5)

Valor_real =

Valor_aprox=Euy(end)

Valor_aprox = 2.0506

error_abs=abs(Valor_real-Valor_aprox);

error_abs =

error_rel=error_abs/Valor_real;
error=vpa(error_rel,4)

error =

Metodo de Euler modificado

%Iteración 1

2
k1=y0+h*f(x0,y0);
y1=y0+h/2*(f(x0,y0)+f(x0+h,k1));
x1=x0+h;
%iteración 2
k1=y1+h*f(x1,y1);
y2=y1+h/2*(f(x1,y1)+f(x1+h,k1));
x2=x1+h;
%Iteración 3
k1=y2+h*f(x2,y2);
y3=y2+h/2*(f(x2,y2)+f(x2+h,k1));
x3=x2+h;
%Iteracion 4
k1=y3+h*f(x3,y3);
y4=y3+h/2*(f(x3,y3)+f(x3+h,k1));
x4=x3+h;
%Iteración 5
k1=y4+h*f(x4,y4);
y5=y4+h/2*(f(x4,y4)+f(x4+h,k1));
x5=x4+h;
Euxm=[x1 x2 x3 x4 x5]

Euxm = 1×5
0.2000 0.4000 0.6000 0.8000 1.0000

Euym=[y1 y2 y3 y4 y5]

Euym = 1×5
1.0400 1.1715 1.4282 1.8830 2.6814

hold on
plot(Euxm,Euym,'r-')
legend('Solución analítica', 'Metodo de Euler','Metodo de Euler modificado')

Valor_real=subs(Sol_analitica,x5);
Valor_aprox=Euym(end);

3
error_abs=abs(Valor_real-Valor_aprox);
error_rel=error_abs/Valor_real;
error=vpa(error_rel,4)

error =

%euler modificado con ciclo for


x1(1)=0

x1 = 0

y1(1)=1

y1 = 1

xf=1;
h=0.2;
n=(xf-x1(1))/h

n = 5

for i=1:1:n
k1=y1(i)+h*f(x1(i),y1(i));
y1(i+1)=y1(i)+h/2*(f(x1(i),y1(i))+f(x1(i)+h,k1))
x1(i+1)=x1(i)+h
end

y1 = 1×2
1.0000 1.0400
x1 = 1×2
0 0.2000
y1 = 1×3
1.0000 1.0400 1.1715
x1 = 1×3
0 0.2000 0.4000
y1 = 1×4
1.0000 1.0400 1.1715 1.4282
x1 = 1×4
0 0.2000 0.4000 0.6000
y1 = 1×5
1.0000 1.0400 1.1715 1.4282 1.8830
x1 = 1×5
0 0.2000 0.4000 0.6000 0.8000
y1 = 1×6
1.0000 1.0400 1.1715 1.4282 1.8830 2.6814
x1 = 1×6
0 0.2000 0.4000 0.6000 0.8000 1.0000

Valor_real=subs(Sol_analitica,x1(end));
Valor_aprox=y1(end);
error_abs=abs(Valor_real-Valor_aprox);
error_rel=error_abs/Valor_real;
error=vpa(error_rel,4)

error =

También podría gustarte