Está en la página 1de 10

DEPARTAMENTO DE MATEMATICA APLICADA

UNIVERSIDAD COMPLUTENSE DE MADRID


Análisis Numérico de Ecuaciones Diferenciales Ordinarias, Curso 07–08
PRACTICAS. Hoja 1
Primeras prácticas con MATLAB
Ejecutar los siguientes comandos, trabajando de forma interactiva con Matlab. Anota a la derecha lo
que hace cada una de las instrucciones que siguen.
Práctica 1. Opcional. Tablas y gráficos.
i ) t =1:10
t=t+1
2∗ t
t =[1 , t , 1 2 ]
s =[ t ; 1 . / t ]
s =[ s , [ 0 ; 0 ] ]
t .ˆ2
s .ˆ2
i i ) t =0:0.1:2∗ pi ;
x=s i n ( t ) ;
y=c o s ( t )
z=exp(− t )
plot ( t , x)
plot ( t , y)
p l o t ( t , x , ’ r ’ , t , y , ’ g −∗ ’)
plot (x , y)
h o l d on
axis equal
p l o t (9∗x ,4∗ y )
hold o f f
plot3 (x , y , z )
u=x . ∗ z
plot ( t , u)
i i i ) A=[ t ; x ; y ]
s i z e (A)
s i z e (A, 1 )
s i z e (A, 2 )
p l o t 3 (A( 1 , : ) ,A( 2 , : ) ,A( 3 , : ) )
j=s i z e (A, 2 ) − 9 : s i z e (A, 2 )
C=A( : , j )

Práctica 2. Opcional. Matrices


i ) clear A
A= [ 0 , − 1 , 4 ; 4 , 2 , 1 / 3 ; − 1 , 1 / 2 , − 2 ]
B=[A ( 3 , : ) ; A( 1 , : ) +A ( 2 , : ) ]
v =[1; −1;0]
z=A\v
A∗ z−v
i i ) zeros (3 ,1)
ones ( 2 , 3 )

Práctica 3. Escribir en un fichero instrucciones de MATLAB que tomando como datos x0 , x1 y N , calculen
los términos de la sucesión definida por
½
xn+2 = 73 xn+1 − 23 xn
x0 , x1 dados
para n = 0, . . . , N . Los resultados han de almacenarse en la tabla x. Además haz una gráfica de xn contra
n.
Escribe el fichero miecdiferencias.m de forma que emplee el comando feval y la función definida en
el fichero funcecdif.m, de la siguiente manera
f u n c t i o n y=f u n c e c d i f ( x )
y=7/3∗x (2) −2/3∗ x ( 1 ) ;

Explora el comportamiento de la sucesión para distintas elecciones de x0 y x1 . Comprueba que la solución


general ½ ¾
1
{xn }n≥0 = α + β {2n }n≥0 , ∀α, β ∈ IR
3n n≥0
En particular, considera el caso x0 = 1 y x1 = 1/3. Explica lo que ocurre.
DEPARTAMENTO DE MATEMATICA APLICADA
UNIVERSIDAD COMPLUTENSE DE MADRID
Análisis Numérico de Ecuaciones Diferenciales Ordinarias, Curso 07–08
PRACTICAS. Hoja 2
Métodos Monopaso

Práctica 4. (Estructura general de las prácticas usando rutinas propias de Matlab para resolver
EDO). La ecuación del corazón. Considera la ecuación diferencial x0 = f (t, x)
 0

 x = x2
 10
x2 = −16x1 + 4 sen(2t)

 x (0) = 0
 1
x2 (0) = 2

en el intervalo, [0, 2π]

1. Escribir un fichero tipo función, con el nombre funccorazon.m, para la función de esta ecuación
diferencial, es decir la expresión f (t, x), en concreto:
f u n c t i o n f=f u n c c o r a z o n ( t , x )
f =[x (2); −16∗ x (1)+4∗ s i n ( 2 ∗ t ) ] ;

2. Usar, en la lineas de comandos, las propias rutinas de Matlab para resolver la ecuación numéricamente,
utilizando un método adaptativo de Runge-Kutta de orden 4, ode45. En concreto, escribe
>> [ t , u]= ode45 ( @funccorazon , [ 0 , 2 ∗ p i ] , [ 0 ; 2 ] )
>> [ t , u]= ode45 ( @funccorazon , [ 0 : 0 . 0 1 : 2 ∗ p i ] , [ 0 ; 2 ] )
>> x=u . ’ ;
>> figure (1)
>> subplot (2 ,1 ,1)
>> plot ( t , x (1 ,:))
>> subplot (2 ,1 ,2)
>> plot ( t , x (2 ,:))
>> figure (2)
>> plot (x (1 ,:) , x (2 ,:))

3. Repetir los puntos 1 y 2 de arriba, para el siguiente problema de valor inicial: Ecuación de Van der
Pol: x00 (t) + (x2 (t) − 1)x0 (t) + x(t) = 0, t ∈ [0, 10], con datos iniciales x(0) = 0,1, x0 (0) = 0,2. El fichero
función que contiene la función de la ecuación diferencial se tiene que llamar funcvanderpol.m.
Explora tambien el comportamiento de las soluciones para otros valores inciales.

4. Crear un fichero tipo script llamado mispracticas.m que contenga los datos de entrada del comando
ode45, para cada una de las ecuaciones que vamos a resolver, es decir:
f=@funcvanderpol ; x0 = [ 0 . 1 ; 0 . 2 ] ; i n t e r v a l o = [ 0 , 1 0 ] ; N=1000;

5. Crear un fichero tipo script con nombre misgraficas.m que pinte

a) Si la EDO es escalar: la gráfica de la solución aproximada.


b) Si la EDO es en IR2 o en IR3 : la gráfica de cada una de las componentes en una misma pantalla
usando los comandos subplot, plot y, tras una pausa, pinte en otra ventana la trayectoria de
la solución .
Opcional: Usa el comando title para poner un tı́tulo a la ventana y el comando legend para
indicar la curva en cada subventana. Usa el comando shg para poner la figura en la ventana
delantera.
Código obligatorio de colores: Las gráficas para problemas escalares y las trayectorias para prob-
lemas 2D y 3D, han de pintarse en rojo. Para problemas 2D, las componentes han de pintarse en
rojo y verde, respectivamente. Para problemas 3D las componentes han de pintarse en rojo, verde
y azul respectivamente.
6. Crear un fichero tipo script con nombre testmiode45.m que haga lo siguiente:
i) Lea los datos correspondientes a una ecuación del fichero mispracticas.m. Para esto será nece-
sario comentar en mispracticas.m todas aquellas lineas que no corresponden a esta ecuación. Para
comentar una linea ponemos el sı́mbolo % delante de ella.
ii) Ejecute ode45.m
iii) Pinte las gráficas de la solución haciendo una llamada al fichero misgraficas.m

Práctica 5.
i) Crea un fichero tipo función con MATLAB, con nombre mieuler.m, que implemente el Método de Euler,
evaluando la función de la EDO de un fichero externo.
ii) Crea un fichero tipo script con nombre testmieuler.m que ejecute mieuler.m y pinte las gráficas de
las soluciones haciendo una llamada al fichero misgraficas.m.
Práctica 6. Repite la práctica anterior para el Método de Runge–Kutta de orden 4 (ficheros mirk4.m,
testmirk4.m).
Práctica 7. Repite la práctica anterior para el Método del Trapecio (ficheros mitrap.m, testmitrap.m).
Observación: en cada paso tienes que resolver una ecuación implı́cita z = g(h, x, z). Utiliza el método de
Newton, tienes que incorporar a las variables de entrada jac, itmax, donde jac es el nombre del fichero
con el jacobiano de f, e itmax es el número máximo de iteraciones en el método de Newton.
Práctica 8. Explora, usando el Método de Runge–Kutta de orden 4, y el del trapecio, el comportamiento
de las soluciones de una ecuación rı́gida: x0 (t) = −50(x(t) − cos(t)) en el intervalo 0 ≤ t ≤ π/2, con dato
inicial x(0) = 0, para varias elecciones de pasos h = 25, 40, 50, 100...
½ 00
θ (t) + 2βθ0 (t) + gl sen(θ(t)) = M
Práctica 9. Considera la ecuación del péndulo .
θ(0) = θ0 , θ0 (0) = ω0
i) Suponiendo que M = 0, l = 1m y que g = 9, 8m/s2 explora, usando el Método de Runge–Kutta de orden
4, el comportamiento de las soluciones en el intervalo 0 ≤ t ≤ 10, para varias elecciones de los datos iniciales.
Toma primero el valor β = 0 y posteriormente β = 0,25 y β = 1,5.
Para cada uno de los datos iniciales
½ 00 escogidos, compara los valores encontrados con los obtenidos al
θ (t) + 2βθ0 (t) + gl θ(t) = 0
resolver el problema linealizado .
θ(0) = θ0 , θ0 (0) = ω0
Observa la similitud de las soluciones y trayectorias unicamente cuando los datos iniciales son pequeños.
¿Que ocurre cuando partimos con el péndulo en posición vertical, es decir con θ0 = π, ω0 = 0?.
ii) Toma ahora β = 1/2. Comprueba que si M = 1 entonces θ0 = π/2, ω0 = 0 es un equilibrio del péndulo.
Toma datos iniciales próximos a este equilibrio y varia M con los valores M = 0,9, M = 1 y M = 1,1 y
observa el cambio de comportamiento.
Notación obligatoria: Los ficheros conteniendo las funciones de estas EDOs deben llamarse funcpendu-
lo.m y funcpendulolin.m.
Práctica 10. Para cada uno de los problemas autónomos siguientes explora, usando el Método de
Runge–Kutta de orden 4, el comportamiento de las soluciones en el intervalo 0 ≤ t ≤ 10, para varias
elecciones de los datos iniciales.

1. Ecuación de Van der Pol x00 (t) + α(x2 (t) − β)x0 (t) + x(t) = 0. Considera primero α = 1 y toma
datos iniciales próximos al origen para β = −0,2, β = 0 y β = 0,2. Fija despues β = 1 y aumenta el
valor de α desde α = 1 hasta α = 10.
 0
 x (t) = σ(y(t) − x(t))
2. Sistema de Lorenz y 0 (t) = ρx(t) − y(t) − x(t)z(t) , tomando σ = 10, β = 8/3. Ve aumentando
 0
z (t) = x(t)y(t) − βz(t)
desde ρ = 0,1 a ρ = 30. Observa la dinámica en los valores intermedios ρ = 1, ρ = 13,962 y ρ = 24,74.
Toma ρ = 100,5 y el dato inicial (0, 5, 75) para ver una solución periódica. Manteniendo el dato inicial
mueve ρ entre 99,524 y 100,795 (p.ej. ρ = 99,65) y observa el cambio de dinámica.

Notación obligatoria: Los ficheros conteniendo las funciones de estas EDOs deben llamarse funcdeppre-
sa.m, funccompet.m, funcvanderpol.m, funcduffing.m y funclorenz.m respectivamente.
DEPARTAMENTO DE MATEMATICA APLICADA
UNIVERSIDAD COMPLUTENSE DE MADRID
Análisis Numérico de Ecuaciones Diferenciales Ordinarias, Curso 07–08
PRACTICAS. Hoja 3
Métodos Multipaso

Práctica 11. Crea un fichero tipo función con MATLAB, con nombre miab4.m, que implemente el Méto-
do de Adams-Bashforth de 4 pasos
h
xk+1 = xk + (55f (tk , xk ) − 59f (tk−1 , xk−1 ) + 37f (tk−2 , xk−2 ) − 9f (tk−3 , xk−3 ))
24
evaluando la función de la EDO de un fichero externo e inicializando el método con el Método de Runge–
Kutta de orden 4
Crea un fichero tipo script con nombre testmimiab4.m que ejecute miab4.m y pinte, siguiendo el
Código obligatorio de colores:
a) Si la EDO es escalar: la gráfica de la solución aproximada.
b) Si la EDO es en IR2 o en IR3 : la gráfica de todas las componentes en la misma ventana y, tras una
pausa, pinte en otra ventana la trayectoria de la solución.

Práctica 12. Repite la práctica anterior para el Método de Milne de 4 pasos (y orden 4)

4h
xk+1 = xk−3 + (2f (tk , xk ) − f (tk−1 , xk−1 ) + 2f (tk−2 , xk−2 ))
3
inicializando el método con el Método de Runge–Kutta de orden 4 (ficheros mimilne.m, testmimilne.m).

Práctica 13.
i) Utiliza estos programas para resolver las ecuaciones de la hoja de prácticas anterior.
ii) Compara la eficacia de estos métodos con la de los métodos monopaso ya implementados.

Práctica 14. Usando las ecuaciones del péndulo, péndulo linealizado y Van der Pol observa como el
Método de Milne presenta tendencia a producir oscilaciones espúreas. Los métodos que son débilmente
estables tienden a mostrar este comportamiento. Observa que las oscilaciones desaparecen, en una ventana
de tiempo fijada, si se disminuye el paso adecuadamente.
DEPARTAMENTO DE MATEMATICA APLICADA
UNIVERSIDAD COMPLUTENSE DE MADRID
Análisis Numérico de Ecuaciones Diferenciales Ordinarias, Curso 07–08
PRACTICAS. Hoja 4
Métodos Predicción–Corrección y Adaptativos

Práctica 15. i) Crea el fichero tipo función mieulertr.m que implemente el Método de Predicción–
Corrección, usando como predictor el Método de Euler y como corrector el Método del Trapecio. Inicializa
el método con el de Euler.
ii) Crea el fichero tipo script testmieulertr.m que ejecute mieulertr.m y pinte las gráficas de las soluciones
de acuerdo al fichero misgraficas.m.
iii) Emplea estos programas con las EDOs de ejemplo de hojas anteriores.
Práctica 16. Repite la práctica anterior usando como predictor el el Método de Adams–Bashforth de 4
pasos y como corrector el Método de Adams–Moulton de 3 pasos. Inicializa el método con el de Runge–Kutta
de orden 4.
(ficheros: miab4am3.m y testmiab4am3.m)
Práctica 17. Repite la práctica anterior usando como predictor el el Método de Milne de 4 pasos y como
corrector el Método de Simpson de 2 pasos. Inicializa el método con el de Runge–Kutta de orden 4.
(ficheros: mimilsimp.m y testmimilsimp.m)
Observa como las oscilaciones que manifestaba el método de Milne se ven eliminadas en este método de
predicción–corrección.
Práctica 18.
i) Crea el fichero tipo función mimetadap.m que tomando como datos adicionales el método monopaso,
el orden y la tolerancia, implemente el método adaptativo monopaso, con estimación del error en dos
pasos sucesivos.
ii) Crea el fichero tipo script testmimetadap.m que ejecute mimetadap.m y pinte, siguiendo el Código
obligatorio de colores:
a) Si la EDO es escalar: la gráfica de la solución aproximada.
b) Si la EDO es en IR2 o en IR3 : la gráfica de todas las componentes en la misma ventana y, tras una
pausa, pinte en otra ventana la trayectoria de la solución .
c) la grafica de los pasos empleados
Indicación: utiliza la variable de entrada N, empleada en los métodos monopasos, para definir el paso
inicial del método.
iii) Emplea estos programas con los métodos de Eulery Runge–Kutta de orden 4, con las EDOs de ejemplo
de hojas anteriores.
Práctica 19.
i) Crea el fichero tipo función mirkf45.m que implemente el Método de Runge–Kutta–Fehlberg.
ii) Crea el fichero tipo script testmirkf45.m que ejecute mirkf45.m y pinte, siguiendo el Código obliga-
torio de colores, las mismas gráficas de la práctica anterior.
iii) Emplea estos programas con las EDOs de ejemplo de hojas anteriores.
Práctica 20. i) Considera la ecuación

x0 (t) = x2 (t), x(0) = 1.

Comprueba que la solución exacta es


1
x(t) =
1−t
que es no acotada cuando t → 1.
Usando los métodos de paso constante, resuelve el problema en el intervalo [0,2].
Utiliza ahora un método adaptativo. ¿Qué sucede cerca de la discontinuidad que aparece en t = 1?.
ii) Repite lo anterior para resolver el problema de valor inicial
1 x(t)
x0 (t) = e + cos(x(t) − t), x(0) = 1
10
cuya solución es no acotada, aunque ahora no sabemos el tiempo en el que ocurre.
Notación obligatoria: Los ficheros conteniendo las funciones de estas EDOs deben llamarse func20 1.m
y func20 2.m.
DEPARTAMENTO DE MATEMATICA APLICADA
UNIVERSIDAD COMPLUTENSE DE MADRID
Análisis Numérico de Ecuaciones Diferenciales Ordinarias, Curso 07–08
PRACTICAS. Hoja 5
Problemas de Contorno

Práctica 21.
i) Crea el fichero tipo función midisplin.m que tomando como datos los coeficientes p(t), q(t), r(t) de la
ecuación diferencial implemente el método de disparo lineal para cada una de las condiciones de contorno
siguientes:
x(t0 ) = a, x(T ) = b
x0 (t0 ) = a, x(T ) = b
x(t0 ) = a, x0 (T ) = b
x0 (t0 ) = a, x0 (T ) = b
Indicación: utiliza dos variables de entrada adicionales C1 y C2 respectivamente para indicar cual es la
condición de contorno prescrita en t0 y T respectivamente. Utiliza el convenio de que cuando uno de estos
parámetros es 0, entonces estamos prefijando el valor de la función, mientras que si es 1 entonces estamos
prefijando el valor de la derivada. Como método de resolución de los problemas de valor inicial, emplea el
método de Runge–Kutta de orden 4.
Notación obligatoria: Los ficheros conteniendo las funciones de las dos EDOs necesarias para el método
de disparo deben llamarse funcdisplin1.m y funcdisplin2.m.
ii) Crea el fichero tipo script testmidisplin.m que ejecute midisplin.m y pinte la solución del problema
de contorno y su derivada en una misma ventana.
Código obligatorio de colores: Las componentes han de pintarse en rojo y verde, respectivamente.

Práctica 22. Utiliza los programas anteriores para resolver los siguientes problemas de contorno. Explora
las soluciones modificando las condiciones de contorno.
i) x00 (t) = 4(x(t) − t), 0 ≤ t ≤ 1, x(0) = 0, x(1) = 2.
ii) x00 (t) = 3x0 (t) + 2x(t) + 3 cos(t), 0 ≤ t ≤ 5, x(0) = −2, x0 (5) = 1.
iii) x00 (t) = cos(t)x(t) + t, 0 ≤ t ≤ 10, x0 (0) = −2, x(10) = −1.
iv) x00 (t) = (1 − sen(t))x0 (t) + cos(t)x(t) + sen(t), 0 ≤ t ≤ 1, x0 (0) = −2, x0 (10) = −1.

Práctica 23.
i) Crea el fichero tipo función midispnolin.m que implemente el método de disparo para resolver un
problema no lineal con condiciones de contorno

x(t0 ) = a , x(T ) = b .

Como método de resolución de los problemas de valor inicial, emplea el método de Runge–Kutta de orden 4
para cada valor del parámetro de disparo sk . Interrumpe el algoritmo cuando el error cometido al disparar
con pendiente sk
F (sk ) = x(sk , T ) − b,
sea menor que una cierta tolerancia dada.
Incorpora el Método de la Secante para generar la iteración de sk y calcular un cero de F (s) = 0,
dados s0 y s1
F (sn )
sn+1 = sn − (sn − sn−1 ) .
F (sn ) − F (sn−1 )
Usa como pendiente inicial s0 = (b − a)/(T − t0 ) y s1 = s0 + (b − x(s0 , T ))/(T − t0 ).
ii) Crea el fichero tipo script testmidispnolin.m que ejecute midispnolin.m y pinte la gráfica de la
solución.
Notación obligatoria: El fichero conteniendo la función de la EDO debe llamarse funcdispnolin.m .
Práctica 24. Emplea el programa anterior para los problemas de contorno siguientes
i) x00 (t) = −(x0 (t))2 + x(t) + t, 1 ≤ t ≤ 2, x(1) = 0, x(2) = 2.
ii) x00 (t) = 2x3 (t), 1 ≤ t ≤ 2, x(1) = 1, x(2) = −1.

Práctica 25.
i) Crea el fichero tipo función midiffin.m que tomando como datos los coeficientes p(t), q(t), r(t) de la
ecuación diferencial implemente el método de diferencias finitas para el problema de contorno con condiciones

x(t0 ) = a, x(T ) = b

Indicación: No almacenar la matriz cuadrada que aparece con este método.


ii) Crea el fichero tipo script testmidiffin.m que ejecute midiffin.m y pinte la solución del problema de
contorno.
iii) (Opcional) Modifica el programa principal midiffin.m, de manera que pueda resolver problemas con
las mismas condiciones de contorno que con el método de disparo.

Práctica 26. Emplea el programa anterior para resolver los problemas de contorno con las ecuaciones
lineales de una práctica anterior.

También podría gustarte