Está en la página 1de 57

Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales 1/57

Grado en Ingeniería en Tecnologías Industriales. Curso 2015-2016-3º


Matemáticas de Especialidad–Ingeniería Eléctrica

Integración de
Ecuaciones Diferenciales Ordinarias

José Luis de la Fuente O’Connor


jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Clase_integración ODE_2016.pdf
2/57

Índice
 Introducción
 Integración numérica de ecuaciones diferenciales ordinarias
(ODEs)
 Método de Euler
 Mejoras en el método de Euler
 Método de Taylor
 Métodos de Runge-Kutta
 Métodos implícitos y problemas stiff
3/57

Introducción

 Una ecuación diferencial en su forma más simple se define de forma explícita así:
dy
D y 0 D f .t; y/; siendo y.0/ D y0:
dt
Su solución Z x
y.x/ D y0 C f .t; y/ dt:
0

 El orden de una ecuación diferencial es el de su máxima derivada.

 Las ecuaciones diferenciales relacionan las variables de un problema a escala


diferencial, en la cual son independientes de las condiciones de contorno
(geometría, condiciones iniciales; : : :)
4/57

 Son el resultado de modelizar una amplia familia de problemas de ingeniería en


los que se estudia cómo y por qué varia en el tiempo el comportamiento de
sistemas físicos, económicos, sociales, etc.

 Ejemplo La ecuación logística, o función logística,

y 0 D cy.1 y/

modeliza el crecimiento del tamaño de una población, que es proporcional al


tamaño actual, y, y a la capacidad remanente de recursos disponibles.

 Esta ecuación diferencial tiene infinitas soluciones. Si se le especifica una


condición de partida, inmediatamente se identifica de qué solución se trata.

 Para poder integrar una ecuación diferencial es necesario definir las condiciones
de contorno.
5/57

 Un problema de valor inicial es el que define la ecuación diferencial y una


condición, o valor inicial, en un intervalo a  t  b. En conjunto,
8
0
< y D f .t; y/
ˆ
y.a/ D y
a
ˆ
: t 2 Œa; b:

 Resulta útil pensar en la evolución de una ecuación diferencial en el tiempo


como la de un cuerpo dentro de un campo de fuerzas o de pendientes (como el
de la figura, referida a la ecuación logística).
y´ = 5*y*(1-y) y´ = 5*y*(1-y)

1,2 1,2

1 1
En el lado derecho se
0,8 0,8
han dibujado, en el mis-
y
0,6
y
0,6
mo campo de fuerzas, las
dos soluciones que corres-
0,4 0,4

0,2 0,2

0 0
ponden a y.0/ D 0;2 y
-0,2 -0,2
y.0/ D 1;26.
-0,4 -0,4
0 0,2 0,4 0,6 0,8 1 1,2 1,4 1,6 1,8 2 2,2 0 0,2 0,4 0,6 0,8 1 1,2 1,4 1,6 1,8 2 2,2

t t
6/57

 Tipos de ecuaciones diferenciales:

Ecuaciones diferenciales ordinarias —EDO— De primer orden: una


variable dependiente y una variable independiente. Problemas de valor inicial
y problemas de contorno.
Sistemas de ecuaciones diferenciales N variables dependientes
relacionadas por N ecuaciones diferenciales.
Ecuaciones en derivadas parciales Una variable dependiente y varias
variables independientes. Problemas elípticos, parabólicos e hiperbólicos.
Integración numérica de EDO u ODE 7/57

 Analíticamente sólo se pueden integrar algunas ecuaciones diferenciales.

 La integración numérica no obtiene una función analítica y.t / que satisface la


ecuación diferencial anterior, sino un conjunto de valores discretos yk que se
corresponden con otros tantos, tk , de la variable independiente t.

 Si se desean resultados para otros valores de t se pueden utilizar los métodos de


interpolación vistos previamente.

 Conocida la función yi en el instante ti los integradores numéricos calculan el


valor yi C1 en ti C1 D ti C h mediante una expresión del tipo

yi C1 D yi C h;

donde  es un término que incorpora información de la derivada y 0.


8/57

 Los métodos de integración numérica que veremos se clasifican en:


De paso simple y paso múltiple Los de paso simple calculan la solución
yi C1 en el instante ti C1 a partir del valor de la función yi en el instante ti .
Por ejemplo, en el método de Euler

yi C1 D yi C f .ti ; yi /h:

 Los de paso múltiple calculan la solución en tiC1 a partir del valor de la


función en ti , ti 1; : : : ; ti nC1 .
Por ejemplo, en el método de Heun
h 
yiC1 D yi C f .ti ; yi / C f ti C1; yi C hf .ti ; yi / :
2
9/57

Métodos explícitos e implícitos Los métodos explícitos permiten hallar


yi C1 directamente sin tener que resolver un sistema de ecuaciones no
lineales.
Por ejemplo, Runge-Kutta de orden dos
yiC1 D yi C .a1k1 C a2k2/ h;
donde
k1 D f .ti ; yi /
k2 D f .ti C p1h; yi C q11k1h/:

 Los métodos implícitos necesitan resolver un sistema de ecuaciones no


lineales pues yi C1 aparece a ambos lados de la ecuación.
Por ejemplo, la regla trapezoidal
1 
yi C1 D yi C f .ti ; yi / C f .ti C1; yiC1/ h:
2
10/57

Método de Euler

 Formulado por Leonhard Euler, Basilea 1707–San Petersburgo 1783.

 Sigue la idea intuitiva de la geometría de los gráficos de los campos de fuerzas o


pendientes.
¿Por qué no “resolver” una ecuación diferencial “siguiendo” las flechas, partiendo
de un punto inicial?

 Desde el punto de arranque hay que moverse una pequeña distancia, siguiendo
una pendiente, llegándose a un nuevo punto .t1; y1/ en el que se revalúa la
pendiente, luego hay que moverse con esa nueva pendiente otro poco, etc.

 La aproximación será buena si la pendiente no cambia mucho súbitamente.


 Poe ejemplo se trata de resolver 11/57

8
0 3
< y D ty C t
ˆ
ˆ
y.0/ D y 0
ˆ
ˆ
: t 2 Œ0; 1;

que discurre en el campo de “fuerzas” de la figura, partiendo de y.0/ D 1.


y´ = t*y+t³
2

1,8

1,6

1,4

1,2

y 1

0,8

0,6

0,4

0,2

0
0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1

t
12/57

 La relación general de recurrencia del método de Euler la define

yiC1 D yi C f .ti ; yi /h

en la que f .ti ; yi / es la pendiente en cada punto –su derivada– y h el paso que


se da con esa inclinación.

 Si usamos Euler en el ejemplo, con h D 0;1, resulta la línea en rojo.


y´ = t*y+t³
2

1,8

1,6

1,4

1,2

y 1

0,8

0,6

0,4

0,2

0
0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1

t
Es muy fácil de aplicar aunque no muy preciso, pues la derivada en

(ti, yi) no es suficientemente representativa del paso h. 13/57

LaInterpretación
 geométrica:
interpretación geométrica de lo que sucede es esta:

YDORUH[DFWR
HUURU
YDORUDSUR[LPDGR

yi+1= yi+f(ti ,yi)h

yi h

ti ti+1

 Se producen errores de truncamiento en cada punto, por retener sólo dos


términos en el desarrollo de Taylor, y en el total, así como de redondeo en los
cálculos del proceso. El global es O.h/.
14/57

 Si ensayamos todo esto en un script de Matlab, puede resultar este:


% Script del método de Euler con Matlab, Euler_2_S.m
% y’(t)=t*y+t^3; solución analítica exacta y(t)=3*exp^(t^2/2)-t^2-2

h = 0.1; h1 = 0.01 % Pasos de integración h=0,1 y h=0,01


t = 0:h:1; t1 = 0:h1:1;
yx(1)=1.0; yx1(1)=1.0 % Punto de partida

for i=1:length(t)-1 % Bucle del proceso de integración


k1 = t(i)*yx(i)+t(i)^3;
yx(i+1) = yx(i)+h*k1; % Nuevo punto: valor de y
end
for i=1:length(t1)-1 % Bucle del proceso de integración
k11 = t1(i)*yx1(i)+t1(i)^3;
yx1(i+1) = yx1(i)+h1*k11; % Nuevo punto: valor de y
end

y=3*exp(t.^2/2)-t.^2-2; % Solución exacta

% Gráficos

plot(t,yx,’b--’,t,y,’r-’,t1,yx1,’k--’);
legend(’Aproximación h=0,1’,’Exacto y’,’aproximación h=0,01’);
title(’Paso de Euler, h=0,1 y h=0,01’);
xlabel(’t’);
ylabel(’y*(t), y(t)’); axis([0 1 0.95 2]);

% Tabla

for i=1:length(t)
disp(sprintf(’t=%5.3f, y(t)=%6.4f, y*(t)=%6.4f’,t(i),y(i),yx(i)));
end
15/57

 Con pasos h D 0;1 y h D 0;01 se obtiene lo que sigue.


Paso de Euler, h=0,1 y h=0,01
2
Aproximación h=0,1
Exacto y
1.9 aproximación h=0,01

1.8

1.7
>> Euler_2_S
t=0.000, y(t)=1.0000, y*(t)=1.0000
t=0.100, y(t)=1.0050, y*(t)=1.0000 1.6
t=0.200, y(t)=1.0206, y*(t)=1.0101

y*(t), y(t)
t=0.300, y(t)=1.0481, y*(t)=1.0311
t=0.400, y(t)=1.0899, y*(t)=1.0647 1.5
t=0.500, y(t)=1.1494, y*(t)=1.1137
t=0.600, y(t)=1.2317, y*(t)=1.1819
1.4
t=0.700, y(t)=1.3429, y*(t)=1.2744
t=0.800, y(t)=1.4914, y*(t)=1.3979
t=0.900, y(t)=1.6879, y*(t)=1.5610
1.3
t=1.000, y(t)=1.9462, y*(t)=1.7744

1.2

1.1

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1


t

 Con el paso de integración h D 0;1 los errores son apreciables.


Mejoras del método de Euler 16/57

Método de Heun

 Formulado por Karl Heun, Alemania, 1859-1929.

 Su idea es utilizar en .ti ; yi / un valor promedio de la derivada en ese punto y en


.ti C1; yiC1/.

 Como no se conoce el valor yi C1, se calcula con el método de Euler,


yiC1 D yi C hf .ti ; yi /.

 El nuevo valor de yi C1 será


h
f .ti ; yi / C f .tiC1; yiC1/ :

yi C1 D yi C
2
17/57

 El método se conoce como predictor-corrector. El error es O.h3/.

 Una variante, denominada método del trapezoide, consiste en hacer iterar el


yi C1, en cada nuevo paso, de acuerdo
 con la fórmula 
j h j 1
yi C1 D yi C
f .ti ; yi / C f ti C1 ; yiC1
2
ˇ ˇ
ˇ j j 1ˇ
hasta que se cumpla una tolerancia de ˇyi C1 yi C1 ˇ.
 Ejemplo Integremos la ecuación y 0 D 4e 0;8t 0;5y en el intervalo t D Œ0; 4 18/57

de tal forma que en t D 0, y D 2. El paso ha de ser h D 1. Lo haremos con el


método de Euler y con el de Heun, sin y con iteración (trapezoide). En Matlab:
function [t,yx,y,y_h,y_hi] = Heun_4(dydt,tspan,y0,h,es,maxit)
% Método de Heun para integrar una ODE
% dydt: función que evalúa la ODE; tspan: intervalos de cálculo
% y0: punto de partida; h: paso; es: tolerancia de iteración corrector
% maxit: máximo de iteraciones; yx: valor exacto; y: valor con Euler
% y_h: valor con Heun sin itera.; y_hi: con iteración
if nargin<6, maxit = 50; end; if nargin<5, es = 0.0001; end
ti = tspan(1); tf = tspan(2); t = (ti:h:tf)’; n = length(t);
if t(n)<tf, t(n+1)=tf; n=n+1; end % Por si acaso, un intervalo más en t
y = y0*ones(n,1); y_h = y; y_hi = y; % Inicializar valores
yx = 4/1.3*(exp(0.8*t)-exp(-0.5*t))+2*exp(-0.5*t); % Valor exacto
for i = 1:n-1
hh = t(i+1) - t(i); iter = 0;
k1 = dydt(t(i),y(i)); k2 = dydt(t(i),y_h(i)); k3 = dydt(t(i),y_hi(i)); % Derivadas function dp = dpdt_Heun_c(t, p)
y(i+1) = y(i) + k1*hh; % Euler dp = 4*exp(0.8*t)-0.5*p;
y_h(i+1) = y_h(i) + hh/2*(k2+dydt(t(i+1),y_h(i)+hh*k2)); % Heun sin iteración
y_hi(i+1) = y_hi(i)+ k3*hh;
while 1
yold= y_hi(i+1); k2 = dydt(t(i+1),y_hi(i+1));
y_hi(i+1) = y_hi(i) + (k3+k2)*hh/2; % Heun con iteración
iter = iter + 1;
if y_hi(i+1)~=0, ea = abs((y_hi(i+1)-yold)/y_hi(i+1))*100; end
if ea<=es || iter>=maxit, break, end
end
e nd
plot(t,yx,’b--’,t,y,’r-’,t,y_h,’k--’,t,y_hi,’:’); xlabel(’t’); ylabel(’y’);
title(’Solución de y’’=4e^{(0.8t)}-0.5y’); grid on
legend(’Exacto’,’Euler’,’Heun’,’Heun con it.’,’Location’,’NorthWest’);
end
19/57

 El resultado es este.
Solución de y'=4e(0.8t)-0.5y
90
Exacto
Euler
Heun
80 Heun con it.

70

60

>> [t,yx,y,y_h,y_hi]=Heun_4(@dpdt_Heun_c,[0 4],2,1); 50


>> [t,yx,y,y_h,y_hi] y
ans =
0 2.0000 2.0000 2.0000 2.0000
1.0000 6.1946 5.0000 6.7011 6.3609 40
2.0000 14.8439 11.4022 16.3198 15.3022
3.0000 33.6772 25.5132 37.1992 34.7433
4.0000 75.3390 56.8493 83.3378 77.7351
30

20

10

0
0 0.5 1 1.5 2 2.5 3 3.5 4
t
20/57

Método del punto medio

 En vez de utilizar el promedio de las derivadas en los puntos .ti ; yi / y


.ti C1; yiC1/, se utiliza una aproximación de la derivada en el punto medio:
 
h h
yi C1=2 D yi C f .ti ; yi /; yi0 C 1 D f ti C ; yi C1=2 ;
2 2 2
por lo que 
yi C1 D yi C hf ti C1=2; yi C1=2 :

 Este procedimiento se conoce también como Euler corregido. Está relacionado


con el método de integración de Newton-Cotes.

 El error que produce es O.h2/.


21/57

Método de Taylor

 Basado en el desarrollo en serie Formulado en 1715 por Brook Taylor1, Reino


Unido, 1685-1731.

 Si se desarrolla en serie de Taylor y.t / en el punto ti , suponiendo que y.t / tiene


derivadas continuas hasta orden n C 1, se tiene que
h2 00 h3 000 hn .n/
y.tiC1 / D y.ti / C hy 0 .ti / C 2Š
y .ti / C 3Š
y .ti / C  C nŠ
y .ti / C O.hnC1 /:

 Si f es derivable,
y 0 D f .t; y/
y 00 D f 0 D f t C fy  y 0 D f t C fy  f
y 000 D f 00 D f t t C 2f ty  f C fyy  f 2 C f t  fy C fy2  f
::
:
1
El original parece se debe al escocés James Gregory, 1638-1675.
22/57

 Sustituyendo estas expresiones en el desarrollo en serie se obtiene el método de


Taylor del orden de precisión que se desee.

 Su gran inconveniente es que las derivadas de orden superior a uno –en este
caso sería el método de Euler– pueden ser muy complicadas de calcular.
23/57

Métodos de Runge-Kutta

 Son una familia de métodos desarrollados a partir del trabajo de los alemanes
Carl David Tolmé Runge, 1856-1927, y Martin Wilhelm Kutta 1867-1944.

 Consiguen la precisión del método de Taylor sin necesidad de calcular derivadas


de orden elevado.

 El avance se realiza mediante una expresión general

yi C1 D yi C h; con  D a1k1 C a2k2 C    C ankn;

y donde los coeficientes ai son unos pesos de aproximaciones ki de las distintas


derivadas por medio de la función f .t; y/ evaluada en distintos puntos.
24/57

 Los valores de las ki se obtienen mediante las fórmulas


k1 D f .ti ; yi / 
k2 D f ti Cp1h; yi Cq11k1h 
k3 D f ti Cp2h; yi Cq21k1hCq22k2h
:::

kn D f ti Cpnh; yi Cqn 1;1k1hCqn 1;2k2hC   C qn 1;n 1 kn 1 h :

 Cada valor de ki depende de los ks ya calculados, por lo que la evaluación de


estas fórmulas es sencilla si se conocen los coeficientes.

 Los ps y qs son coeficientes numéricos que se calculan imponiendo la condición


de que el error sea del mismo orden que en el método de Taylor de orden similar.
Deducción de las fórmulas de Runge-Kutta de orden 2 25/57


 Son yiC1 D yi C a1k1 Ca2k2 h, donde k1 D f .ti ; yi /  fi
k2 D f .ti Cp1h; yi Cq11k1h/:

 El método de Taylor, reteniendo términos hasta orden dos, establece que


h2 00 h2
yi C1 D yi C hy 0 .ti / C


y .ti / D yi C hfi C 2
f t i C fyi  fi :

 Desarrollando en serie las fórmulas de Runge-Kutta se tiene que



yi C1 D yi C.a1 k1 Ca2 k2 /h D yi C a1 f .ti ; yi /Ca2 f .ti Cp1 h; yi Cq11 k1 h/ h

D yi Ca1 fi h C a2 fi Cf t i p1 hCfyi fi q11 k1 h h:

 Comparando las dos expresiones se llega a estas tres ecuaciones con cuatro
incógnitas:
1 1
a1 C a2 D 1; a2p1 D y a2q11 D :
2 2
 Dando valores a a2 se obtienen distintas fórmulas de Runge-Kutta de orden 2 26/57

(con error local de truncamiento O.h3/).


1
1.- a2 D 2
! p1 D q11 D 1: Método de Heun
yi C1 D y1 C h2 k1 C k2


k1 D f .ti ; yi /
k2 D f .ti C h; yi C k1 h/:

2.- a2 D 1 ! p1 D q11 D 1=2: Método del Punto Medio


yi C1 D y1 C k2 h
k1 D f .ti ; yi /
k2 D f .ti C h=2; yi C k1 h=2/:

Anthony Rals-
3.- a2 D 2=3 ! p1 D q11 D 3=4: Método de Ralston ton, EE.UU.
1930-.

yiC1 D y1 C h2 13 k1 C 23 k2


k1 D f .ti ; yi /
k2 D f .ti C 34 h; yi C 34 k1 h/:
Fórmulas de Runge-Kutta de orden superior a 2 27/57

 Orden 3, con error O.h4/:


h

yi C1 D y1 C k1 C 4k2 C k3
6
k1 D f .ti ; yi /
f ti C 12 h; yi C 21 hk1

k2 D
k3 D f .ti C h; yi k1h C 2k2h/ :

 Orden 4, con error O.h5/:


yiC1 D y1 C h6 k1 C 2k2 C 2k3 C k4


k1 D f .ti ; yi /
k2 D f ti C 21 h; yi C 21 hk1

1 1

k3 D f ti C 2 h; yi C 2 hk2
k4 D f .ti C h; yi C k3h/ :
Kutta de orden 4 (clásico, error local O(h5))
l método de integración de EDOs más utilizado. 28/57

Interpretación
de la fórmulageométrica
 k4 
 La interpretación geométrica de orden 4 es la esta.

k2

k1 k3 yi+1
yi k4

 Cada una de las ks representa una pendiente. El resultado es una media


ponderada de esas pendientes.
29/57

 Orden 5, Butcher, con error O.h6/:


h
yi C1 D y1 C 90 .7k1 C 32k3 C 12k4 C 32k5 C 7k6/
k1 D f .ti ; yi /
k2 D f ti C 41 h; yi C 41 hk1

1 1 1

k3 D f ti C 4 h; yi C 8 hk1 C 8 hk2
k4 D f ti C 12 h; yi 12 hk2 C hk3

3 3 9

k5 D f ti C 4 h; yi C 16 hk1 C 16 hk4
3
C 27 hk2 C 12 12
C 87 hk5 :

k6 D f ti C h; yi 7
hk1 7
hk3 7
hk4

 Para aumentar en una unidad el orden del Runge-Kutta clásico de orden cuatro
hacen falta dos evaluaciones de función adicionales.

 En general no se suelen utilizar fórmulas de Runge-Kutta de orden muy elevado


porque el aumento de precisión no compensa el trabajo adicional.
30/57

Ejemplo de recapitulación

0 1

 Vamos a integrar la ODE y D y t
2t , empleando Euler, Heun,
Runge-Kutta y la rutina de Matlab ode45, que usa Runge-Kutta.

 La condición de partida es que y 0 D 0, en t D 0.

 La fórmula analítica de este problema no se conoce, por lo que se suple con la


integración numérica.
 Este es el script que lo lleva a cabo. 31/57

function test_ode45_1(relerr,abserr)
% Comparación de métodos explícitos para igual evaluaciones de f
clear all, close all
ecdif=@ec04; % ecuación diferencial a integrar: en ec04.m function [T,Y]=heun(f,tspan,y0,h) % Método de Heun
tspan=[0,2]; y0=0; h=.25; n=(tspan(2)-tspan(1))/h+1;
% Diversos métodos con mismas llamadas a f T=tspan(1)*zeros(n,1); Y=y0*zeros(n,length(y0));
[T1,Y1]=eulere(ecdif,tspan,y0,h/4); % Euler y=y0; t=tspan(1);
[T2,Y2]=heun(ecdif,tspan,y0,h/2); % Heun for i=2:n
[T3,Y3]=rk4(ecdif,tspan,y0,h); % Runge-Kutta orden 4 t1=t+h;
options = odeset(’RelTol’,1.e-9,’AbsTol’,1.e-12); yp=f(t,y); % predictor con Euler explícito
[T4,Y4]=ode45(ecdif,tspan,y0,options); % Exacto: R-K de Matlab y1=y+h*yp;
% y1n=y+h*(yp+f(t1,y1))/2; % corrector con la regla trapezoidal
plot(T1,Y1,’:r’); T(i,:)=t1; Y(i,:)=y1n; % tiempo valor de la función
axis([tspan(1), tspan(2), 0, .6]); % intervalos de ejes t=t1; y=y1; % se actualizan t e y
xlabel(’tiempo’); ylabel(’y’); end
hold on; grid end
plot(T2,Y2,’--g’); plot(T3,Y3,’-.b’); plot(T4,Y4,’-k’);
end function [T,Y]=rk4(f,tspan,y0,h) % Runge-Kutta orden 4
%%% ---------- n=fix((tspan(2)-tspan(1))/h+1);
T=tspan(1)*zeros(n,1); Y=y0*zeros(n,length(y0));
function yprima=ec04(t,y) y=y0; t=tspan(1);
% solución exacta desconocida for i=2:n
if t==0, yprima=1; else yprima=y*(-2*t+1/t); end t1=t+h;
end k1=h*f(t,y); % cálculo de los coeficientes k
k2=h*f(t+h/2,y+k1/2);
function [T,Y]=eulere(f,tspan,y0,h) % Método de Euler k3=h*f(t+h/2,y+k2/2);
n=fix((tspan(2)-tspan(1))/h+1); k4=h*f(t+h,y+k3);
T=tspan(1)*zeros(n,1); Y=y0*zeros(n,length(y0)); y1=y+(k1+2*k2+2*k3+k4)/6;
y=y0; t=tspan(1); T(i,:)=t1; Y(i,:)=y1; % tiempo valor de la función
for i=2:n t=t1; y=y1; % se actualizan t e y
y1=y+h*f(t,y); t1=t+h; % Fórmula de Euler end
T(i,:)=t1; Y(i,:)=y1’; % tiempo valor de la función end
t=t1; y=y1; % se actualizan t e y
end
end
32/57

 Este es el resultado:

Solución de y'=y(1/t-2t)

Euler
Heun
rk4
ode45
0.5

0.4

0.3
y

0.2

0.1

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
tiempo
33/57

Métodos Runge-Kutta de paso variable

 Hasta ahora hemos supuesto que h era fijo. En un intervalo de integración


Œ0; T , sin embargo, puede haber subintervalos de mayor o menor variación de la
función y.t / que conviene tratar con más detalle, con pasos mayores o más
pequeños, según que la dificultad (o el error) sea menor o mayor.

 Para cambiar el paso, con un coste razonable de tiempo de cálculo, es necesario


estimar la magnitud del error local de truncamiento, lo cual puede hacerse con
dos fórmulas de distinto orden o utilizando dos pasos diferentes: h y h=2,
habitualmente.

 Los métodos de Runge-Kutta de paso variable, también denominados


embebidos, o encajados, resuelven el problema dos veces usando los pasos h y
h=2, y comparan los resultados
34/57
Método Runge-Kutta-Fehlberg

 Su nombre viene de Runge, Kutta y Erwin Fehlberg, Alemania, 1911, EE.UU.,


1990.

 Usa fórmulas Runge-Kutta de orden 4 y 5 respectivamente, concretamente,


k1 D hf .ti ; yi /
k2 D hf ti C 41 h; y1 C 14 k1


k3 D hf ti C 38 h; y1 C 3 9

k
32 1
C k
32 2
12 1932 7200 7296

k4 D hf ti C 32
h; y1 C k
2197 1
k
2197 2
C k
2197 3
439 3680 845

k5 D hf ti C h; y1 C k
216 1
8k2 C 513 3
k k
4104 4

k6 D hf ti C 21 h; y1 8 3544 1859 11

k
27 1
C 2k2 k
2565 3
C k
4104 4
k
40 5
25 1408 2197 1

yi C1 D yi C k
216 1
C k
2565 3
C k
4104 4
k
5 5
16 6656 28561 9 2

zi C1 D yi C k
135 1
C k
12825 3
C k
56430 4
k
50 5
C k
55 6
:
35/57

 La estimación del error que se comete en el paso es


ˇ 1 128 2197 1 2
ˇ
ei C1 D jzi C1 yi C1j D h 360 k1 4275 k3 75240 k4 C 50 k5 C 55 k6ˇ.
ˇ

 Para una tolerancia del error, T ol y un paso inicial h, se calculan para empezar
y1, z1 y e1. Si se cumple que
ei
< T ol;
jyi j
en este caso para i D 1, el valor de z1 sustituye a y1 y se procede al siguiente
paso. Si no se cumple esa relación, se ensaya con
  15
T oljyi j
h D 0;8 hi
ei
y se vuelven a calcular los parámetros del paso.
36/57

 La rutina de Matlab ode45 usa una variante de este método de 1980,


denominada de Dormand-Prince por sus autores, cuyas fórmulas son
k1 D hf .ti ; yi /
k2 D hf ti C 15 h; y1 C 15 k1


3 3 9

k3 D hf ti C 10
h; y1 C k
40 1
C k
40 2

k4 D hf ti C 45 h; y1 C 44 56 32

k
45 1
k
15 2
C 9 3
k
k5 D hf ti C 89 h; y1 C 19372 25360 64448 212

k
6561 1
k
2187 2
C 6561 3
k k
729 4
9017 355 46732 49 5103

k6 D hf ti C h; y1 C k
3168 1
k
33 2
C k
5247 3
C k
176 4
k
18656 5
35 500 125 2187 11

zi C1 D yi C k
384 1
C k
1113 3
C k
192 4
k
6784 5
C k
84 6

k7 D hf .ti C h; zi C1 /
5179 7571 393 92097 187
C 14 k7 :

yi C1 D yi C k
57600 1
C k
16695 3
C k
640 4
k
339200 5
C k
2100 6
37/57

 La estimación del error que se comete en el paso es


ˇ 71 71 71 17253 22 1
ˇ
eiC1 D jziC1 yi C1j D h ˇ 57600 k1 16695 k3 C 1920 k4 k
339200 5
C k
525 6
k ˇ.
40 7

No es necesario calcular yiC1, sólo ei C1.

 Si se cumplen las tolerancias, zi C1 será el nuevo punto y k1 será k7, por lo que
no se desperdician cálculos.
38/57

Métodos implícitos y problemas rígidos o stiff

 En los métodos explícitos una fórmula determina explícitamente una nueva


aproximación yiC1 a partir de datos de h, ti y yi .

 Hay un tipo de problemas, denominados stiff –rígidos–, para los que los métodos
explícitos evolucionan mal hacia la solución.

 Son aquellos que convergen relativamente rápido hacia una solución estable pero
que tienen componentes transitorios importantes con un decaimiento o
amortiguación mucho más rápido.

 Suelen modelizar procesos físicos con varios componentes con escalas de tiempo
dispares. El intervalo de tiempo con el que se les estudia puede ser bueno para
uno de ellos pero no para todos.
39/57

 Estudiemos por ejemplo la ecuación diferencial


0 2

y D ˛ y t C 2t; t > 0; y0 D y.0/;

cuya solución analítica es


˛t
y.t / D y0e C t 2:

 Si ˛ es un número real grande, la solución varía rápidamente hasta que el


componente exponencial se desvanece o amortigua.

 A partir de entonces prevalece el componente polinómico de variación lenta.


 En la figura se observa lo apuntado. La línea continua azul es la solución de la 40/57

ecuación, la discontinua verde –el componente exponencial– es la que se


desvanece antes. La roja corresponde al componente polinómico de variación en
el tiempo mucho más lenta.
1.4 1

0.9
1.2

0.8

1
0.7

0.6
0.8
y

0.5

y
0.6
0.4

0.4 0.3

0.2
0.2
0.1

0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
t t

Figure 2.2.2: Euler solution (dash-dot) due to a perturbation (dashed) of = y t


2
(solid)
introduced at time = 0 4.
t :

Stiness not only depends on the dierential equation under consideration, but the in-
 Si se introduce una pequeña perturbaciónterval ofdel
interest,componente t 2of absolute
the accuracy criteria, and the region t Dof a numerical
en stability 0;4, la
method. For nonlinear systems
solución exacta se restablece enseguida. En cambio, ely método = f ( y)
de Euler 0
t

produciría, con un h D 2, una perturbación


stiness will importante
be related to the magnitudes que se iría
of the eigenvalues of the Jacobian f ( y). y t

These eigenvalues may have vastly dierent sizes that vary as a function of . Thus,
restableciendo después. detecting stiness can be a signicant problem in itself.
t

In order to solve sti problems we'll need a numerical method with a weaker stability
41/57
El método de Euler hacía atrás

 Actúa de la siguiente manera:


y0 D y.0/
yi C1 D yi C hf .ti C1; yiC1/ :
La segunda expresión se obtiene de utilizar la aproximación atrasada de la
derivada en ti C1, es decir y 0.tiC1/, en vez de la avanzada en ti como el método
de Euler.

 La información que se considera en cada paso tiene en cuenta los dos lados del
intervalo Œti ; ti C h.

 Euler hacia atrás es implícito, lo que significa que no da directamente una


fórmula para la nueva aproximación yi C1 sino que ésta se obtiene mediante un
proceso más elaborado.
42/57

 Ese proceso, para la ecuación diferencial anterior, sería


 
2

yiC1 D yi C h ˛ yi C1 t C 2t
D yi h˛yiC1 C h ˛t 2 C 2t :


Al final
2

yi C h ˛t C 2t
yi C1 D :
1 C ˛h

 Si a esta fórmula se le aplica un método iterativo de punto fijo –el de Newton


por ejemplo–
y C h ˛t 2 C 2t

y ! g.y/ D ;
1 C ˛h
como g 0.y/ D 1=.1 C ˛h/ < 1, para cualquier ˛ positivo, el proceso
convergerá a un punto estacionario.
 Apliquemos estas ideas en un código de Matlab. 43/57

function [wi, win, y, ti] = back_euler_1(t0,x0,tf,N,TOL,Nmax)


%
% Backward Euler con y’=-alpha(y-t^2)+2t
% Punto de arranque, t0, x0; final, tf; puntos N
if nargin<6, Nmax=100; end, if nargin<5, TOL=0.00001; end
close all Resultado de
ti = [t0 zeros( 1,N )]; wi = zeros(1,N+1); win = zeros(1,N+1); >> back_euler_1(0,1,1.1,8);:
wi(1) = x0’; win(1) = x0’; x01 = x0; y(1) = x0; 1.4
h = ( tf-t0)/N; Back. Euler
for i = 1:N Euler
1.2 Exacto
w0 = x0;
for j = 1:Nmax
top = (w0 - x0) - h*beuler_1(t0+h,w0); 1
bot = 1 - h*dbeuler_1(t0+h,w0);
dw = top/bot; 0.8
w0 = w0-dw;
if abs(dw)<TOL, break; end;
0.6
end;

y
x0 = w0;
0.4
x01 = x01+h*beuler_1(t0,x01);
t0 = t0 + h; ti(i+1) = t0;
wi(i+1) = x0’; win(i+1) = x01; 0.2
y(i+1) = y(1)*exp(-10*t0)+t0^2;
end 0
plot(ti,wi,ti,win,ti,y), xlabel(’Tiempo’); ylabel(’y’)
legend(’Back. Euler’, ’Euler’, ’Exacto’)
-0.2
end

-0.4
function f = beuler_1(t, p) 0 0.2 0.4 0.6 0.8 1 1.2 1.4
f = -10*(p-t^2)+2*t; Tiempo

end

function df = dbeuler_1(t, p)
df = -10;
end
44/57

Métodos multipaso

 Los métodos que hemos analizado hasta ahora son monopaso, o de paso
sencillo. El valor de yiC1 se calcula a partir de la información de un único punto.

 Los multipaso utilizan la información de más puntos anteriores con el objetivo


de hacer menos evaluaciones de la función para el mismo orden de error.

 Necesitan la ayuda de otros para dar los primeros pasos y no se adaptan bien a
discontinuidades en la solución: discontinuidades en las fuerzas aplicadas,
impactos, enlaces que aparecen o desaparecen, etc.
 Tienen la forma general 45/57

m
X m
X 
yiC1 D ˛j yiC1 j Ch ˇj f ti C1 j ; yi C1 j :
j D1 j D0

Si ˇ0 D 0, el método es explícito; si ˇ0 ¤ 0, implícito. Los parámetros ˛i y ˇi


se calculan mediante interpolación polinómica.

 Un método de dos pasos explícito, o abierto, por ejemplo, sería


0 0
(se indica y 0 D f .; /):

yi C1 D ˛1yi C h ˇ1yi C ˇ2yi 1

 Para calcular ˛1, ˇ1 y ˇ2 se interpola forzando a que la fórmula sea exacta para
los primeros tres monomios: 1, t y t 2.

 Si y.t/ D 1, entonces y 0.t / D 0 y se consigue así la primera ecuación


1 D ˛1  1 C h .ˇ1  0 C ˇ2  0/ :
46/57

 Si y.t/ D t, entonces y 0.t / D 1 y tenemos la segunda



tiC1 D ˛1ti C h ˇ1  1 C ˇ2  1 :

 Si y.t/ D t 2, entonces y 0.t / D 2t y tenemos la tercera

ti2C1 D ˛1ti2 C h ˇ1  2ti C ˇ2  2ti



1 :

 Estas tres ecuaciones se deben cumplir para cualesquiera valores de ti , por lo


que podemos hacer ti 1 D 0, h D 1 (entonces ti D 1 y ti C1 D 2) y resolvemos
el sistema lineal resultante 3  3 dando ˛1 D 1, ˇ1 D 32 , ˇ2 D 21 .
 La fórmula resultante del método explícito de dos pasos es 47/57

h 0 0

yi C1 D yi C 3yi yi 1 ;
2
que se conoce como la fórmula del Método Adams-Bashforth de segundo orden.
Debe el nombre a John Couch Adams, Reino Unido, 1819-1892, Francis
Bashforth, Reino Unido, 1819-1912 y Forest Ray Moulton, EE.UU., 1872-1952.

 También así se desarrolla la fórmula implícita, o cerrada, de dos pasos:


0 0

yi C1 D ˛1yi C h ˇ0yiC1 C ˇ1yi :

 Para calcular ˛1, ˇ0 y ˇ1 forzaremos como antes a que la fórmula resultante sea
exacta para los primeros tres monomios: 1, t y t 2. Se obtienen estas tres
ecuaciones 
1 D ˛1  1 C h ˇ0  0 C ˇ1  0

tiC1 D ˛1ti C h ˇ0  1 C ˇ1  1
2
D ˛1ti2 C h ˇ0  2ti C1 C ˇ1  2ti :

tiC1
 Haciendo ti D 0 y h D 1 (por lo que tiC1 D 1), y resolviendo el sistema 3  3 48/57

resultante se llega a que ˛1 D 1, ˇ0 D 12 y ˇ1 D 12 . La fórmula resultante es


h 0 0

yi C1 D yi C yiC1 C yi ;
2
que da lugar al método implícito conocido como el método del trapezoide, o
Método de Adams-Moulton de un paso.

 Algunas de las fórmulas más utilizadas:


Fórmulas de multipaso explícitas de Adams-Bashforth
n Error
h 5 3 00

2 yiC1 D yi C 2
3fi fi 1 12
h f ./
h 3 4 000

3 yiC1 D yi C 12
23fi 16fi 1 C 5fi 2 8
h f ./
h 251 5 .4/

4 yiC1 D yi C 24
55fi 59fi 1 C 37fi 2 9fi 3 720
h f ./
h 95 6 .5/

5 yiC1 D yi C 720
1901fi 2744fi 1 C 2616fi 2 1274fi 3 C 251fi 4 288
h f ./
Fórmulas de multipaso implícitas de Adams-Moulton
n Error
h 1 3 00

2 yi C1 D yi C 2
3fi C1 fi 12
h f ./
h 1 4 000

3 yi C1 D yi C 12
5fi C1 C 8fi fi 1 24
h f ./
h 19 5 .4/

4 yi C1 D yi C 24
9fiC1 C 19fi 5fi 1 C fi 2 720
h f ./
h 27
h6 f .5/ ./

5 yi C1 D yi C 720
251fi C1 C 646fi 264fi 1 C 106fi 2 19fi 3 1440
49/57

Métodos predictor-corrector

 Combinan métodos explícitos e implícitos en cada intervalo mediante un paso


predictor, que estima la solución en el nuevo punto, y otro corrector, que la
mejora.

 Vencen así la dificultad de contar con un buen punto de partida para comenzar
el proceso de integración.
50/57

 El método de Adams-Bashforth-Moulton de cuarto orden, por ejemplo:


 Utiliza Adams-Bashforth de cuarto orden como predictor:

 h 
yiC1 D yi C 55fi 59fi 1 C 37fi 2 9fi 3 :
24
ti C1; yiC1

 Evalúa la función en el nuevo punto

fiC1 ti C1; yiC1



Df :

 Utiliza Adams-Moulton de cuarto orden como corrector:


h
9fiC1 C 19fi

yi C1 D yi C 5fi 1 C fi 2 :
24

 Finalmente evalúa de nuevo la función en el punto ti C1; yiC1

fi C1 D f ti C1; yi C1 :

Se conoce como método PECE (predice, evalúa, corrige, evalúa).


51/57

 El método de Milne-Simpson:
 Utiliza como predictor
4h
yiC1 D yi

3C 2fi fi 1 C 2fi 2 :
3
 Como corrector
h  
yi C1 D yi 1C fiC1 C 4fi C fi 1 :
3
También se usa como corrector el de Hamming:
fiC1

9yi yi 2 C 3h C 2fi 2fi 1
yi C1 D :
8
0
Utilicemos y D 4 t t y 2 para probar el método predictor–corrector de
3
 52/57

Adams-Bashforth-Moulton de segundo orden con las condiciones iniciales
y.0/ D 0;5 y en el intervalo de tiempo Œ0; 2.

 El siguiente programa hace el trabajo.


function [t,y]=Adams_Bas_Moul(inter,ic,n)
% Método predictor-corrector de orden 2 de Adams-Bashforth-Moulton
h=(inter(2)-inter(1))/n; y(1)=ic; t(1)=inter(1); s=2;
for i=1:s-1 % Trapezoide de un paso para
t(i+1)=t(i)+h; % inicialización
y(i+1)=trapstep(t(i),y(i),h);
f(i)=ydot(t(i),y(i));
function z=ab2step(t,i,y,f,h) % Paso Adams-Bashforth orden 2
end
z=y(i)+h*(3*f(i)-f(i-1))/2;
for i=s:n % Método multipaso
end
f(i)=ydot(t(i),y(i));
t(i+1)=t(i)+h;
function z=am1step(t,i,y,f,h) % Paso Adams-Moulton orden 2
y(i+1)=ab2step(t(i),i,y,f,h);
z=y(i)+h*(f(i+1)+f(i))/2;
f(i+1)=ydot(t(i+1),y(i+1));
end
y(i+1)=am1step(t(i),i,y,f,h);
end
function z=ydot(t,y) % Función que se integra
[T4,Y4]=ode45(@ydot,inter,ic); close all, plot(t,y,T4,Y4)
z=4*(t-t^3)*y^2;
xlabel(’Tiempo’); ylabel(’y’)
end
legend(’Adams-Bash.-Moul.’, ’ode45’)
end

function y=trapstep(t,x,h) % Un paso con trapezoide


z1=ydot(t,x); g=x+h*z1; z2=ydot(t+h,g);
y=x+h*(z1+z2)/2;
end
53/57

 El resultado de >> Adams_Bas_Moul([0 2],0.5,20); es este.

1,
Adams-Bash.-Moul.
ode45
0,9

0,8

0,7

0,6

0,5
y

0,4

0,3

0,2

0,1

0,
0, 0,5 1, 1,5 2, 2,5
Tiempo
54/57

Sistemas de ecuaciones diferenciales


ordinarias

 En ingeniería, economía y ciencias sociales muchos sistemas se modelizan o


simulan mediante sistemas de ecuaciones diferenciales. Basta para ello que el
sistema tenga más de un grado de libertad o que haya que integrar una
ecuación diferencial de orden superior a 1.

 Ejemplos son los puntos moviéndose en el plano o en el espacio, el movimiento


de un sólido rígido sin restricciones, mecanismos, vehículos, etc.
55/57

 En general, un sistema de ecuaciones diferenciales ordinarias tiene la forma


0
9
y1 D f1 t; y1; y2; : : : ; yn >>
0
>
y2 D f2 t; y1; y2; : : : ; yn
=
::: y 0 D f .t; y/:
>
>
0

yn D fn t; y1; y2; : : : ; yn ;
>

 Al aplicar los métodos vistos hasta ahora hay que tener en cuenta que la
variable dependiente y, la función f —y los coeficientes ki si se usa
Runge-Kutta— son vectores.

 El método de Euler se aplicaría en la forma vectorial

y 0 D f .t; y/ ! y i C1 D y i C hf .ti ; y i /:
56/57

Ecuaciones diferenciales de orden superior

 Una ecuación diferencial de orden n puede tener esta expresión


d ny .n/ 0 00 000 .n 1/

D y D f t; y; y ; y ; y ; : : : y
dt n
y.t0/ D y0
y 0.t0/ D y00
y 00.t0/ D y000

.n 1/
y .n 1/.t0/ D y0

 Esta ecuación se puede transformar en un sistema de n ecuaciones diferenciales


de orden uno.
57/57

 Si se introducen las nuevas variables

y1 D y; y2 D y 0; y3 D y 00; : : : ; yn D y .n 1/

se tendrá que
9
y10 D y2 >
>
>
y20 D y3
>
>
>
>
y30
>
D y4
=
::: y 0 D f .t; y/;
>
>
>
yn0 1 D yn
>
>
>
>
yn0 D
>
f .x; y1; y2; : : : ; yn/ ;
obteniéndose así un sistema de n ecuaciones diferenciales de primer orden con n
incógnitas, al que habría que añadirle las condiciones iniciales y.t0/ D y 0.

También podría gustarte