por William Read
Un sistema de n ecuaciones lineales simultáneas con n incógnitas tiene una solución única si las n ecuaciones son linealmente independientes. en ese caso el determinante de la matriz de coeficientes es diferente de cero.
Cuando el sistema es pequeño, la solución se puede obtener por métodos manuales sencillos. Sistemas mas grandes hacen uso de algoritmos bien conocidos y desarrollados como los métodos directos del algoritmo de Gauss y derivados o por métodos iterativos.
En ingeniería aparecen frecuentemente sistemas de ecuaciones lineales simétricos grandes que además son positivos definidos con términos predominantes en la diagonal principal. Estos sistemas son suceptibles de resolverse con algoritmos computacionales sencillos y eficientes, en especial cuando éstos son simétricos alrededor de la diagonal prinipal.
Además existen los sistemas simétricos en banda para los que se han desarrollado técnicas computacionales específicas que hacen el proceso aún mas eficiente. La idea es aprovechar el almacenamiento de coeficientes al máximo.
Como el proceso de solución de los S.S. en B. se basa en la reducción primeramente a una matriz triangular y en esta reducción cada fila de la matriz modifica a las filas por debajo de ella, el caracter de en banda implica que solamente ibanda ecuaciones serán modificadas por debajo de cada fila. Esto conduce a métodos de solución por bloques que permiten resolver sistemas aún mas grandes, llevando a la memoria central cada vez el bloque a resolver desde la memoria periférica (disco duro, etc.).
En todos estos casos, el almacenamiento de la matriz se efectúa en arreglos matriciales, por lo general, con dos índices.
En muchas ocasiones, las matrices simétricas en banda se pueden catalogar como escasamente pobladas, es decir, contienen mas términos iguales a cero que términos diferentes de cero. Con esta premisa en mente el autor desrrolló en 1992 un algoritmo modificado para excluír los ceros del almacenamiento de los términos de la matriz, evitándo al mismo tiempo las operaciones innecesarias por ese concepto.
Así nació la idea de aplicar el concepto del árbol binario en vez de la matriz. Usando un árbol de raíces de árboles se consigue el equivalente a la matriz de dos índices. La búsqueda es super-eficiente: buscar la fila es encontrar la raíz del árbol de columnas, los términos cero dan nil y no efectúan operaciones. Claro que hubo que programar una cantidad de funiones de apoyo adicionales, pero éstas resultaron sencillas y poderosas al apoyarse en algoritmos recursivos.
Para probar el método, programamos la construcción de un sistema de ecuaciones todo 10.0 en la diagonal principal, todo 1.0 a ambos lados de la diagonal principal; los términos de mano derecha dan la suma de los coeficientes de la fila. La solución debe ser todo 1.0 en el vector resultante.
Ponemos aquí una versión escrita en Delphi y comprimida en rar para los lectores que desen experimentar; el archivo se llama "BlessTest" (de Banded Linear Equation System Solver). Si a algún aficcionado a la programación le interesa, le hacemos llegar archivos bless.h y bless.dll para programar en c++. escribirnos a info@ingenieriaread.net .
Cuando el sistema es pequeño, la solución se puede obtener por métodos manuales sencillos. Sistemas mas grandes hacen uso de algoritmos bien conocidos y desarrollados como los métodos directos del algoritmo de Gauss y derivados o por métodos iterativos.
En ingeniería aparecen frecuentemente sistemas de ecuaciones lineales simétricos grandes que además son positivos definidos con términos predominantes en la diagonal principal. Estos sistemas son suceptibles de resolverse con algoritmos computacionales sencillos y eficientes, en especial cuando éstos son simétricos alrededor de la diagonal prinipal.
Además existen los sistemas simétricos en banda para los que se han desarrollado técnicas computacionales específicas que hacen el proceso aún mas eficiente. La idea es aprovechar el almacenamiento de coeficientes al máximo.
Como el proceso de solución de los S.S. en B. se basa en la reducción primeramente a una matriz triangular y en esta reducción cada fila de la matriz modifica a las filas por debajo de ella, el caracter de en banda implica que solamente ibanda ecuaciones serán modificadas por debajo de cada fila. Esto conduce a métodos de solución por bloques que permiten resolver sistemas aún mas grandes, llevando a la memoria central cada vez el bloque a resolver desde la memoria periférica (disco duro, etc.).
En todos estos casos, el almacenamiento de la matriz se efectúa en arreglos matriciales, por lo general, con dos índices.
En muchas ocasiones, las matrices simétricas en banda se pueden catalogar como escasamente pobladas, es decir, contienen mas términos iguales a cero que términos diferentes de cero. Con esta premisa en mente el autor desrrolló en 1992 un algoritmo modificado para excluír los ceros del almacenamiento de los términos de la matriz, evitándo al mismo tiempo las operaciones innecesarias por ese concepto.
Así nació la idea de aplicar el concepto del árbol binario en vez de la matriz. Usando un árbol de raíces de árboles se consigue el equivalente a la matriz de dos índices. La búsqueda es super-eficiente: buscar la fila es encontrar la raíz del árbol de columnas, los términos cero dan nil y no efectúan operaciones. Claro que hubo que programar una cantidad de funiones de apoyo adicionales, pero éstas resultaron sencillas y poderosas al apoyarse en algoritmos recursivos.
Para probar el método, programamos la construcción de un sistema de ecuaciones todo 10.0 en la diagonal principal, todo 1.0 a ambos lados de la diagonal principal; los términos de mano derecha dan la suma de los coeficientes de la fila. La solución debe ser todo 1.0 en el vector resultante.
Ponemos aquí una versión escrita en Delphi y comprimida en rar para los lectores que desen experimentar; el archivo se llama "BlessTest" (de Banded Linear Equation System Solver). Si a algún aficcionado a la programación le interesa, le hacemos llegar archivos bless.h y bless.dll para programar en c++. escribirnos a info@ingenieriaread.net .
Tengo desarrollado un método para resolver sistemas simétricos de ecuaciones lineales y en base a esta solución también resolver cualquier sistema lineal de ecuaciones de n ecuaciones linealmente independientes con n incógnitas. angel.villota@epn.edu.ec, apvillota@espe.edu.ec
ResponderEliminarLas ecuaciones son importantes para cualquier calculo en la ingenieria, son un parte logica del individuo. Todos los humanos usamos las ecuaciones de una forma u otra. Aprender como Resolver Ecuaciones es algo bien interesante y divertido, gracias profegracias por el aporte
ResponderEliminarLas ecuaciones son importantes para cualquier calculo en la ingenieria, son un parte logica del individuo. Todos los humanos usamos las ecuaciones de una forma u otra. Aprender como Resolver Ecuaciones es algo bien interesante y divertido, gracias profegracias por el aporte
ResponderEliminar