Professional Documents
Culture Documents
NUMRICOS DE RESOLUCIN
DE ECUACIONES
DIFERENCIALES ORDINARIAS
En esta prctica vamos a hallar la solucin numrica de ecuaciones diferenciales con
condiciones iniciales dadas, puesto que es muy limitado el nmero de tipos de ecuaciones
diferenciales integrables de forma analtica. Por ello, es necesario habilitar nuevos recursos
para obtener la solucin de una ecuacin diferencial que cumpla las condiciones iniciales
prefijadas. En la primera parte de la prctica utilizaremos funciones propias de Mathematica
y en la segunda parte programaremos los algoritmos correspondientes a los mtodos de
Picard, Euler y Runge-kutta.
1. Resolucin numrica de ecuaciones diferenciales de primer orden con funciones propias
de Mathematica.
2. Recursos de programacin en Mathematica.
3. Mtodo de Picard o de las aproximaciones sucesivas.
4. Mtodo de Euler.
5. Ejercicios.
6. Mtodos de Runge Kutta de diversos rdenes.
7. Aplicaciones.
8. Ejercicios.
Ejemplo 1.
Pr6MatII.nb
0.2
0.4
0.6
0.8
1.0
Pr6MatII.nb
Needs@"DifferentialEquations`NDSolveProblems`"D;
Needs@"DifferentialEquations`NDSolveUtilities`"D;
s = NDSolve@8y '@xD y@xD, y@0D 1<, y@xD, 8x, 0, 1<,
Method "ExplicitEuler", "StartingStepSize" 1 10D;
Plot@y@xD . s, 8x, 0, 1<D
1.0
0.9
0.8
0.7
0.6
0.5
0.2
0.4
0.6
0.8
1.0
el punto x e y(x) es la solucin exacta en ese mismo punto. El valor por defecto es Automatic.
WorkingPrecision->n
Pr6MatII.nb
Indica el nmero de dgitos con los que se realizan los clculos internos. Por defecto
asume el valor de la variable del sistema $MachinePrecision. De todas formas, el valor
elegido para esta opcin deber ser siempre superior al de las opciones anteriores para no
desvirtuar el resultado obtenido.
MaxSteps->n
Es el nmero mximo de subintervalos del dominio considerado que se han de utilizar.
El valor por defecto de esta opcin es 1000. Con ello podemos cambiar el nmero de puntos
que determinan la funcin de interpolacin que el comando NDSolve[...] proporciona como
resultado.
Ejemplo 2.
Resuelve la ecuacin y'' (x) + sen (x) = y' (x) con las condiciones iniciales y (0) = 0, y' (0) =
1.
NDSolve@8y ''@xD + Sin@xD == y '@xD, y@0D 0, y '@0D 1<,
y, 8x, 5, 5<, WorkingPrecision 25D
88y InterpolatingFunction@885.000000000000000000000000,
5.000000000000000000000000<<, <>D<<
Plot@y@xD . %, 8x, 5, 5<D
30
25
20
15
10
5
-4
-2
Pr6MatII.nb
Mathematica nos dice que var es una variable almacenada en el contexto Global
cuyo valor actual es 30. Muchas veces es conveniente usar alguna variable o alguna funcin
para realizar una tarea muy especfica y no nos interesa que dicha variable o funcin pueda
ser accesible desde otras instancias del programa. Para ello Mathematica dispone del
comando Module[{x,y,... <,expr]que especifica que los smbolos x, y,... en
expr deben ser tratados como variables locales.
Module@8var<, var = 0; varDH Mathematica nos da el valor de la variable local "var" L
var H "var" sigue siendo una variable global y su valor no ha cambiado L
Por ejemplo:
Clear@aD; Clear@bD; t = 5;
H declaramos "t" como variable global con valor inicial 5 L
f@x_D := Module@8t<, t = H1 + xL ^ 2; Expand@tDDH declaramos "t"como una variable local L
f@a + bD
1 + 2 a + a2 + 2 b + 2 a b + b 2
If
El uso ms frecuente del comando "If[]" es con tres argumentos.
If[test,expr1,expr2]
El primer argumento debe ser una expresin boleana. Si test=True, expr1 es
ejecutada, mientras que si test=False, expr2 es ejecutada. Las expresiones expr1 y
expr2 pueden estar formadas por varias instrucciones separadas por punto y coma.
Por ejemplo, podemos usar "If[]" para definir una funcin que devuelva 1 si su
argumento es positivo y devuelva -1 si es negativo.
Pr6MatII.nb
Clear@fD
f@x_D := If@x > 0, 1, 1D
H observa que es obligado el uso de :=
si no lo usamos Mathematica tratara
de evaluar inmediatamente la condicin x>
0 lo que dara un error. L
f@.2D
f@.01D
For
El comando For se usa para realizar bucles. Un bucle es un proceso repetitivo que
se realiza un cierto nmero de veces. La sintaxis de la orden es:
For[expresininicial,test,incr,expr]
expresininicial nos sita en las condiciones de comienzo del bucle.
test dir a Mathematica el momento de detener el proceso.
incr expresar la forma de modificar la condicin inicial.
expr dir a Mathematica lo que tiene que realizar en cada paso; la expresin puede estar
compuesta de varias instrucciones separadas mediante punto y coma.
El orden de evaluacin es testexprincr.El proceso termina cuando test da
False. Un aspecto importante de For es que su resultado es Null es decir, que no proporciona resultado en pantalla salvo que se lo indiquemos de alguna forma explcita. Vamos a
ver algunos ejemplos del funcionamiento de este comando. Ejecuta la siguiente celda.
Clear@iD
For@i = 1, i 100, i ++, i = i ^ 3D
Pr6MatII.nb
i
9^3
730
729
Para saber con total claridad todas las operaciones que ha realizado Mathematica
para ejecutar un comando podemos usar la orden Trace.
Trace@For@i = 1, i 100, i ++, i = i ^ 3DD
9ForAi = 1, i < 100, i ++, i = i3E, 8i = 1, 1<,
88i, 1<, 1 < 100, True<, 998i, 1<, 13 , 1=, i = 1, 1=,
8i ++, 8i, 1<, 8i = 2, 2<, 1<, 88i, 2<, 2 < 100, True<,
998i, 2<, 23 , 8=, i = 8, 8=, 8i ++, 8i, 8<, 8i = 9, 9<, 8<,
88i, 9<, 9 < 100, True<, 998i, 9<, 93 , 729=, i = 729, 729=,
8i ++, 8i, 729<, 8i = 730, 730<, 729<,
88i, 730<, 730 < 100, False<, Null=
El valor final de i es 730 ya que 9^3+1=730. Para que For proporcione una salida en
pantalla se usa el comando Print[expr].
For@i = 1, i 500, i ++, i = i ^ 2; Print@iDD
H observa cmo las dos instrucciones
al final van separadas por ";" no por "," L
Pr6MatII.nb
Pr6MatII.nb
Do
En la creacin de los algoritmos son tiles los comandos Table y Array. El comando
Table[{expr1, expr2}, {i, imin, imax}] genera una lista de valores de las expresiones para los
valores naturales de i entre imin e imax como ya hemos visto en prcticas anteriores.
Array[f, n] genera un vector de longitud n con los valores de f, por ejemplo :
Array@f, 10D
Array@f, 10, 0D
Hel 0 se pone para que comience desde el valor f@0DL
8f@1D, f@2D, f@3D, f@4D, f@5D, f@6D, f@7D, f@8D, f@9D, f@10D<
8f@0D, f@1D, f@2D, f@3D, f@4D, f@5D, f@6D, f@7D, f@8D, f@9D<
10
Pr6MatII.nb
As, obtendremos una solucin del problema de valores iniciales si conseguimos una
solucin continua de la ecuacin integral. Esta expresin nos proporciona la clave para que,
a partir de una primera aproximacin de la funcin yHxL y0 HxL = y0 , podamos definir una
sucesin de funciones 8yn HxL< de forma iterativa del siguiente modo:
x
...
x
Pr6MatII.nb
11
x0 = 0; y0 = 1; n = 5; f@x_, y_D := y;
ye1@x_D := Module@8u<, u = y0 + Integrate@f@t, 1D, 8t, x0, x<DD;
ye2@x_D :=
Module@8u<, u = y0 + Integrate@f@t, ye1@tDD, 8t, x0, x<DD;
ye3@x_D := Module@8u<,
u = y0 + Integrate@f@t, ye2@tDD, 8t, x0, x<DD;
ye4@x_D := Module@8u<,
u = y0 + Integrate@f@t, ye3@tDD, 8t, x0, x<DD;
ye5@x_D := Module@8u<,
u = y0 + Integrate@f@t, ye4@tDD, 8t, x0, x<DD;
Print@ye5@xDD
2
3
4
5
x
x
x
x
1 + x + -- + -- + -- + ---2
6
24
120
4. Mtodo de Euler.
El mtodo de Euler es el ms simple de los mtodos numricos de resolucin de
ecuaciones diferenciales pero tiene la desventaja de que el error que se comete al aplicarlo
crece considerablemente con el nmero de iteraciones. Partimos de un problema de valores
iniciales de la forma:
y ' = f Hx, yL, y Hx0 L = y0
Supongamos que este problema tiene solucin nica y(x). Buscamos una aproximacin de los valores de la funcin y(x) para una serie de valores de x separados por una
distancia h. Para ello, elegimos un intervalo [a, b] con x0 =a. Dividimos el intervalo [a, b] en
subintervalos iguales, tomando xi = xi-1 + h, i = 1, 2, ..., n. Entonces h= b-a
. El mtodo de
n
Euler consiste en utilizar el desarrollo en serie de Taylor de la solucin quedndonos en el
primer orden de h, es decir:
y1 = y Hx0 + hL y Hx0 L + hy ' Hx0 L = y Hx0 L + hf Hx0 , y0 L
de y2 .
12
Pr6MatII.nb
En general,
yi+1 = yi + hf Hxi , yi L, y Hx0 L = y0 , i = 1, 2, ...
Si queremos que la salida sea un conjunto de puntos entonces podemos utilizar los
Pr6MatII.nb
13
0.2
0.4
0.6
0.8
1.0
1.2
1.4
14
Pr6MatII.nb
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
5. Ejercicios
1. Resuelve de forma aproximada el problema de valor inicial y' = 25 - 8y, y (0) = 4.
2. Resuelve el problema de valor inicial xy+y'=ax y2, y(0)=1, de forma aproximada y dibuja
la solucin en el rango -1<x<1, variando el parmetro a desde -2 a 2, de 0,25 en 0,25.
3. Dado el problema de valor inicial y'=3xy, y(1)=1. Calcula la solucin analtica. Halla el
valor aproximado de y(1,5) mediante el mtodo de Euler y compara los resultados para los
pasos
h= 0,1 h = 0,01 con la solucin analtica del problema planteado.
4. Dado el problema de valor inicial y' = Hx - 2 y - 1L2 ,
y H0L = 2, halla el valor aproximado de la solucin en x = 0,
5 utiliando el mtodo de Euler con los pasos h = 0, 1 y h = 0,
01. Compara el valor aproximado con el valor real de la
solucin analtica indicando el error cometido en cada iteracin.
5. Resuelve numricamente el problema del valor inicial y' - y = y2 , y H0L = 1,
con 5 iteraciones de Picard.
Pr6MatII.nb
15
1
1
; a2 q11 =
2
2
Como tenemos tres ecuaciones con cuatro incgnitas existe un nmero infinito de
mtodos de RK de segundo orden. Las siguientes versiones son las que ms se usan :
1
* Mtodo de Heun con un corrector simple : a2 = .
2
* El Mtodo mejorado del polgono : a2 = 1.
2
* El Mtodo de Ralston : a2 = .
3
16
Pr6MatII.nb
1
2
yi+1 = yi +
1
2
k1 +
1
2
k2 h, k1 = f Hxi , yi L, k2 = f Hxi + h, yi + k1 hL
x0 = 0; y0 = 1;
f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5;
h = 0.5;
k10 = f@x0, y0D;
k20 = f@x0 + h, y0 + k10 hD; x1 = x0 + h; y1 = y0 + 1 2 k10 h + 1 2 k20 h;
y1v = yv@x1D; Print@x1D; Print@y1D; Print@y1vD
0.5
3.4375
3.21875
HEl error relativo porcentual LAbs@Hy1 y1v L y1vD 100
6.79612
HMtodo de EulerL
Clear@"@"D; a = 0; b = 4; h = 0.5; n = Hb aL h; f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5;
Array@x, n + 1, 0D; Array@ye, n + 1, 0D; Do@x@iD = a + i h, 8i, 0, n<D;
ye@0D = 1; For@i = 0, i n, i ++, ye@i + 1D = ye@iD + h f@x@iD, ye@iDDD;
le = Table@8x@iD, ye@iD<, 8i, 0, n<D
880, 1<, 80.5, 5.25<, 81., 5.875<, 81.5, 5.125<,
82., 4.5<, 82.5, 4.75<, 83., 5.875<, 83.5, 7.125<, 84., 7.<<
Pr6MatII.nb
HMtodo de HeunL
a = 0; b = 4; h = 0.5; n = Hb aL h; f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5;
Array@x, n + 1, 0D; Array@yhe, n + 1, 0D; Array@k1, n, 0D;
Array@k2, n, 0D; Do@x@iD = a + i h, 8i, 0, n<D; yhe@0D = 1;
For@i = 0, i n, i ++, k1@iD = f@x@iD, yhe@iDD; k2@iD = f@x@iD + h, yhe@iD + k1@iD hD;
Print@"i=", iD; Print@"El valor de k1 es ", k1@iDD; Print@"El valor de k2 es ", k2@iDD;
yhe@i + 1D = yhe@iD + 1 2 k1@iD h + 1 2 k2@iD hD; lhe = Table@8x@iD, yhe@iD<, 8i, 0, n<D
i=0
El valor de k1 es 8.5
El valor de k2 es 1.25
i=1
El valor de k1 es 1.25
El valor de k2 es 1.5
i=2
El valor de k1 es 1.5
El valor de k2 es 1.25
i=3
El valor de k1 es 1.25
El valor de k2 es 0.5
i=4
El valor de k1 es 0.5
El valor de k2 es 2.25
i=5
El valor de k1 es 2.25
El valor de k2 es 2.5
i=6
El valor de k1 es 2.5
El valor de k2 es 0.25
i=7
El valor de k1 es 0.25
El valor de k2 es 7.5
880, 1<, 80.5, 3.4375<, 81., 3.375<, 81.5, 2.6875<,
82., 2.5<, 82.5, 3.1875<, 83., 4.375<, 83.5, 4.9375<, 84., 3.<<
17
18
Pr6MatII.nb
Se puede llevar a cabo una derivacin anloga a la del mtodo de segundo orden,
para n=3. El resultado de esta derivacin es de seis ecuaciones con ocho incgnitas. por lo
tanto, se deben especificar a priori los valores de dos de las incgnitas para determinar los
parmetros restantes. Una versin comn que resulta es:
1
Hk1 + 4 k2 + k3 L h, donde
6
1
1
k1 = f Hxi , yi L, k2 = f xi + h, yi + hk1 ,
2
2
k3 = f Hxi + h, yi hk1 + 2 hk2 L
yi+1 = yi +
Ejemplo. Resuelve numricamente con el mtodo de Runge Kutta de rden 3 el problema de condicin inicial y' =
-2 x3 + 12 x2 - 20 x + 8.5, y H0L = 1.
para un tamao del paso de 0, 5.
f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5
h = 0.5; x0 = 0; y0 = 1; k10 = f@x0, y0D; k20 = f@x0 + 1 2 h, y0 + 1 2 h k10D;
k30 = f@x0 + h, y0 h k10 + 2 h k02D; yrkt1 = y0 + 1 6 Hk10 + 4 k20 + k30L h;
Print@"yrkt1= ", yrkt1D; Print@"k10= ", k10D; Print@"k20= ", k20D; Print@"k30= ", k30D;
Pr6MatII.nb
19
yrkt1= 3.21875
k10= 8.5
k20= 4.21875
k30= 1.25
HMtodo de RungeKutta de rden 3L
a = 0; b = 4; h = 0.5; n = Hb aL h; f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5;
Array@x, n + 1, 0D; Array@yrkt, n + 1, 0D; Array@k1, n, 0D; Array@k2, n, 0D;
Array@k3, n, 0D; Do@x@iD = a + i h, 8i, 0, n<D; yrkt@0D = 1; For@i = 0, i n, i ++,
k1@iD = f@x@iD, yrkt@iDD; k2@iD = f@x@iD + 1 2 h, yrkt@iD + 1 2 k1@iD hD;
k3@iD = f@x@iD + h, yrkt@iD k1@iD h + 2 h k2@iDD;
yrkt@i + 1D = yrkt@iD + 1 6 Hk1@iD + 4 k2@iD + k3@iDL hD;
lrkt = Table@8x@iD, yrkt@iD<, 8i, 0, n<D
880, 1<, 80.5, 3.21875<, 81., 3.<, 81.5, 2.21875<,
82., 2.<, 82.5, 2.71875<, 83., 4.<, 83.5, 4.71875<, 84., 3.<<
Los mtodos RK ms populares son los de cuarto orden. Como sucede con los mtodos de segundo orden, existe un nmro infinito de versiones. El siguiente algunas veces se
llama mtodo clsico RK de cuarto orden:
1
Hk1 + 2 k2 + 2 k3 + k4 L h, donde
6
1
1
k1 = f Hxi , yi L, k2 = f xi + h, yi + hk1 ,
2
2
1
1
k3 = f xi + h, yi + hk2 , k4 = f Hxi + h, yi + hk3 L
2
2
yi+1 = yi +
Ejemplo. Resuelve numricamente con el mtodo de Runge Kutta de rden 3 el problema de condicin inicial y' =
-2 x3 + 12 x2 - 20 x + 8.5, y H0L = 1.
para un tamao del paso de 0, 5.
Clear@"@"D; f@x_, y_D := 2 x ^ 3 + 12 x ^ 2 20 x + 8.5
h = 0.5; x0 = 0; y0 = 1; k10 = f@x0, y0D; k20 = f@x0 + 1 2 h, y0 + 1 2 h k10D;
k30 = f@x0 + 1 2 h, y0 + 1 2 h k20D; k40 = f@x0 + h, y0 + h k30D;
yrkc1 = y0 + 1 6 Hk10 + 2 k20 + 2 k30 + k40L h; Print@yrkc1D;
Print@k10D; Print@k20D; Print@k30D; Print@k40D;
3.21875
8.5
4.21875
4.21875
1.25
20
Pr6MatII.nb
7. Aplicaciones
1. Un proyectil de masa m = 0,11 kg se lanza verticalmente hacia arriba con una velocidad
inicial de 8 m/s siendo frenado por la accin de la gravedad g y por la resistencia del aire k.
Se satisface la ecuacin diferencial : mv' = -mg - kv | v | donde g = 9, 8 m/s2 y k=0,002 kg/m.
Halla la velocidad, al cabo de 2 segundos, usando el mtodo de Rung-kutta con 20 subintervalos. Tomando un intervalo de tiempo mayor, comprueba que la velocidad decrece hasta
llegar a cierto lmite. Calcula dicho lmite. Representa el campo de direcciones y las soluciones obtenidas en cada caso.
Pr6MatII.nb
21
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.
8
6.91872
5.86433
4.83219
3.81804
2.81789
1.82793
0.844543
0.13582
1.11496
2.09015
3.05795
4.01506
4.9583
5.8847
6.7915
7.67619
8.53653
9.3706
10.1767
10.9536
22
Pr6MatII.nb
a = 0; b = 10; n = 20; h = N@Hb aL nD; f@t_, v_D := 9.8 0.002 v Abs@vD 0.11;
Array@t, n + 1, 0D; Array@vrkc, n + 1, 0D; Array@k1, n, 0D; Array@k2, n, 0D; Array@k3, n 1, 0D;
Array@k4, n 1, 0D; Do@t@iD = a + i h, 8i, 0, n<D; vrkc@0D = 8; For@i = 0, i n,
i ++, k1@iD = f@t@iD, vrkc@iDD; k2@iD = f@t@iD + 1 2 h, vrkc@iD + 1 2 k1@iD hD;
k3@iD = f@t@iD + 1 2 h, vrkc@iD + 1 2 h k2@iDD;
k4@iD = f@t@iD + h, vrkc@iD + k3@iD hD;
vrkc@i + 1D = vrkc@iD + 1 6 Hk1@iD + 2 k2@iD + 2 k3@iD + k4@iDL hD;
MatrixForm @Table@8t@iD, vrkc@iD<, 8i, 0, n<DD
0
0.5
1.
1.5
2.
2.5
3.
3.5
4.
4.5
5.
5.5
6.
6.5
7.
7.5
8.
8.5
9.
9.5
10.
8
2.8179
2.0883
6.7897
10.9519
14.3703
17.0088
18.9496
20.3272
21.2803
21.9283
22.3636
22.6536
22.8458
22.9727
23.0563
23.1113
23.1474
23.1711
23.1867
23.1969
2
-5
-10
-15
-20
10
Pr6MatII.nb
23
mg k resultando :
8. Ejercicios
1. Resuelve numricamente con el mtodo del polgono mejorado y de Ralston el problema
de condicin inicial y'=-2x3 + 12 x2 - 20 x + 8.5, y(0)=1.
para un tamao del paso de 0,5. Calcula el error reativo aproximado cometido en cada iteracin. Compara las soluciones con la solucin exacta.
2. Programa 8 iteraciones del mtodo de Runge-Kutta de tercer orden para el problema de
condicin inicial y'=-2x3 + 12 x2 - 20 x + 8.5, y(0)=1.
para un tamao del paso de 0,5. Dibuja los puntos unidos y la solucin exacta.
3. Dado el problema de valor inicial y' = y + cos (x), y (0) = 1. Halla el valor aproximado de
y(0,4) utilizando el mtodo de Runge - Kutta de 4 pasos con un paso de h = 0,1. Compara los
resultados con la solucin analtica.
4. El rea S (cm2 M que ocupa una colonia de microorganismos viene modelizada por
dS
dt
6. Dibuja la grfica de 4 aproximaciones numricas al problema de valor inicial y'=e2 cosH5 yL,
y(0)=1 en el intervalo ]-1,1[ utilizando 20 pasos.
7. Calcula dos iteraciones del mtodo de Runge-Kutta de 4 pasos para
24
Pr6MatII.nb
y'=-2 x3 + 12 x2 - 20 x + 8.5, y(0)=1, para un tamao del paso de 0,2 sin utilizar herramientas
de programacin.
Bibliografa :
Problemas Resueltos de Metodos Numricos. A.Cordero, J.L. Hueso, E.Martnez,
J.R.Torregrosa. UPV