You are on page 1of 3

PR

ACTICAS DE C

ALCULO NUM

ERICO III
PR

ACTICA 4: El metodo de Euler explcito y el metodo trapezoidal.


En esta practica implementaremos el metodo de Euler y el trapezoidal para ecuaciones
escalares de primer orden, estudiando su orden de convergencia. Asimismo, implementaremos
el metodo de Euler para sistemas y lo aplicaremos a la resolucion de una importante ecuacion
no-lineal de segundo orden: la que describe el movimiento del pendulo simple.
1 El metodo de Euler
Vamos a crear, en primer lugar, la funcion euler.m que implementa el metodo de Euler
explcito:
y
n+1
= y
n
+ hf(t
n
, y
n
) , n = 0, ..., N , h =
b a
N
Esta funcion tendra la siguiente sintaxis: [t,y]=euler(a,b,yini,N), donde las entradas:
a, b, yini y N tendran los valores numericos asociados con el problema de valores iniciales
a resolver (intervalo [a, b]; valor inicial yini; n umero de puntos N). Las salidas de la funcion
euler.m seran los vectores tiempo t y el vector y conteniendo la solucion aproximada en los
sucesivos instantes temporales.
Crearemos un chero f.m donde estara implementada la funcion f que corresponda en
cada caso.
Se pide lo siguiente:
1. Utilizando el metodo de Euler, resolver el problema:
y

= y , 0 t 3 , y(0) = 1 .
El chero f.m debera en este caso implementar la funcion f(t, y) = y.
Dibujar la solucion para N=16.
Crear un vector de N+1 componentes correspondiente a la solucion exacta y(t) = e
t
en t = {t
0
, t
2
, ..., t
N
} (donde t
0
= a y t
N
= b). Dibujar la solucion exacta en el mismo
graco que la aproximacion de Euler anterior.
2. Crear un vector de N+1 componentes que contenga el error absoluto del metodo en
cada paso y representar en otra gura el error absoluto como funcion de t utilizando el
comando semilogy.
3. Ejecutar el programa para N = 8, 16, 32, 64, 128 y dibujar en un mismo graco los errores
absolutos cometidos en cada caso. Almacenar en un vector los correspondientes errores
maximos para cada valor de N; un comando util para obtener los valores maximos es
max.
Conviene recordar que el modo que tiene MATLAB, por defecto, de presentacion de
n umeros es con 4 decimales. As, obviamente, no podramos distinguir cantidades
inferiores a 0.00005. Es conveniente entonces teclear previamente format short e
antes de calcular el error para as mostrar los valores en notacion cientca.
Estimar el orden de convergencia p
N
del metodo calculando
p
N
=
1
log 2
log

max
1nN
|e
n
|
max
1n2N
|e
n
|

para N = 8, 16, 32, 64 (max


1nN
|e
n
| representa el maximo de los errores absolutos
obtenidos con N pasos). Es consistente con lo que cabra esperar?.
2 El metodo trapezoidal
Vamos ahora a comparar el funcionamiento del metodo de Euler explcito con un metodo
implcito. El metodo trapezoidal responde al algoritmo:
y
n+1
= y
n
+
h
2
(f(t
n
, y
n
) + f(t
n+1
, y
n+1
))
Es decir, en el paso n + 1-esimo hemos de resolver la (generalmente no lineal) ecuacion
g(y
n+1
) y
n+1
y
n

h
2
(f(t
n
, y
n
) + f(t
n+1
, y
n+1
)) = 0 (2.1)
para obtener la incognita y
n+1
.
Llegados a este punto, hemos de optar por un metodo numerico de resolucion de ecuaciones
no lineales (biseccion, secante, Newton, punto jo). En la programacion de nuestro algoritmo
utilizaremos el metodo de Newton, que producira convergencia rapida siempre que el valor
inicial sea proxima a la solucion de la ecuacion (2.1); puesto que se supone que y
n
e y
n+1
seran valores proximos, utilizaremos y
n
como estimacion inicial para iniciar el Newton (otra
opcion puede ser, por ejemplo, utilizar la estimacion que da el metodo de Euler). En su
implementacion sera conveniente que introduzcamos dos parametros: la tolerancia al error
(toln) que jaremos a una valor que nos resulte aceptable (10
8
, por ej.) y el n umero maximo
de iteraciones (itmax) que permitimos en el Newton (50, por ej.). Por otra parte, podemos
observar que, ademas del chero f.m, necesitaremos crear tambien el chero dfy.m, que
implemente f/y en cada caso.
La rutina para este metodo tendra la misma estructura de entradas y salidas que la
anterior y la escribiremos en el chero trap.m.
Se pide:
4. Resolver el problema del apartado 1 utilizando el metodo implcito. Repetir los apartados
1, 2 y 3 anteriores.
3 Aplicacion al pendulo simple
Para resolver numericamente el problema del pendulo simple, necesitaremos modicar la
rutina Euler para que sea aplicable a un sistema de EDOs de primer orden. Se pide construir
tal rutina (que llamaremos eulersis.m).
Aplicaremos entonces la rutina anterior a la resolucion de la EDO que describe el movimiento
de un pendulo simple
L
d
2

dt
2
+ g sin = 0.
Para ello, deniendo =

, escribimos el sistema equivalente

=
g
L
sin
y aplicaremos la modicacion del metodo de Euler (eulersis.m) para resolver el problema
de condiciones iniciales (0) =
m
, (0) = 0; este problema es el de un pendulo simple que
en el instante t = 0 se libera, con velocidad cero, desde su angulo maximo de desplazamiento

m
(es decir, que
m
es la amplitud de oscilacion).
Podemos comparar esta solucion con la solucion analtica del problema:
(t) = 2 arcsin( sn(
0
t + , ))
siendo
0
=

g/L, = sin(
m
/2) y = K(). K es la integral elptica completa de primera
especie (se puede calcular en MATLAB mediante la funcion ellipke(
2
)). Por ultimo, sn(u, )
es una funcion elptica de Jacobi, que se puede evaluar mediante la funcion de MATLAB
ellipj(u,
2
).
Deberemos estudiar como es la comparacion de la aproximacion dada por el metodo
de Euler con la solucion analtica. Para ello, se sugiere animar el movimiento del pendulo
utilizando la solucion numerica y comparar esta animacion con la de la solucion analtica.
Para animar el movimiento del pendulo utilizaremos la funcion penanim, que esta disponible
en la pagina web de la asignatura.
Tambien sera conveniente representar gracamente las dos soluciones.
4 Una modicacion del metodo de Euler
Escribiendo el metodo de Euler de forma explcita para el pendulo simple tenemos:

n+1
=
n
h
2
0
sin
n

n+1
=
n
+ h
n
Se propone implementar la siguiente modicacion, conocida como metodo de Euler-
Cromer:

n+1
=
n
h
2
0
sin
n

n+1
=
n
+ h
n+1
y comparar los resultados obtenidos mediante este metodo, con los dos metodos anteriores
(Euler y solucion analtica):

You might also like