You are on page 1of 56

SOLUCIN NUMRICA DE

ECUACIONES DIFERENCIALES
ORDINARIAS DE PRIMER ORDEN
SOLUCION NUMERICA

Una solucin de esta ecuacin inicial con CI es


una funcin

: ( x0 , x0 + ) R
tal que

'( x) = f ( x, ( x)), para x ( x0 , x0 + )

PROBLEMA: Hallar una aproximacin numrica de la


solucin de la EDO con CI
Campo de pendientes f(x,y)

Curva
solucin

pendiente

Conocemos (a) = ( x0 )

Queremos obtener una aproximacin de (b) para b > a

Consideramos una particin del intervalo [ a, b]

a = x0 < x1 < x2 < L < xn = b,


t ti
donde h= i+1 lo llamamos tamao de paso. Observemos que
n
tk = kh + t0 , k = 1, 2,...n
Consideramos la condicin inicial
Curva solucin
( x0 , y0 ) = ( x0 , y ( x0 )) = ( a, y ( a))

El desarrollo de Taylor 1er orden alrededor


de x0
y ( x) = y ( x0 ) + y '( x0 )( x x0 ) + R2 ( x)
pendiente=
obtenemos la aproximacin lineal de y ( x)
cerca de x0

y ( x) y ( x0 ) + y '( x0 )( x x0 )

tomando x = x1 = x0 + h
obtenemos y ( x) = y ( x1 ) = y ( x0 + h) y ( x0 ) + y '( x0 ) h = y ( x0 ) + f ( x0 , y0 ) h
En resumen:

y1 = y ( x1 ) y ( x0 ) + f ( x0 , y0 )h
=y0 + f ( x0 , y0 )h

En general, tenemos

yk +1 = y ( xk +1 ) y ( xk ) + f ( xk , yk )h
=yk + f ( xk , yk )h
Ejemplo Mtodo de Euler

y1 = y0 + f (t0 , y0 )h = 1 + (3.5)(0.1) = 1.35

y (t2 ) y2 = y1 + f (t1 , y1 )h = 1.35 + f (0.1,1.35)(0.1)


= 1.35 + (3.229837)(0.1) 1.672984

SI QUEREMOS APROXIMAR y(1) CONTINUAMOS CON ESTE PROCESO


Ejemplo
Consideremos la ecuacin diferencial ordinaria

Recordemos que no es difcil encontrar la solucin analtica, mediante


el mtodo de separacin de variables, de la ecuacin diferencial.
Ejercicio: Hallar la solucin analtica de la ecuacin diferencial anterior

Veamos nuestro primer ejemplo para resolover ecuaciones


diferenciales ordinarias de primer orden mediante Matlab:
function r = yexact(t,y0,K,s)
r = y0*exp(K*t) + s*(1 - exp(K*t));
Se ha definido una funcin que depende de cuatro argumentos: el temporal, la condicin inicial y dos constantes.
Supongamos que sus valores estn dados por y0=100, K=1, and s=20. Escribamos el siguiente cdigo en
nuestra pantalla del editor de Matlab:

El siguiente comando crea un vector

t = 0:0.01:5;
El siguiente comando crea la grfica de la solucin

plot(t,yexact(t,100,1,20))

Figura 1: Solucin exacta


Estructura computacional del
Mtodo de Euler

Paso 1. definir f (t, y)


Paso 2. Entrada: Valores iniciales t0 and y0
Paso 3. entrada tamao de paso h # de pasos n
Paso 4. salida t0 and y0
Paso 5. para j de 1 a n do
Paso 6. k1 = f (t, y)
y = y + h k1
T =t+h
Paso 7. salidas t y y
Paso 8. end
Programa en Matlab
clc; plot(t,y,'b')
clf; title('Soluciones de dy/dt=-2*(y-T),
clear all; y(0)=T mediante Euler')
T=25; axis([0 5 20 55])
tinic=0.0; xlabel('Tiempo');
tfinal=5.0; ylabel('Temperatura')
yinic=50.0; hold on
n=100; plot(t,25,'-r')
f=@(t,y) -2*(y-T);
h=(tfinal-tinic)/n;
t=zeros(1,n+1);
y=zeros(1,n+1);
t(1)=tinic;
y(1)=yinic;
for i=1:n
t(i+1)=t(i)+h;
y(i+1)=y(i)+h*f(t(i),y(i));
end
Grfica obtenida con Matlab
Diferentes nmeros de paso n=5,10
Programas Mtodo de Euler en Matlab

TIPO SCRIPT

TIPO FUNCIN clc;


clf;
clear all;
T=25;
function [t,y]=Euler_clasico(f,tinic,yinic,tfinal,n) tinic=0.0;
h=(tfinal-tinic)/n; tfinal=5.0;
t=zeros(1,n+1); yinic=50.0;
y=zeros(1,n+1); n=100;
t(1)=tinic; f=@(t,y) -2*(y-T);
y(1)=yinic; [t1,y1]=Euler_clasico(f,tinic,yinic,tfinal,n);
for i=1:n plot(t1,y1,'b')
t(i+1)=t(i)+h; title('Soluciones de dy/dt=-2*(y-T),
y(i+1)=y(i)+h*f(t(i),y(i)); y(0)=T mediante Euler')
end axis([0 5 20 55])
xlabel('Tiempo');
ylabel('Temperatura')
hold on
plot(t1,25,'-r')
%%%PROGRAMA DEL METODO DE EULER MODIFICADO CON UN ARCHIVO
TIPO SCRIPT%%%
%%%ECUACION DIFERENCIAL ORDINARIA dy/dt=k(y-c)%%%%

k = 1;
c = 20;
y0= 100;
npuntos = 50; %%Numero de pasos%%
h = 0.1;

y = zeros(npuntos,1); %Inicializamos el vector 'y' de posiciones con ceros%


t = zeros(npuntos,1); %Inicializamos el vector 't' de tiempos con ceros%

y(1) = y0; %Posicion inicial%


t(1) = 0.0; %Timepo inicial%

for j = 1 : npuntos %-1 % loop para el tamao de paso%


y(j+1) = y(j) + (h/2) * ((k*(y(j)-c)+ y(j) +h*k*(y(j)-c)));
t(j+1) = t (j) + h;
end
%%Hemos terminado la simulacion numerica%%
%%Para el ERROR%%

z = exp(t + log(80))+ 20; %Solucion analitica de la ecuacion

%%Empezemos la parte de la visualizacion%%

plot (t,y,'-bo',t,z,'r')
grid on
xlabel('tiempo')
ylabel('y(t)')
legend('solucion numerica','solucion analitica')
title('Solucion numerica mediante Euler mejorado Vs
solucion analitica')
Euler mejorado
(Heun, predictor-corrector)
f ( x0 , y0 ) + f ( x1 , y%1 )
Predictor: y%1 = y0 + f ( x0 , y0 ) h Corrector: y1 = y0 + h
2

f ( x1 , y%1 )

f ( x0 , y0 )
y1
y%1 1
{ f ( x0 , y0 ) + f ( x1 , y%1 )}
2

x0 x1 = x0 + h x0 x1 = x0 + h

Predictor: y%i +1 = yi + f ( xi , yi ) h
f ( xi , yi ) + f ( xi +1 , y% i +1 )
Corrector: yi +1 = yi + h
2
Ejemplo Euler-mejorado
Comparacin Euler vs. Euler-mejorado
Estructura computacional del
Mtodo de Euler Mejorado

Paso 1. definir f (t, y)


Paso 2. Entrada: Valores iniciales t0 and y0
Paso 3. entrada tamao de paso h # de pasos n
Paso 4. salida t0 and y0
Paso 5. para j de 1 a n do
Paso 6. k1 = f (t, y)
k2 = f (t + h, y + h k1)
y = y + (h/2) (k1 + k2)
t=t+h
Paso 7. salidas t y y
Paso 8. end
Programa Euler-mejorado en Matlab

function tinic=0.0;
[t,y]=Euler_mejorado(f,tinic,yinic,tfinal,n) tfinal=1.0;
h=(tfinal-tinic)/n; yinic=50.0;
t=zeros(1,n+1); n=1000;
y=zeros(1,n+1); f=@(t,y) -2*(y-25);
t(1)=tinic; [t3,y3]=Euler_mejorado(f,tinic,yi
y(1)=yinic; nic,tfinal,n);
for i=1:n plot(t3,y3,'b')
t(i+1)=t(i)+h; title('Soluciones de dy/dt=-2*(y-
P1=f(t(i),y(i)); 25), y(0)=T mediante Euler-
P2=f(t(i)+h,y(i)+h*P1); mejorado')
y(i+1)=y(i)+(h/2)*(P1+P2); axis([0 1 20 55])
end xlabel('Tiempo');
ylabel('Temperatura')
axis([0 1 20 55])
Mtodo de Punto Medio (o Polgono mejorado)

Se usa el mtodo de Euler para


realizar una prediccin del valor de
la solucin usando la pendiente en
un punto intermedio del intervalo

h
yi +1/2 = yi + f ( xi , yi )
2

yi +1 = yi + f ( xi +1/ 2 , yi +1/ 2 )h

22
Geometra Punto Medio
Prediccin h
y 1 = y0 + f (x0, y0) y1 = y0 + f ( x0+ 1 , y0+ 1 ) h
0+ 2 2 2
2

f (x 1 ,y 1 )
0+ 0+
2 2

f ( x0 , y0 )
y1
( x0 , y0 )
y 1
0+
2

x0 x1 = x0 + h
1
x 1 = x0 + h
0+ 2
2
Punto Medio

h
Prediccin
y 1 = yi + f (xi, yi )
i+ 2
2

yi +1 = yi + f ( x 1 ,y 1 )h
i+ i+
2 2
Qu hemos hecho hasta el
momento?
Queremos aproximar numericamente soluciones de EDOs
de primer orden

dy
= f ( x, y )
dx

Filosofa:
Valor nuevo = valor viejo + pendiente * (tamao_paso)
yi +1 = yi + * h
yi +1 valor nuevo, yi valor viejo
pendiente, h tamao de paso
Runge Kuta
Buscamos un mtodo de la forma

Valor nuevo = valor viejo + pendiente * (tamao_paso)


yi +1 = yi + * h
yi +1 valor nuevo, yi valor viejo
pendiente, h tamao de paso

De manera que la pendiente sea una pendiente


ponderada sobre distintos puntos del intervalo
[x(i),x(i+1)].
Runge Kuta de Cuarto Orden
(Acto de fe)
Valor nuevo = valor viejo + pendiente * (tamao_paso)
yk +1 = yk + * h
yk +1 valor nuevo, yk valor viejo
pendiente, h tamao de paso
1
yk +1 = yk + * h, = ( kn1 + 2kn 2 + 2kn 3 + kn 4 )
6

ki ,2

ki ,1
ki ,4
ki ,3 yi +1
yi
1
ti ti + h ti +1 = ti + h
2
Ejemplo Runge Kuta Cuarto Orden
f (t , y ) = 1 t + 4 y

Tamao de paso:

y (t1 ) = y (t0 + h) = y (0 + 0.2)


= y (0.2) y1 2.5016
Otro ejemplo
y (1) = ?

Tamao de paso Es necesario realizar dos


juegos de clculos

Calculamos
las cuatro
pendientes

Repitiendo el proceso
Obtencin de Runge Kuta de
Segundo Orden
yi +1 = yi + h
= a1k1 + a2 k2 + K + aM kM
es una pendiente ponderada de salida
ai constantes
k1 = f (ti , yi )
k2 = f (ti + p1h, yi + q11k1h)
k3 = f (ti + p2 h, yi + q21k1h + q22 k2 h)
M
k M = f (ti + pM 1h, yi + qM 1,1k1h + ... + qM 1, M 11k N 11h)
Aproximacin de la solucin por serie de Taylor de
segundo orden alrededor de t = ti

h2
y (ti + h) = y (ti ) + y '(ti )h + y ''(ti ) + O(h3 )
2
Pero podemos calcular y '(ti ) y y ''(ti )
y '(ti ) = f (ti , y (ti ))
f (ti , y (ti )) f (ti , y (ti ))
y ''(ti ) = + y '(ti )
t y
f (ti , y (ti )) f (ti , y (ti ))
= + f (ti , y (ti ))
t y
La aproximacin obtenida est dada por

y (ti +1 ) = y (ti + h)
h2
y (ti ) + y '(ti )h + y ''(ti )
2
f (ti , y (ti )) f (ti , y (ti )) h2
=y (ti ) + f (ti , y (ti ))h + + f (ti , y (ti ))
t y 2

De esta forma,
f (ti , y (ti )) f (ti , y (ti )) h2
y (ti +1 )=y (ti ) + f (ti , y (ti ))h + + f (ti , y (ti ))
t y 2
Aproximacin por Serie de Taylor a primer orden de una
funcin de dos variables

f (ti , yi ) f (t , y )
f (ti + H , yi + K ) f (ti , yi ) + (H ) + i i (K )
t y
Para aproximar k2 tomamos H = p1h y K = q11k1h

De esta forma, obtenemos

k2 = f (ti + p1h, yi + q11k1h)


f (ti , yi ) f (ti , yi )
= f (ti , yi ) + [ p1h ] + [ q11k1h ]
t y
De esta forma

= a1k1 + a2 k2
f (ti , yi ) f (ti , yi )
=a1 f (ti , yi ) + a2 f (ti , yi ) + [ p1h ] + [ q11k1h ]
t y
f (ti , yi ) f (ti , yi )
= [ a1 + a2 ] f (ti , yi ) + h a2 p1 + a2 q11k1
t y
f (ti , yi ) f (ti , yi )
= [ a1 + a2 ] f (ti , yi ) + h a2 p1 + a2 q11 f (ti , yi )
t y
En consecuencia,

yi +1 y (ti +1 ) = yi + h = y (ti ) + h
f (ti , yi ) f (ti , yi )
=y (ti ) + [ a1 + a2 ] f (ti , yi ) + h a2 p1 + a2 q11 f (ti , yi ) h
t y
f (ti , yi ) f (ti , yi ) 2
=y (ti ) + [ a1 + a2 ] f (ti , yi )h + a2 p1 + a2 q11 f (ti , yi ) h
t y

En resumen,
f (ti , yi ) f (ti , yi ) 2
y (ti +1 ) = y (ti ) + [ a1 + a2 ] f (ti , yi )h + a2 p1 + a2 q11 f (ti , yi ) h
t y
Hemos obtenido dos aproximaciones para y (ti +1 ) , a saber:

f (ti , y (ti )) f (ti , y (ti )) h2


y (ti +1 )=y (ti ) + f (ti , y (ti ))h + + f (ti , y (ti ))
x y 2

f (ti , yi ) f (ti , yi ) 2
y (ti +1 ) = y (ti ) + [ a1 + a2 ] f (ti , yi )h + a2 p1 + a2 q11 f (ti , yi ) h
t y

Igualando coeficientes

1 1
a1 + a2 = 1, a2 p1 = y a2 q11 =
2 2
Es decir,

1 1
a1 = 1 a2 , p1 = y q11 =
2a2 2a2

Por lo que tenemos una infinidad de Mtodos de Runge Kuta de


orden 2, uno por cada valor que le demos al parmetro
independiente a2
Casos particulares
1
yi +1 = yi + h
a1 = a2 = p1 = q11 = 1
1
= a1k1 + a2 k2 = [ k1 + k2 ]
2
2
donde
k1 = f (ti , yi )
k2 = f (ti + p1h, yi + q11k1h)
= f (ti + h, yi + k1h)
=f (ti + h, yi + f (ti , yi )h)
Por lo tanto

f (t , y ) + f (ti + h, yi + k1h)
yi +1 = yi + i i h
2

Euler modificado (Heun o predictor-corrector)!!!!!!


Casos particulares
a1 = 0, a2 = 1 p1 = q11 =
1 yi +1 = yi + h
2
= a1k1 + a2 k2 = k2
donde

k2 = f (ti + p1h, yi + q11k1h)


1 1
= f (ti + h, yi + f (ti , yi )h)
2 2
1 1
Por lo tanto yi +1 = yi + f (ti + h, yi + k1h)h
2 2
1
= yi + f (t 1 , yi + k1h)h
i+ 2
2
1 1
yi +1 = yi + f (ti + h, yi + k1h)h
2 2
1
= yi + f (t 1 , yi + k1h)h
i+ 2
2

1 1
y% 1 = yi + k1h = yi + f (ti , yi ) h
i+
2 2 2
1 1
yi +1 = yi + f (ti + h, yi + k1h)h
2 2
=yi + f (t 1 , y% 1 )h
i+ i+
2 2

Obtenemos el Mtodo de Punto Medio


Geometra del mtodo
1 1
y% 1 = yi + k1h = yi + f (ti , yi ) h yi +1 = yi + f (t 1 , y% 1 )h
i+
2 2 2 i+
2
i+
2

y
f (ti +1 , y% i +1 )
f (ti , yi )

y% i +1 yi +1
yi
1 t
t 1 = ti + h
ti i+
2 2 ti +1

h
Prediccin h
y 1 = y0 + f (x0, y0) y1 = y0 + f ( x0+ 1 , y0+ 1 ) h
0+ 2 2 2
2

f (x 1 ,y 1 )
0+ 0+
2 2

f ( x0 , y0 )
y1
( x0 , y0 )
y 1
0+
2

x0 x1 = x0 + h
1
x 1 = x0 + h
0+ 2
2
Sistemas de ecuaciones diferenciales

ax ''(t ) + bx '(t ) + cx(t ) = F (t )


Cond. inic: x(t0 ) = x0 , x '(t0 ) = x%0
con el cambio de variables y (t ) = x '(t )
tenemos que
y '(t ) = x ''(t ).

En consecuencia
x' = y
1 b c
y ' = F (t ) y x
a a a
x' = y x ' = f1 ( x, y, t ) = y
1 b c
y ' = F (t ) y x y ' = f 2 ( x, y, t ) = 1 F (t ) b y c x
a a a a a a

x x' x(t0 ) x0
Y = Y ' = , Y (t0 ) = = % = Y0
y y ' y (t0 ) x0

f1 ( x, y, t )
Tomamos F (Y , t ) =
f
2 ( x , y , t )
En resumen, obtenemos una ecuacin de la forma

Y ' = F (Y , t ), Y (t0 ) = Y0
Muy semejante a una vieja conocida:

y ' = f ( y, t ), y (t0 ) = y0
La cual aproximamos numricamente mediante distintos
algoritmos : P.ej. Euler

yi +1 = yi + hf ( yi , ti )
Extendiendo a sistemas de ecuaciones
Yi +1 = Yi + hF (Yi , ti )

xi +1 xi f1 ( xi , yi , ti )
= + h
yi +1 yi i f 2 ( xi , yi , ti )

xi +1 = xi + hf1 ( xi , yi , ti )
En resumen:
yi +1 = yi + hf 2 ( xi , yi , ti )
Euler para sistemas
f1 ( x, y ) = x 4 y,
f 2 ( x, y ) = x + y

xi +1 = xi + hf1 ( xi , yi , ti ) = xi + h ( xi 4 yi )
yi +1 = yi + hf 2 ( xi , yi , ti ) = xi + h ( xi + yi )

f1 ( x0 , y0 ) f 2 ( x0 , y0 )

f1 ( x1 , y1 ) f 2 ( x1 , y1 )
Punto Medio para
Sistemas de Ecuaciones
h yi +1 = yi + f ( y ,t )h
Prediccin y 1 = yi + f ( yi , ti ) 1 1 Correccin
i+ 2 i+ i+
2 2 2

h Yi +1 = Yi + f (Y 1 , t )h
Y 1 = Yi + F (Yi , ti ) 1
i+ 2 i+ i+
2 2 2

f1 ( x 1 , y 1 , ti )
xi +1 xi h i+ i+

x 1 = +
2 2

i + 2 xi h f1 ( xi , yi , ti )
yi +1 yi 2 f 2 ( xi + 1 , yi + 1 , ti )
y = y + 2 f (x , y , t ) 2 2
i+ 1 i 2 i i i
2
h h
x 1 = xi + f1 ( xi , yi , ti ) xi +1 = xi + f1 ( x 1 , y 1 , ti )
i+ 2 2 i+ i+
2 2 2

h h
y 1 = yi + f 2 ( xi , yi , ti ) yi +1 = yi + f 2 ( x 1 , y 1 , ti )
i+ 2 2 i+ i+
2 2 2
Dinmica de poblaciones:
depredador-presa
R 1
Y = Y (0) =
F 1
h = 0.1, n = 80
tinic=0.0, tfinal=8;
xinic=1.0,yinic=1.0; n=80;
f1=@(t,x,y) 2*x-1.2*x.*y;
f2=@(t,x,y) -y+0.9*x.*y;
[t1,x1,y1]=RK4_plano_MM(f1,f2,tinic,xinic,yinic,tfinal,n);
[t2,x2,y2]=Euler_clasico_plano(f1,f2,tinic,xinic,yinic,tfinal,n);
figure(1)
plot(t2,x2,'r',t2,y2,'b), legend('t vs x','t vs y')
title('t vs x,t vs y')
figure(2)
plot3(t2,x2,y2,'g'), title('t vs x vs y')
figure(3)
Rutina en Matlab
plot(x2,y2,'g'),title('x vx y') para comparar los
figure(4) mtodos de
plot(t1,x1,'r',t1,y1,'b'),legend('t vs x','t vs y')
title('t vs x,t vs y')
Euler simple y Runge-
figure(5) Kutta de orden 4
plot3(t1,x1,y1,'k), title('t vs x vs y')
figure(6)
plot(x1,y1,'k'), title('x vx y')
figure(7)
plot(x1,y1,'g',x2,y2,'k'), title('x vx y')
Tarea
Dar los esquemas iterativos para sistemas de
dos ecuaciones diferenciales de primer orden
para los mtodos de

Euler Mejorado

Runge Kutta de orden 4

Euler hacia atrs

You might also like