Está en la página 1de 55

Universidad Nacional Agraria La Molina

Facultad de Ingeniería Agrícola


Departamento de Recursos Hídricos

Análisis Numérico para Ingeniería


(Aplicaciones con MATLAB)

Ecuaciones Diferenciales
Ordinarias
Problemas de Valor
Inicial
Jesús Abel Mejía Marcacuzco, Ph.D.
Lima - Perú
ECUACIONES DIFERENCIALES ORDINARIAS
El comportamiento dinámico de los sistemas implica
desplazamientos, velocidades y aceleraciones y sus
derivadas respecto al tiempo de estas cantidades. Una
ecuación en la que intervienen una o más derivadas
ordinarias de la función incógnita se denomina ecuación
diferencial ordinaria (EDO). El orden de la ecuación está
determinado por el orden de la derivada más alta.
Los problemas de EDO se clasifican en problemas de valor
inicial y problemas de valor en la frontera, dependiendo de
cómo se especifican las condiciones en los extremos del
dominio. Todas las condiciones de un problema de valor inicial
se especifican en el punto inicial. El problema se convierte en
uno de valor en la frontera si las condiciones se extienden
entre los puntos inicial y final. Las EDO en el dominio del
tiempo son problemas de valor inicial, así que todas las
condiciones se especifican en el momento inicial, como t = 0.
PROBLEMAS DE VALOR INICIAL
EDO de Primer Orden
El problema de valor inicial de una EDO de primer orden puede

escribirse en la forma: y' (t )  f  y, t , y0  y0


donde f(y,t) es función de y y t; con y(0) = y0 como condición
inicial indispensable para la solución. La primera derivada de y
se da en función de y y t, y lo que se quiere calcular es la
función desconocida y integrando numéricamente f(y,t). Si f
fuera independiente de y, el cálculo sería un problema de
integración directa. Si f es una función lineal de y, por ejemplo: f
= ay + b, con a y b son constantes o funciones de t, la ecuación
es una EDO lineal. Si f es una función no lineal de y, la
ecuación es una EDO no lineal. Es posible encontrar la solución
analítica de algunas EDO, pero la mayor parte de ellos son no
lineales y carecen de solución analítica y debemos usar
métodos numéricos.
Ejemplo:
Un cuerpo de masa M se deja caer desde un avión en t = 0. Si
la velocidad inicial es cero y la caída vertical; deduzca una EDO
para determinar la velocidad vertical del cuerpo, considerando
la fuerza de arrastre aerodinámico igual a Faire = CV2.
Solución: Aplicando la primera ley de Newton, con V como la
velocidad vertical (positiva hacia abajo) y con g como la
aceleración de la gravedad; se obtiene:
dV dV C 2
M  gM  Faire La EDO obtenida es: g V
dt dt M

La ecuación puede escribirse 2


d2y C  dy 
en términos de y que es la    g
 dt 
2
distancia recorrida por el dt M
cuerpo en su caída:
Métodos de Euler hacia adelante
Los métodos de Euler son procedimientos sencillos para
resolver EDO de primer orden y se pueden programar con gran
facilidad. Los métodos de Euler incluyen tres versiones: hacia
delante, modificado y hacia atrás y su exactitud no es muy alta.
El método de Euler hacia adelante para y’ = f(y,t) se deduce
rescribiendo la aproximación de diferencia hacia delante:
y n 1  y n
 y n' y n1  y n  hf  y n , tn   hyn'
h

y1  y0  hy0'  y0  hf  y0 ,t0 
Recursivamente la ecuación
puede representarse como: y 2  y1  hf  y1 ,t1 

y3  y 2  hf  y2 ,t 2 
.
y n  yn1  hf  y n1 , t n1 
Ejemplo:

Usar el método de Euler dy


para integrar numéricamente  2 x 3  12 x 2  20 x  8.5
la siguiente ecuación. dx
Comparar los resultados con
la solución analítica y calcular y  0.5x 4  4x3 10x2  8.5x  1
el error relativo porcentual

y y y Error Error Error


x (h=0.5) (h=0.25) (h=0.125) Exacto (h=0.5) (h=0.25) (h=0.125)
0.000 1.000 1.000 1.000 1.000 0.000 0.000 0.000
0.500 5.250 4.180 3.686 3.219 -63.107 -29.854 -14.502
1.000 5.875 4.344 3.648 3.000 -95.833 -44.792 -21.615
1.500 5.125 3.555 2.857 2.219 -130.986 -60.211 -28.785
2.000 4.500 3.125 2.531 2.000 -125.000 -56.250 -26.563
2.500 4.750 3.617 3.139 2.719 -74.713 -33.046 -15.445
3.000 5.875 4.844 4.398 4.000 -46.875 -21.094 -9.961
3.500 7.125 5.867 5.279 4.719 -50.993 -24.338 -11.879
4.000 7.000 5.000 4.000 3.000 -133.333 -66.667 -33.333
Ejemplo:

Usar el método de Euler dy 2


para integrar numéricamente t  y
la siguiente ecuación. dt
Comparar los resultados con
la solución analítica y calcular y  et  t 2  2t  2
el error relativo porcentual

y y y Error Error Error


t (h=0.4) (h=0.2) (h=0.1) Exacto (h=0.4) (h=0.2) (h=0.1)
0.000 1.000 1.000 1.000 1.000 0.000 0.000 0.000
0.400 0.600 0.648 0.670 0.690 13.003 6.043 2.925
0.800 0.424 0.512 0.553 0.591 28.217 13.265 6.449
1.200 0.510 0.630 0.686 0.739 30.916 14.689 7.173
1.600 0.882 1.026 1.093 1.158 23.820 11.426 5.602
2.000 1.553 1.714 1.791 1.865 16.696 8.075 3.973
2.400 2.532 2.705 2.788 2.869 11.755 5.725 2.826
2.800 3.823 4.005 4.093 4.179 8.518 4.172 2.065
3.200 5.430 5.617 5.709 5.799 6.368 3.134 1.554
Ejemplo
a) Resolver la siguiente EDO utilizando el método de Euler
hacia adelante con h = 0.01 para 0 < t  0.02. Haga los cálculos
de esta parte a mano.
y '  f  y, t , y 0  5 donde f  y, t   20 y  7 exp  0.5t 

b) Repita para 0 < t  0.1 con h = 0.01, 0.001 y 0.0001. Evalúe


los errores de los tres cálculos comparándolos con la solución
analítica.

Solución
a) Los primeros dos incrementos de tiempo de los cálculos
con h = 0.01 son:
t0  0, y0  y0  5
t1  0.01, y1  y0  hy0'  5  0.01 205  7 exp 0  4.07
t2  0.02, y2  y1  hy1'  4.07  0.01 204.07  exp 0.01  3.326
b) La solución analítica se obtiene de resolver la ecuación:
dy 20t dy  0.5t 20t
 20 y  7e  0.5 t Multiplicando por e 20t e  20 ye 20t
 7 e e
dt dt

d ye 20t
 7e
19.5t ye 20t 7 19.5t
e C y
 7 0.5t 90.5  20t 
e  e 
dt 19 .5  19.5 19.5 
C = 90.5/19.5 calculado para t = 0; y =5

% Error % Error % Error


t h=0.01 h=0.001 h=0.0001 Exacto h=0.01 h=0.001 h=0.0001
0.00 5.00 5.00 5.00 5.00000 0.000 0.000 0.000
0.01 4.07000 4.14924 4.15617 4.15693 2.091 0.185 0.018
0.02 3.32565 3.45379 3.46513 3.46638 4.060 0.363 0.036
0.03 2.72982 2.88524 2.89915 2.90068 5.890 0.532 0.053
0.04 2.25282 2.42037 2.43554 2.43721 7.566 0.691 0.069
0.05 1.87087 2.04023 2.05574 2.05745 9.069 0.837 0.083
0.06 1.56497 1.72932 1.74454 1.74622 10.380 0.968 0.096
0.07 1.31990 1.47496 1.48949 1.49109 11.481 1.082 0.108
0.08 1.12352 1.26683 1.28041 1.28191 12.356 1.176 0.117
0.09 0.96607 1.09646 1.10895 1.11033 12.993 1.249 0.124
0.10 0.83977 0.95696 0.96830 0.96956 13.386 1.300 0.130
La exactitud del método de Euler aumenta al reducirse el tamaño del incremento h.
Métodos de Euler modificado
El método de Euler modificado es más exacto y más estable
que el método hacia delante. El método de Euler modificado se
deduce aplicando la regla trapezoidal a la solución de y’ = f(y,x):
yn 1  yn   f  yn 1 , tn 1   f  yn , tn 
h
2
Si f es una función lineal de y, es fácil resolver la ecuación para
yn+1 en forma cerrada. Por ejemplo si f  y, t   ay  cost 
Se obtiene para yn+1: yn 1  yn  ayn 1  cos tn 1   ayn  cos tn 
h
2
Si f es una función no lineal de y, la ecuación se convierte en
una función no lineal de yn+1, por lo que debemos aplicar un
algoritmo para resolver la ecuación no lineal. Un método muy
utilizado es el de sustituciones sucesivas, que se escribe así:
1  ah / 2 h cos tn 1  cos tn 
y n 1  yn 
1  ah / 2 1  ah / 2 2
Si f es una función no lineal de y, la ecuación se convierte en
una función no lineal de yn+1, por lo que debemos aplicar un
algoritmo para resolver la ecuación no lineal. Un método muy
utilizado es el de sustituciones sucesivas, que se escribe así:

k 
y n 1
h
2
 
 y n  f  y nk11 , t n 1   f  y n , t n 

yn01
k 
Donde yn 1 es la k-ésima aproximación iterativa para yn 1 y
k 
es una estimación inicial de yn 1 . La iteración termina cuando yn 1
es menor que k 1 para para una tolerancia especificada.
y n1
Si tomamos como estimación inicial yn, el primer paso de la
iteración será idéntico al método de Euler hacia delante. Si sólo
se emplean dos pasos de iteración, el método se convierte en el
método de Runge-Kutta de segundo orden.
Ejemplo

a) Para el siguiente problema de valor inicial determine y(0.1) por el método


de Euler modificado con h = 0.1. Establezca como tolerancia de la
convergencia 0.00001. y'   y  1, y 0  10
1.5

b) Continúe el cálculo avanzando incrementos de tiempo hasta llegar a t = 0.5
c) Elabore un algoritmo en MATLAB que calcule la solución para 0 < t  1 por
los métodos de Euler hacia delante y modificado y grafique los resultados.

Solución
a) El esquema de Euler modificado se escribe:

h

yn 1  yn      yn 1    yn   2
2
1.5 1.5

y su solución iterativa basada en sustituciones sucesivas es:

h
2

ynk1  yn     ynk11   y 
1.5
n
1.5
2 
Donde k es el número de iteración.
La iteración para y1 comienza con la estimación inicial y continua así:

y10  y0  10,

1

y1  10  0.1 / 2  10  10  2  6.93772
1.5 1.5


y12   10  0.1 / 2  6.93772  10  2  7.60517
1.5 1.5

y    10  0.1 / 2 7.60517 
 10  2  7.47020
3 1.5 1.5
1

y    10  0.1 / 2 7.47020  10  2  7.49799


4 1.5 1.5
1

y    10  0.1 / 2 7.49799  10  2  7.49229


5 1.5 1.5
1

...


y1  10  0.1 / 2  7.49326  10  2  7.49326
1.5 1.5

b) El cálculo hasta t = 1.0, se muestra a continuación:
Y(t=0) Y(t=0.1) Y(t=0.2) Y(t=0.3) Y(t=0.4) Y(t=0.5) Y(t=0.6) Y(t=0.7) Y(t=0.8) Y(t=0.9) Y(t=1.0)
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
10 7.49326 5.85864 4.73452 3.92990 3.33574 2.88599 2.53861 2.26584 2.04868 1.87382
6.93772 5.54207 4.54058 3.80434 3.25083 2.82650 2.49571 2.23413 2.02477 1.85545 1.71732
7.60518 5.91532 4.76584 3.94841 3.34730 2.89353 2.54371 2.26940 2.05124 1.87570 1.73304
7.47020 5.84832 4.72940 3.92714 3.33416 2.88502 2.53800 2.26543 2.04841 1.87362 1.73149
7.49800 5.86051 4.73535 3.93031 3.33596 2.88611 2.53868 2.26588 2.04871 1.87384 1.73165
7.49229 5.85830 4.73438 3.92983 3.33571 2.88597 2.53860 2.26583 2.04868 1.87382 1.73163
7.49346 5.85870 4.73454 3.92990 3.33575 2.88599 2.53861 2.26584 2.04869 1.87382 1.73163
7.49322 5.85863 4.73451 3.92989 3.33574 2.88599 2.53861 2.26584 2.04868 1.87382 1.73163
7.49327 5.85864 4.73452 3.92990 3.33574 2.88599 2.53861 2.26584 2.04868 1.87382 1.73163
7.49326 5.85864 4.73452 3.92990 3.33574 2.88599 2.53861 2.26584 2.04868 1.87382 1.73163
7.49326 5.85864 4.73452 3.92990 3.33574 2.88599 2.53861 2.26584 2.04868 1.87382 1.73163

t y
0.0 10.0
0.1 7.49326
0.2 5.85864
0.3 4.73452
0.4 3.92990
0.5 3.33574
0.6 2.88599
0.7 2.53861
0.8 2.26584
0.9 2.04868
1.0 1.87382
c) El Archivo-M para la solución del problema en MATLAB y los
resultados, se muestran a continuación. En el guión, la solución
del método de Euler hacia adelante se denota con yf, mientras
que la del método modificado es ym. La ecuación de Euler
modificada se resuelve iterativamente por el método de
sustitución sucesiva con el número de iteraciones limitado a 10
como máximo. Si el número de iteración rebasa 9, se imprime
un mensaje.

clear, clf, hold off


%===== Euler hacia adelante
yf(1)=10; t(1)=0; h=0.1; n=1;
while t(n)<1
n=n+1; t(n)=t(n-1)+h;
yf(n)=yf(n-1)+h*(-yf(n-1)^1.5+1);
end
%==== Euler modificado
ym(1)=10; t(1)=0; h=0.1; n=1;
while t(n)<1
n=n+1; t(n)=t(n-1)+h;
ym(n)=ym(n-1)+h*(-ym(n-1)^1.5+1);
for k=1:10 % Iteración de sustitución sucesiva
ymb=ym(n) ;
ym(n)=ym(n-1)+ 0.5*h*(-ym(n)^1.5-ym(n-1)^1.5+2);
if abs(ym(n)-ymb)<0.0001, break
end
if k>9,
disp 'La iteración no converge después de k=9'
end
end
End
plot(t,yf,'--',t,ym,'-')
xlabel('t'); ylabel('y') ;
text(0.4, 5.5, '-- Euler hacia adelante – Euler modificado')
10

6
-- Euler hacia adelante – Euler modificado
y

1
0 0.2 0.4 0.6 0.8 1 1.2 1.4
t

Resultados de cálculo
Método de Euler hacia adelante y de Euler modificado
Método de Euler hacia atrás
Se basa en la aproximación de diferencia hacia atrás y
tiene el mismo grado de precisión que el método de Euler
hacia delante:

yn1  yn  hf  yn1 , tn1 

Además, si f es una función no lineal de y, es preciso


emplear un método iterativo (sustituciones sucesivas) en
cada paso igual que en el método de Euler modificado. La
ventaja del método es que es incondicionalmente estable
y se garantiza la positividad de la solución cuando ésta es
positiva.
Método de Euler para resolver EDO de Orden Superior

Forma general de ecuaciones diferenciales de segundo orden:

u' ' t   au' t   but   st  u0  u0 u' 0  u0'

Donde a, b y s son constantes o funciones de t, u y u’ con


condiciones iniciales dadas para u(0) y u’(0). Si a, b y s son
independientes de u, la ecuación anterior es una EDO lineal;
si es función de u y/o de u’, la ecuación es no lineal.
El método de Euler consiste en descomponer la EDO de
segundo orden en un par de EDO de primer orden.

Definiendo v = u’, nos permite escribir la ecuación como:

v' t   avt   but   st , v0  u0'


Aquí, la condición inicial en términos de la nueva variable v
proviene de la segunda condición inicial de la ecuación. La
ecuación puede ahora expresarse con el siguiente conjunto de
EDO de primer orden:

u '  f1 u, v, t , u 0  u0 f1 u, v, t   v


Donde
v'  f 2 u, v, t , v0  u '0 f 2 u, v, t   av  bu  s

A continuación presentamos un cálculo paso a paso para los


primeros incrementos de tiempo:

t  h, u1  u0  hf1u0 , v0 ,0  hv0


v1  v0  hf2 u0 , v0 ,0  h av0  bu0  s0

t  2h, u2  u1  hf1 u1 , v1, h   hv1

v2  v1  hf2 u1, v1, h   h av1  bu1  sh 


Ejemplo
Un objeto de masa M = 10 kg se fija al extremo inferior de un sistema de
amortiguador de resorte. La fuerza del amortiguador es R = -B|u’|u’, donde B
es una constante y u es el desplazamiento con respecto a la posición inicial
en metros. La ecuación del movimiento es:

Mu' ' B u' u' ku  0


u0  0
u' 0  1
donde k es la constante del resorte, igual
a 200 N/m, y B = 50 Ns2/m2.

a) Calcular u(t) para 0 < t  5 utilizando


el método de Euler hacia delante con h =
0.05 y cálculos con EXCEL.

b) Calcular u(t) para 0 < t  5 con


MATLAB empleando el método de Euler
hacia adelante con h = 0.05 y grafique
los resultados.
Solución: Mu ' ' B u ' u ' ku  0 u 0  0 u ' 0  1

a) La ecuación diferencial puede escribirse como:


B k u'  v u0  0
u' '   u ' u ' u0
M M v'  a v v  cu v0  u ' (0)  1

Donde a = B/M = 5 y c = k/M = 20

t  0, u0  u0  0
v0  u' 0  1

t  0.05, u1  u0  hv0  0  0.051  0.05


v1  v0  h a v0 v0  cu0   1  0.05 5 1 1  200  0.75

t  0.1, u2  u1  hv1  0.05  0.050.75  0.0875

v 2  v1  h a v1 v1  cu1   0.75  0.05 5 0.75 0.75  200.05  0.5594


t u v t  0,
0.00 0.0000 1.0000 u0  u0  0
0.05 0.0500 0.7500 v0  u' 0  1
0.10 0.0875 0.5594
0.15 0.1155 0.3936 t  0.05,
0.20 0.1352 0.2394 u1  u0  hv0  0  0.051  0.05
0.25 0.1471 0.0900
0.30 0.1516 -0.0592 v1  v0  h a v0 v0  cu0   1  0.05 5 1 1  200  0.75
0.35 0.1487 -0.2099
0.40 0.1382 -0.3476
0.45 0.1208 -0.4555
0.50 0.0980 -0.5244
0.55 0.0718 -0.5537
0.60 0.0441 -0.5488
0.65 0.0167 -0.5176
0.70 -0.0092 -0.4673
0.75 -0.0326 -0.4035
0.80 -0.0528 -0.3302
0.85 -0.0693 -0.2502
0.90 -0.0818 -0.1653
0.95 -0.0900 -0.0767
1.00 -0.0939 0.0149
. . .
4.90 -0.0071 -0.2406
4.95 -0.0191 -0.2190
5.00 -0.0301 -0.1879
b) La forma más fácil de crear un código en MATLAB es
escribir las ecuaciones en forma de vectores:

y'  f y, t 

 y  u 
y  u  f  - ay  v  c 
Donde  
v   y 

El método de Euler hacia delante para la ecuación anterior se


escribe como:

y n 1  y n  hf y n , t n 
A continuación se presenta el código en MATLB para obtener
la solución, cuyos resultados se muestran en la figura
% Archivo ejemplo axis([0 5 -1 1])
clear, clf, hold off plot(t,y(1,:),t,y(2,:),':')
h=0.05; t_max=5; n=1; xlabel('tiempo (s)'); ylabel('Y y V')
y(:,1)=[0;1]; L=length(t);
t(1)=0; text(t(L), y(1,L), 'Y, desplazamiento')
while t(n)<t_max text(t(L), y(2,L), 'V, velocidad')
y(:,n+1)=y(:,n)+h*f_def(y(:,n),t);yb=y; % Archivo función: f_def.m
t(n+1)=t(n)+h; function f=f_def(y,t)
n=n+1; a=5; c=20;
End f=[y(2);(-a*abs(y(2))*y(2)-c*y(1))];
1

0.8

0.6

0.4
YyV

0.2

0 Y, desplazamiento
V, velocidad
-0.2

-0.4

-0.6
0 1 2 3 4 5 6
tiempo (s)
Método de Runge-Kutta de Segundo Orden
En los métodos de Runge-Kutta, la precisión se incrementa por
el uso del método de integración numérica y los errores se
reducen con mayor rapidez al reducirse h. Así para la ecuación
diferencial ordinaria siguiente:
y' (t )  f  y, t  y0  y0
Para calcular yn+1 con un valor conocido de yn, integramos la
ecuación anterior en el intervalo tn t  tn+1 para obtener:

f  y, t dt
tn 1
y n 1  y n  
tn
Integrando, mediante la regla trapezoidal, el término:

f  y, t dt   f  yn , tn   f  yn 1 , tn 1 
t n 1 h
tn 2
Donde h = tn+1 – tn

yn 1  yn 
h
 f  yn , tn   f  yn1 , tn1   yn  h  f  yn , tn   f  y n1 , tn1 
2 2
yn 1  yn  hf  yn , tn 
estimada por el método
de Euler hacia delante

El esquema que se deduce de esta forma se denomina


método de Runge-Kutta de segundo orden y se escribe así:

 y n   f  y n , t n   f  y n 1 , t n 1 
h
y n 1
2
En una forma más convencional:

k1  hf  yn , tn 
yn 1  yn  k1  k2 
1

2 k2  hf  yn  k1 , tn 1 

El método de Runge-Kutta de segundo orden equivale al


método de Euler modificado con sólo dos pasos de iteración.
Ejemplo

El circuito de la figura tiene una auto inductancia de L = 50 mH


(milihercio), una resistencia de R = 20  y una fuente de voltaje
de E = 10 v. Si se cierra el interruptor en t = 0, la corriente I(t)
satisface:

dI t 
L  RI t   E  I 0   0
dt

Solución:
Primero rescribimos la ecuación del modo siguiente:
R 20 E 10
  400   200
L 50  10 3 L 50 10 3

 f I , t 
dI
f I , t   
R E
Donde: I  400 I  200
dt L L
El método de Runge-Kutta de segundo orden se convierte en:

k1  h 400I n  200 k2  h 400I n  k1   200 I n 1  I n  k1  k2 


1
2
A continuación los cálculos para los dos primeros pasos:
t  0, k1  hf  yn , tn 

I0  0 k2  hf  yn  k1 , tn 1 
t  0.0001,
k1  0.0001 4000  200  0.02 yn 1  yn  k1  k2 
1
2
k2  0.0001 4000  0.02  200  0.0192
I1  I0  1 / 2k1  k2   0  1 / 20.02  0.0192  0.0196

t  0.0002,
k1  0.0001 4000.0196  200  0.019216
k2  0.0001 4000.0196  0.019216  200  0.018447
I 2  I1  1 / 2k1  k2   0.0196  1 / 20.019216  0.018447  0.038431
t k1 k2 I

k1  hf  yn , tn 
0.0000 0.00000
0.0001 0.02000 0.01920 0.01960

k2  hf  yn  k1 , tn 1 
0.0002 0.01922 0.01845 0.03843
0.0003 0.01846 0.01772 0.05653
0.0004 0.01774 0.01703 0.07391
0.0005 0.01704 0.01636 0.09061

yn 1  yn  k1  k2 
0.0006 0.01638 0.01572 0.10666 1
0.0007 0.01573 0.01510 0.12208
0.0008 0.01512 0.01451 0.13689 2
0.0009 0.01452 0.01394 0.15113
0.0010 0.01395 0.01340 0.16480
0.0011 0.01341 0.01287 0.17794
0.0012 0.01288 0.01237 0.19057
0.0013 0.01238 0.01188 0.20270
0.0014 0.01189 0.01142 0.21435
0.0015 0.01143 0.01097 0.22555
0.0016 0.01098 0.01054 0.23631
0.0017 0.01055 0.01013 0.24664
0.0018 0.01013 0.00973 0.25658
0.0019 0.00974 0.00935 0.26612
. . . .
0.0200 0.00001 0.00001 0.49983
El resto del cálculo se realiza con MATLAB:
% Archivo ejemplo13_5.m % Función fn13_5.m
clear, clf, hold off function f=fn13_5(I,RL,EL)
R=20; %ohmios f=-RL*I+EL;
L=50e-3; %Herz
E=10; %Voltios
y(1)=0; t(1)=0;
h=0.1e-3;
n=1;
y_rec(1)=y; t_rec(1)=0; t=0; 0.5
RL=R/L; EL=E/L; 0.45
while t(n)<0.02 0.4
k1=h*fn13_5(y(n),RL,EL); 0.35
k2=h*fn13_5(y(n)+k1,RL,EL); 0.3
y(n+1)=y(n)+0.5*(k1 + k2);
I (A)

0.25
t(n+1)=n*h; 0.2
n=n+1; 0.15

end 0.1

plot(t,y) 0.05

xlabel('tiempo (s)') 0
0 0.005 0.01 0.015 0.02
ylabel('I (A)') tiempo (s)
Ejemplo

Una placa delgada a 200°C (473 K) se coloca repentinamente en una


habitación que está a 25 K, en la cual se enfría por transferencia de calor
natural tanto por convección como por radiación. Se dan las siguientes
constantes físicas:
 = 300 kg/m3 (densidad)
V = 0.001 m3 (volumen)
A = 0.25 m2 (área superficial)
C = 900 J/kgK (calor específico)
hc = 30 J/m2K (coeficiente de transferencia de calor)
 = 0.8 (emisividad)
 = 5.67  10-8 W/m2K4 (constante de Stefan-Boltzmann)
La distribución de temperatura en el metal es uniforme, dada por:

dT
dt

A
CV
  
 2974  T 4  hc 297  T   ; T 0  473

Donde T es la temperatura en grados Kelvin. Encontrar la temperatura para


0 < t < 180 s con el método de Runge-Kutta de segundo orden con h = 1 s.
Solución: Los resultados de cálculo con Excel se muestran a continuación:

k1  hf  yn , tn 
t k1 k2 T
0.000 473.000

k2  hf  yn  k1 , tn 1 
1.000 -6.664 -6.363 466.486
2.000 -6.370 -6.087 460.258
3.000 -6.093 -5.826 454.298

yn 1  yn  k1  k2 
4.000 -5.832 -5.580 448.593 1
5.000 -5.585 -5.347 443.127
6.000 -5.352 -5.126 437.888 2
7.000 -5.131 -4.917 432.864
8.000 -4.922 -4.719 428.044
9.000 -4.723 -4.531 423.417
10.000 -4.535 -4.352 418.973
11.000 -4.356 -4.182 414.705
12.000 -4.185 -4.019 410.602
13.000 -4.023 -3.865 406.659
14.000 -3.868 -3.717 402.866
15.000 -3.720 -3.577 399.218
16.000 -3.579 -3.442 395.707
17.000 -3.445 -3.314 392.328
18.000 -3.316 -3.191 389.074
19.000 -3.193 -3.073 385.941
. . . .
180.000 -0.016 -0.015 297.469
Si el miembro derecho de la EDO es una función no lineal, como es el caso
en el presente problema, es recomendable escribir un archivo M de función
para calcular el miembro derecho. Los resultados de cálculo y el código en
MATLAB, se muestra a continuación.

% Archivo ejemplo13_6.m 480


clear, clf, hold off 460
ro=300; V=0.001; A=0.25; C=900; 440
hc=30;
420
epsi=0.8; sig=5.67e-8; n=1;
400
h=1; T(1)=473; t(1)=0;

T (K)
380
Arcv=A/(ro*C*V); Epsg=epsi*sig;
360
while t(n)<180
k1=h*fn13_6(T(n),Arcv,Epsg,hc); 340

k2=h*fn13_6(T(n)+k1,Arcv,Epsg,hc); 320
T(n+1)=T(n)+0.5*(k1+k2); 300

t(n+1)=t(n)+h; 280
0 20 40 60 80 100 120 140 160 180
n=n+1; tiempo (s)
end
plot(t,T); xlabel('tiempo (s)'),ylabel('T (K)')
% Función fn13_6.m
function f=fn13_6(TB,Arcv,Epsg,hc)
f=Arcv*(Epsg*(297^4-TB^4)+hc*(297-TB));
Método de Runge-Kutta de tercer orden

f  y, t dt
El método de Runge-Kutta de tercer orden se deduce tn 1
aplicando un esquema de integración numérica de y n 1  y n  
tn
orden superior al segundo término de la ecuación:

Si utilizamos la regla 1/3 de Simpson, la ecuación puede escribirse como:

y n 1  y n   f  y n , t n   4 f  y n 1 / 2 , t n 1 / 2   f  y n 1 , t n 1 
h
6
y n 1 / 2  y n  f  y n , t n 
y n1/ 2 estima yn 1/ 2 y se obtiene por el método h
de Euler hacia adelante, así: 2
y n 1 estima y n 1 por: y n1  yn  hf  yn , tn 
y n1  yn  hf  y n1/ 2 , tn1/ 2 

y n1  yn  hf  yn , t n   1    f y n1/ 2 , t n1/ 2 


o por una combinación
lineal de ambas:

 es un parámetro no determinado que se determinará a fin de


maximizar la exactitud del método numérico.
El esquema completo se escribe en la siguiente forma:

k1  hf  yn , t n 

  h
 y n  k1  4k 2  k 3 
1 k1
y n 1  2
k  hf  n
y  , t n  
6   2 2
k3  hf  yn  k1  1   k 2 , t n  h 

Para optimizar  desarrollamos k1, k2 y k3 en serie de Taylor;


que permite encontrar el valor óptimo de  = -1. Por tanto, el
método de Runge-Kutta de tercer orden se escribe así:

k1  hf  yn , t n 

  k1 h
 y n  k1  4k 2  k 3 
1
y n 1 k 2  hf  yn  , t n  
6   2 2
k3  hf  yn  k1  2k 2 , t n  h 
Método de Runge-Kutta de cuarto orden
Basada en la regla 1/3 de Simpson:
k1  hf  yn , t n 

k 2  hf  yn  k1 , t n  h 
  2 2
 y n  k1  2k 2  2k 3  k 4 
1 
y n 1
6 k  hf  y  k 2 , t  h 
 3 
n
2
n
2

k 4  hf  yn  k3 , t n  h 
Basada en la regla 3/8 de Simpson: k1  hf  yn , t n 

k 2  hf  yn  k1 , t n  h 
  3 3
 y n  k1  3k 2  3k 3  k 4 
1 
y n 1 k  hf  y  k1  k 2 , t  2h 
8
 3 
n
3 3
n
3 

k 4  hf  yn  k1  k 2  k3 , t n  h 
Ejemplo: Calcule y(1) con el método de Runge-Kutta de cuarto orden
con h = 1, para:

y 0  1
dy 1
 y'   ,
dt 1 y 2

f  y, t   
1
Solución: Establecemos:
1 y2
con y0 =1 y t0 = 0. Puesto que sólo tenemos un intervalo, la respuesta se
obtiene con:
t k1 k2 k3 k4 y
k1  hf  y0 , t 0   1/1  1  0.5 0.0 1
1.0 -0.5000 -0.6400 -0.6838 -0.9091 0.32388
2.0 -0.9051 -0.9837 -0.9726 -0.7038 -0.59636
 h
 
k 2  hf  y0  1 , t0    1 / 1  0.75  0.64
k 2 3.0 -0.7377 -0.5177 -0.5776 -0.4205 -1.15448
 2 2 4.0 -0.4287 -0.3480 -0.3617 -0.3031 -1.51301
5.0 -0.3040 -0.2651 -0.2697 -0.2393 -1.78183
 h
 
k3  hf  y0  2 , t0    1 / 1  10.68  0.6838
k 2 6.0
7.0
-0.2395
-0.2000
-0.2166
-0.1848
-0.2187
-0.1859
-0.1999
-0.1730
-2.00018
-2.18593
 2 2
8.0 -0.1731 -0.1622 -0.1629 -0.1534 -2.34871

 
k4  hf  y0  k3 , t0  h   1 / 1  0.3161  0.9091
2 9.0
10.0
-0.1535
-0.1385
-0.1453
-0.1321
-0.1457
-0.1324
-0.1385
-0.1266
-2.49437
-2.62668

y1  y0 
1
k1  2k2  2k3  k4   1  1  0.5  20.64   20.6838   0.9091   0.3238
6 6
Ejemplo: Resolver mediante el método de Runge-Kutta de cuarto orden:

dy t  y y  3et / 2  2  t
 y(0) = 1; h = 0.25 0 ≤ t ≤ 3
Solución
analítica
dt 2
ty
Solución: Establecemos: f  y, t  
2

k1  hf ( yi , ti ) y
t k1 k2 k3 k4 y %error
analítico
0.00 1 1.00000 0.00000
k h 0.25 -0.1250 -0.1016 -0.1030 -0.0809 0.89749 0.89749 0.00008
k 2  hf ( yi  1 , ti  ) 0.50 -0.0809 -0.0603 -0.0615 -0.0420 0.83640 0.83640 0.00016
2 2 0.75 -0.0421 -0.0238 -0.0249 -0.0077 0.81187 0.81187 0.00022
1.00 -0.0077 0.0084 0.0074 0.0226 0.81959 0.81959 0.00025
1.25 0.0226 0.0368 0.0359 0.0493 0.85579 0.85578 0.00026
k2 h
k3  hf ( yi  , ti  ) 1.50 0.0493 0.0618 0.0610 0.0729 0.91710 0.91710 0.00026
2 2 1.75 0.0729 0.0839 0.0832 0.0937 1.00059 1.00059 0.00025
2.00 0.0937 0.1034 0.1028 0.1121 1.10364 1.10364 0.00023
2.25 0.1120 0.1207 0.1201 0.1283 1.22396 1.22396 0.00020
k4  hf ( yi  k3 , ti  h) 2.50 0.1283 0.1359 0.1354 0.1426 1.35952 1.35951 0.00018
2.75 0.1426 0.1493 0.1489 0.1552 1.50852 1.50852 0.00016
3.00 0.1552 0.1611 0.1607 0.1663 1.66939 1.66939 0.00014
1
yi 1  yi  ( k1  2k 2  2k3  k 4 )
6
Método de Runge-Kutta de cuarto orden para un conjunto
de dos ecuaciones:
un 1  un  k1  2k 2  2k 3  k 4 
1
u '  f u, v, t  6
v n 1  v n  m1  2m2  2m3  m4 
1
v'  g u, v, t  6

k1  hf un , vn , t n  m1  hg un , vn , t n 
 k m h  k1 m1 h
k 2  hf  un  1  vn  1 , t n   m2  hg  un   vn  , t n  
 2 2 2  2 2 2
 k2 m2 h  k m h
k3  hf  un   vn  , tn   m3  hg  un  2  vn  2 , t n  
 2 2 2  2 2 2
 m3   m3 
k 4  hf  un  k3  vn  , tn  h  m4  hg  un  k3  vn  , tn  h 
 2   2 
Escribiendo la ecuación en forma vectorial:

u  f
y'  f  y,t  y  f  
v  g 

De acuerdo al esquema de Runge-Kutta de cuarto orden:

k1  hf  yn , t n 

k 2  hf  yn  k1 , t n  h 
  2 2
 y n  k1  2k 2  2k 3  k 4 
1
y n 1 
6 k  hf  y  k 2 , t  h 
 3 
n
2
n
2

k 4  hf  yn  k3 , t n  h 
Ejemplo
Mu ' ' Bu ' ku  0
Resolver el problema del
Sistema de Resorte-Masa, con u 0  1
u' 0  0
Runge-Kutta de cuarto orden.
Solución
u'  f  v  u 0  1

v'  g  B / M v  k / M u   20v  200u  v0  0


Con a = B/M = 20 y b = k/M = 200, el método de Runge-Kutta
de cuarto orden para la ecuación adopta la forma:

un 1  un  k1  2k 2  2k 3  k 4 
1
6
v n 1  v n  m1  2m2  2m3  m4 
1
6
Para t = 0 Mu ' ' Bu ' ku  0
u0  u 0   1 u'  f  v  u 0  1
v0  u ' 0   0 v'  g  B / M v  k / M u   20v  200u  v0  0

Para t = 0.025

k1  hf u0 , v0 , t0   hv0  0.0250  0


m1  hgu0 , v0 , t0   h 20v0  200u0   0.025 200  2001  5

k2  hf u0  k1 / 2, v0  m1 / 2, t0  h / 2  hv0  m1 / 2  0.0250  5 / 2  0.0625

m2  hg u0  k1 / 2, v0  m1 / 2, h / 2   h 20v0  m1 / 2   200u0  k1 / 2 


 0.025 200  5 / 2   2001  0 / 2   3.75

k3  hf u0  k2 / 2, v0  m2 / 2, t0  h / 2  hv0  m1 / 2  0.0250  3.75 / 2  0.046875

m3  hg u0  k 2 / 2, v0  m2 / 2, t0  h / 2  h 20v0  m2 / 2   200u0  k 2 / 2


 0.025 200  3.75 / 2   2001  0.0625 / 2   3.9062
k4  hf u0  k3 , v0  m3 , t0  h  hv0  m3   0.0250  5 / 2  0.09765
m4  hg u0  k3 , v0  m3 , t0  h   h 20v0  m3 / 2   200 / u0  k3 / 2 
 0.025 200  3.90625  2001  0.046875  2.8125

u1  u0  1 / 60  2 0.0625  2 0.046875  0.097656  0.947266


v1  v0  1/ 6 5  2 3.75  2 3.9062  2.8125  3.8541
Para t = 0.05
k1  hf u1, v1, t1   hv1  0.025 3.85416  0.096354
m1  hg u1 , v1 , t1   h 20v1  200u1   0.025 20 3.8541  2000.947265  2.8092

k 2  hf u1  k1 / 2, v1  m1 / 2, t1  h / 2   hv1  m1 / 2 
 0.025 3.8541666  2.809244 / 2   0.1314697
m2  hg u1  k1 / 2, v1  m1 / 2, t1  h / 2  h 20v1  m1 / 2  200u1  k1 / 2
 0.025 20 3.85416  2.809244 / 2  2000.947266  0.96354 / 2  1.866054
k3  hf u1  k 2 / 2, v1  m2 / 2, t1  h / 2   hv1  m2 / 2 
 0.025 3.85416  1.866054 / 2   0.1196797

m3  hg u1  k 2 / 2, v0  m2 / 2, t1  h / 2   h 20v1  m2 / 2   200u1  k 2 / 2 


 0.025 20 3.85416  1.866054 / 2   2000.947266  0.1314697 / 2   2.014058

k4  hf u1  k3 , v1  m3 , t1  h  hv1  m3   0.025 3.85416  2.014058  0.146706

m4  hg u1  k3 , v1  m3 , t0  h   h 20v1  m3   200u1  k3 


 0.025 20 3.85416  2.014058  2000.947266  0.1196797  1.203821

u2  u1  1 / 6 0.0966541 2 0.131469  2 0.119679  0.146705  0.823039

v2  v1  1 / 6 2.809244  2 1.866048  2 2.014058  1.203816  5.816375


2
% Archivo ejemplo13_9
1
clear, clf Desplazamiento, u
0
M=0.5; k=100; B=10; a=B/M; -1
b=k/M; n=1; h=0.025;

u(m) y v(m/s)
-2
y(:,1)=[1;0]; t(1)=0; % condición inicial -3
M=[0,1;-b,-a]; -4
Velocidad, V
while t(n)<=1 -5

-6
k1=h*M*y(:,n);
-7
k2=h*M*(y(:,n)+k1/2);
-8
k3=h*M*(y(:,n)+k2/2); 0 0.1 0.2 0.3
t(s)
0.4 0.5 0.6 0.7

k4=h*M*(y(:,n)+k3);
y(:,n+1)=y(:,n)+(k1+2*k2+2*k3+k4)/6;
t(n+1)=n*h;
n=n+1;
end
plot(t,y(1,:),'-',t,y(2,:),':');
xlabel('t(s)'); ylabel('u(m) y v(m/s)');
text(t(5),y(1,5)+0.3, 'Desplazamiento,
u','Fontsize',[10])
text(t(8),y(2,7), 'Velocidad, V','Fontsize',[10])
axis([0,0.7,-8,2])
Método de Range-Kutta para EDO de segundo orden:
Similar al método de Euler. Así para la siguiente EDO de segundo orden:

u' 'au'bu  qt  u0  1, u' 0  0

a, b y q son constantes o funciones de t, u y u’. Si definimos: vt   u ' t 


La ecuación se reduce a
u'  f u, v, t   v u 0  1
un conjunto de ecuaciones
diferenciales de primer v '  g u, v, t   av  bu  q v 0  0
orden acopladas:
k 1  hf u n , v n , t n   hv n
El método de m1  hg u n , v n , t n   h  av n  bu n  bu n  q n 
Runge-Kutta
k 2  hf u n  k 1 , v n  m1 , t n 1   h v n  m1 
de segundo
orden para las m 2  hg u n  k 1 , v n  m1 , t n 1   h  a v n  m1   bu n  k 1   q n 1 
ecuaciones
anteriores se u n 1  u n 
1
k1  k 2 
2
escriben como:
v n 1  v n  m1  m 2 
1
2
Para la implementación en MATLAB, escribimos las EDO en forma vectorial
como:
u  f  v 
y'  f donde: y  f   
v    
g  av  bu  q 
Entonces, el esquema de Runge-Kutta de segundo orden se convierte en:

k1  hf un ,t n 
 y n  k1  k 2 
1
y n 1
2 k 2  hf un ,k1 ,t n 1 
Si a, b y q son constantes o funciones exclusivamente de t, la ecuación
puede escribirse así:
 0 1  0 
y'  Mf  S M   S 
donde:
 b  a  q 

Entonces, una forma equivalente de escribir la ecuación es:

k1  hMy1  S 
 y n  k1  k 2 
1
y n 1
2 k 2  hM  y1  k1 1  S 
Ejemplo
Una caja rectangular de masa M = 0.5 kg se fija al extremo inferior de un
sistema de resorte-amortiguador sin masa, como se ilustra en la figura. El
amortiguador ejerce una fuerza de R = -Bdu/dt sobre la caja, siendo B la
constante de amortiguación, u la velocidad y K la constante del resorte. La
ecuación del movimiento es:
Mu ' ' Bu ' ku  0 (A)
u 0  1
u' 0  0
B = 10 k = 100
N.s/m2
a) Calcule u(t) para 0 < t  0.05 s N/m

utilizando el método de Runge-Kutta de


segundo orden con h = 0.025 s y
realizando los cálculos manualmente.
u(0) = 0
M
b) Calcule u(t) para 0 < t  1 s u(t)
0.5 Kg
utilizando el método de Runge-Kutta de
segundo orden con h = 0.025 s. Sistema de Resorte-Masa
Solución:
La ecuación (A) puede escribirse así:

u'  f  v u 0  1 v'  g  B / M v  k / M u v0  0


a) Si sustituimos a = B/M = 20 y b = k/M = 200, el método de Runge-Kutta de
segundo orden para la ecuación (13.18), se convierte en:

Para t = 0 u0  u0  1 v0  u ' 0   0

Para t = 0.025

k1  hf u0 , v0 , t0   hv0  0.0250  0


m1  hgu0 , v0 , t0   h 20v0  20v0  20u0   0.025 200  2001  5
k2  hf u0  k1, v0  m1, t1   hv0  m1   0.0250  5  0.125
m2  hgu0  k1, v0  m1, t1   h 20v0  m1   200u0  k1   0.025 200  5  2001  0  2.5

u1  u0  1 / 20  0.125  0.9375


v1  v0  1/ 2 5  2.5  3.75
Para t = 0.05

k1  hf u1 , v1 , t1   hv1  0.025 3.75  0.09375


m1  hg u1 , v1 , t1   h 20v1  200u1   0.025 20 3.75  2000.9375  2.8125

k2  hf u1  k1 , v1  m1 , t2   hv1  m1   0.025 3.75  2.8125  0.16406


m2  hg u1  k1 , v1  m1 , t2   h 20v1  m1   200u1  k1 
 0.025 20 3.75  2.8125  2000.9375  0.09375  0.9375
u1  u1  1 / 2 0.09375  0.16406  0.80859

u2  v1  1 / 2 2.8125  0.9375  5.625

b) Para los cálculos en MATLAB, rescribimos las ecuaciones como

u  0 1
y'  Mf donde: y  Mf   
v   -b  a 
El Archivo-M se elabora con base en la ecuación. El código en MATLAB y los
resultados del programa se presentan a continuación:
% Archivo ejemplo13_7
plot(t,y(1,:),'-',t,y(2,:),':');
clear, clf, hold off
xlabel('t(s)'); ylabel('u(m) y v(m/s)');
M=0.5; k=100; B=10; a=B/M;
text(0.1,0.6, 'Desplazamiento,
b=k/M; n=1; h=0.025;
u','Fontsize',[8])
y(:,1)=[1;0]; t(1)=0; % condición inicial
text(0.3,-1.8, 'Velocidad, V','Fontsize',[8])
M=[0,1;-b,-a];
while t(n)<=1
k1=h*M*y(:,n); 1
k2=h*M*(y(:,n)+k1); Desplazamiento, u
y(:,n+1)=y(:,n)+0.5*(k1+k2); 0
t(n+1)=n*h;
n=n+1; -1
end Velocidad, V
u(m) y v(m/s)
-2

-3

-4

-5

-6

-7
0 0.2 0.4 0.6 0.8 1
t(s)

También podría gustarte