Descargar

Una rutina en C++ para resolver ecuaciones diferenciales


Partes: 1, 2

  1. Abstract
  2. Introducción
  3. Ecuaciones diferenciales de primer orden
  4. Resolución numérica a un sistema de acoplado de N ecuaciones diferenciales usando el método Runge–Kutta
  5. Ecuaciones diferenciales de segundo orden
  6. Conclusiones
  7. Referencias
  8. Apéndice

Implementación de una rutina en C++ para la resolución de ecuaciones diferenciales ordinarias de primer y segundo orden usando el método numérico de Runge–Kutta y de Adams–Bashforth Moulton

Abstract

El siguiente texto muestra el uso del método numérico Runge–Kutta de cuarto orden y el método multipaso predictor de Adam-Bashforth Moulton de cuarto orden para la resolución de Ecuaciones D

iferenciales. Se implementó una rutina en C++ y se calculó la solución numérica a varios problemas que se encuentra en la literatura con el propósito de medir la eficiencia del algoritmo. Se esperan, de los lectores, valiosos comentarios y críticas, pues serán de gran ayuda para la relización de futuras versiones del programa.

Palabras Clave: Métodos Numéricos, Runge Kutta , Adam–Bashforth Moulton, Ecuaciones Diferenciales, C++

Introducción

Existe una gran variedad de métodos numéricos para resolver ecuaciones diferenciales p. ej. Regla del Trapecio, Regla del Punto Medio, Métodos Predictores–Correctores, Método de Euler, etc. Los softwares que existen, que se enfocan a resolver ecuaciones diferenciales, poseen una interfaz gráfica al usuario, la cual facilita la resolución de las ecuaciones diferenciales. Estos software, aunque son fáciles de usar, tienen como gran defecto el que se requiere una cantidad considerable de memoria. En muchos casos, el usar programas tan pesados, refiriéndonos a recursos computacionales, es como el intentar matar una mosca con un cañón. En el presente artículo, se muestra una rutina creada en C++ para resolver ecuaciones diferenciales de la forma:

edu.red

y de la forma:

edu.red

usando el método numérico Runge–Kutta de cuarto orden y el método Adam-Bashforth Moulton de cuarto orden. El programa creado en el lenguaje C++, lee de un archivo externo la función que se pretende resolver expresada en forma de cadena de texto. Esto hace que el programa sea flexible, pues no hay necesidad de modificar y compilar el código fuente cada vez que se pretenda evaluar una función diferente, sólo es necesario abrir el archivo externo y remplazar la función existente por la función nueva a evaluar. Para la implentación del programa se utilizo la libreria gratuita function parser for C++ v2.2 por Warp.

Ecuaciones diferenciales de primer orden

Las ecuaciones diferenciales de primer orden, relacionan la primera derivada con una función f(x, y) y solo es necesario una condición inicial para resolver el problema.

edu.red(1)

El método de Runge–Kutta para la solución ecuaciones diferenciales de primer orden es:

edu.red

En el algoritmo que se define en la ecuación (2),

edu.red

El método de Runge–Kutta requiere de cuatro evaluaciones por paso, ver ecuaciones (3), (4), (5) y (6). El otro método numérico que se presenta para resolver ecuaciones diferenciales de primer orden, es el de Adam-Bashforth–Moulton de cuarto orden, el cual se define como:

edu.red

El primer ejemplo que se resuelve es el siguiente:

edu.red(10)

usando ambos métodos numéricos, Runge–Kutta y Adam-Bashforth–Moulton, se encontró la solución numérica y(x) a la ecuacion diferencial (10), en el rango [0, 10] con un tamaño de paso h=0.001. El programa guarda el resultado en un archivo, la solución obtenida entonces se puede graficar usando cualquier software graficador, que dados los puntos haga la gráfica. En este proyecto se utilizó el graficador gnuplot.

edu.red

Solución numérica obtenida al resolver la ecuación diferencial (10) usando el algoritmo de Runge–Kutta (en azul), y el de Adam-Bashforth–Moulton (en verde). Se usó un tamaño de paso h=0.001. La solución analítica se muestra en color rojo

La imágen superior muestra, que ambos métodos numéricos dan una buena solución a la ecuacion diferencial (10). Para medir la efectividad del algoritmo se calculó el error porcentual (porcentaje de error entre la solución real y la solución aproximada) usando:

edu.red(11)

en donde v representa el valor real y el vapprox es el valor obtenido al usar el método numérico. En la siguiente imágen se muestra el error porcentual obtenido al implementar los dos métodos numéricos, Runge–Kutta y Adam-Bashforth–Moulton, para obtener la solución numérica a la ecuación diferencial (10)

Partes: 1, 2
Página siguiente