Pr‡ctica 6: Resoluci—n NumŽrica de Ecuaciones Diferenciales
MŽtodo de Euler
El mŽtodo de Euler es uno de los mŽtodos m‡s conocidos para la aproximaci—n numŽrica de ecuaciones diferenciales aunque en la pr‡ctica no suele utilizarse habitualmente a causa de su imprecisi—n y porque requiere muchas operaciones, siendo sustituido por el mŽtodo de Runge-Kutta, Taylor, Milne, Adams...
Ofrece como ventaja el hecho de que no utiliza derivadas de la funci—n, pero hemos de realizar muchas operaciones para obtener un resultado aceptable.
La expresi—n que representa el mŽtodo de Euler es la siguiente:
![]()
As’, segœn el valor de la
que tomemos
podremos aproximar m‡s o menos el resultado real; as’, si tomamos valores
peque–os de la
estaremos
buscando m‡s puntos y por lo tanto una mejor aproximaci—n.
En esta pr‡ctica la funci—n a aproximar es la siguiente:
![]()
De la cual conocemos su soluci—n anal’tica:
![]()
Con estos datos anteriores implementaremos
un algoritmo para calcular distintas aproximaciones de una funci—n en un rango
de puntos [a,b]. El error que consideraremos ser‡ el m—dulo entre
aproximado y
real, ya que
conocemos su valor. As’ el error aumentar‡ a lo largo de las iteraciones.
De este modo hemos implementado el algoritmo
del mŽtodo de Euler para resolver esta ecuaci—n diferencial y en principio
hemos obtenido los siguientes valores, representados mediante el programa
gr‡fico GnuPlot. En principio hemos tomado como
el valor 0.1 y
el rango ser‡ [0,1]. De este modo obtendremos diez valores, y observaremos que
el error que se produce es bastante grande, con lo cual no obtenemos una buena
aproximaci—n. Adem‡s con su representaci—n junto con la funci—n de la soluci—n
real podemos comprobar este hecho gr‡ficamente:

Seguidamente aplicaremos el algoritmo del
mŽtodo de Euler al mismo problema pero utilizando 100 puntos, con lo cual el
valor de
ser‡ 0.01 y el
rango seguir‡ siendo [0,1]. De este modo observamos que el error es mucho menor
y junto con la gr‡fica podemos concluir que se trata de una buena aproximaci—n.

A continuaci—n aplicaremos el algoritmo a un problema r’gido como es el siguiente:
![]()
Del cual tambiŽn conocemos su soluci—n real:
![]()
As’ hemos implementado el algoritmo anterior
para resolver esta ecuaci—n diferencial, obteniendo los siguientes valores
representados mediante el programa gr‡fico GnuPlot. En principio hemos tomado
como
el valor 0.1 y
el rango ser‡ [0,1]. De este modo obtendremos 10 valores; con su representaci—n
junto con la funci—n de la soluci—n real podemos comprobar que no nos encontramos
ante una buena aproximaci—n:

A continuaci—n modificaremos el algoritmo
del mŽtodo de Euler para resolver esta ecuaci—n diferencial tomando como
el valor 0.01 y
el rango [0,1]. De este modo obtendremos 100 valores; con su representaci—n
junto con la funci—n de la soluci—n real podemos comprobar que nos encontramos
ante una aproximaci—n mejor:

MŽtodo de Runge-Kutta
Los mŽtodos de Runge-Kutta se desarrollaron
para evitar el c‡lculo de derivadas de mayor orden que el que puede incluir el
mŽtodo de Taylor. En lugar de estas derivadas se emplean valores extra de la
funci—n dada
, en una forma que reproduce la precisi—n de un polinomio de
Taylor. Con este mŽtodo conseguimos una mejor aproximaci—n que con el mŽtodo de
Euler. Este podemos mejorarlo segœn el orden sobre el cual apliquemos el
mŽtodo. El que nosotros vamos a utilizar es el de orden 4 –ya que emplea
cuatro ecuaciones. Las formulas que emplea Žste mŽtodo son las siguientes:
![]()
Donde:

Con estos datos anteriores implementaremos
un algoritmo para calcular distintas aproximaciones de una funci—n en un rango
de puntos [a,b]. El error que consideraremos ser‡ el m—dulo entre
aproximado y
real, ya que
conocemos su valor. As’ el error aumentar‡ a lo largo de las iteraciones.
A continuaci—n realizaremos el algoritmo del mŽtodo de Runge-Kutta aplicado sobre la ecuaci—n diferencial propuesta en la pr‡ctica:
![]()
De la cual conocemos su soluci—n anal’tica:
![]()
Desde este algoritmo hemos obtenido
distintas gr‡ficas segœn los datos introducidos. En primer lugar hemos
implementado el algoritmo inicializando el dato
a 0.1 y el rango
[0,1] y hemos obtenido un fichero de datos que representado en el GnuPlot nos
resulta la siguiente gr‡fica, de la cual deducimos que este mŽtodo realiza una
aproximaci—n mucho m‡s fiable a la soluci—n real que el que obten’amos de aplicar
el mŽtodo de Euler. Observamos tambiŽn que el error es mucho menor, incluso
llegando a ser nulo.

A continuaci—n aplicaremos el algoritmo de Runge-Kutta a un problema r’gido como es el siguiente:
![]()
Del cual tambiŽn conocemos su soluci—n real:
![]()
As’ hemos implementado el algoritmo del
mŽtodo de Runge-Kutta para resolver esta ecuaci—n diferencial, obteniendo los
siguientes valores representados mediante el programa gr‡fico GnuPlot. En
principio hemos tomado como
el valor 0.1 y
el rango ser‡ [0,1]. De este modo obtendremos 10 valores; con su representaci—n
junto con la funci—n de la soluci—n real podemos comprobar que no nos
encontramos ante una buena aproximaci—n ya que se produce un error muy grande.

A continuaci—n modificaremos el algoritmo
del mŽtodo de Runge-Kutta para resolver esta ecuaci—n diferencial tomando como
el valor 0.01 y
el rango [0,1]. De este modo obtendremos 100 valores; puesto que no se produce
pr‡cticamente error y con su representaci—n junto con la funci—n de la soluci—n
real podemos comprobar que nos encontramos ante una aproximaci—n mejor:
