Artículo |
Solución de Ecuaciones por Técnicas Numéricas |
Autor / Fuente |
Harvey Triana / Métodos Númericos, Apostol |
Tema |
Matemática aplicada e Ingeniería |
Actualización |
Septiembre 20 de 1997 |
Descripción |
Solucióna ecuaciones (funciones f(x)) por técnicas numéricas. Métodos de Intervalo de Bisección y Derivada de Newton. |
Las ecuaciones cuya solución algebraica es compleja, o no es posible, es un interesante tema de los métodos numéricos y por ende de la informática. También es fundamental en problemas de ingeniaría. A continuación les presento dos métodos aplicados tradicionalmente.
Búsqueda Binaria
Al algoritmo es similar al de búsqueda de un nombre en un directorio telefónico, abriendo sucesivamente por mitades hasta llegar al punto. También es conocido como intervalo de bisección. Para la efectividad de este método, es necesario que en un intervalo {x1, x2}, la función continua f(x) cambie de signo. La ecuación de recurrencia es:
x = (x2 - x1) / 2.0
El código que les presento en este articulo va más allá al explorar todos los cambios de signo en un intervalo de exploración y se calculan todas las raíces en el mismo. El Function ScanSngChange hace esto y devuelve el número de raíces encontradas en el intervalo.
Existe un método que lo conozco como Regula-Fals que también requiere de un intervalo de cambio de signo, pero a diferencia del método de bisección, es más rápido. La formula re recurrencia es :
x = [ x1| f(x2) | + x2| f(x1) | ]/ [ | f(x1) | + | f(x2) | ]
Note que se usa el valor absoluto de los valores de la función. El Function ScanSngChange aplicará también en este caso. Solo reemplace la llamada a la función GetRootInterval. Queda de tarea J .
Algoritmo de Newton
Apología al Cálculo numérico, el algoritmo de newton es una técnica que no requiere de intervalo de cambio de signo, a cambio requiere un valor inicial y la derivada explícita de la función f(x). La ecuación de recurrencia es:
x = xo - f(x) / f '(x)
Encuentra el código en el procedimiento GetRootNewton. En realidad no hay que preocuparse mucho por el valor inicial, xo, pues la respuesta es rápidamente hallada. Si la función no tiene una raíz, la derivada es nula en algún punto, o la función no es continua, se producirá un error interceptado.
¿ Cuándo emplear una u otra ?
Considere la siguiente regla. No se puede saber con certeza en que intervalo explorar una función. Por ejemplo, por razones de dominio de la función o simplemente por desconocer el comportamiento de la curva. En este caso es conveniente el algoritmo de Newton.
La función tiene una derivada compleja. En este caso no queda más remedio que investigar un intervalo. Otro caso es que la función tenga múltiples raíces, caso en el cual el algoritmo de Newton encuentra la más próxima al valor inicial que se le paso como argumento.
Por supuesto, existirán casos en que ninguno de los métodos tendría aplicación. También, la función podría no tener raíz alguna.
La función f
Es un buen momento para entablar una cuestión que aún no he podido solucionar con satisfacción: Quisiera tener la capacidad de cambiar el contenido de un procedimiento Function sin afectar los llamados a es función.
En otras palabras, Una ecuación no puede ser dato de entrada. Si quiere usar este código para solucionar una ecuación particular, debe reemplazar el código del Function f (y el de df) para especificar su ecuación. Lo que he hecho en mis programas, que emplean más de una función (normalmente con coeficientes que varían), es escribir un Select Case e incluir el caso como parámetro de f. ¿ Es posible colocar como parámetro el nombre de un Function ?.
Código y Ejemplo
El código de este articulo incluye un módulo de un sencillo ejemplo con salida a la ventana Debug. El siguiente vínculo baja éste artículo, el código del mismo y su ejemplo: « Download ».
Harvey Triana
Envíe sus comentarios a:
[email protected]
Derechos libres de reutilización solo para programación.