Está en la página 1de 9

Métodos numéricos para solución de sistema de ecuaciones lineales

Juan Jose Mejia Gonzalez,


1
Universidad de Antioquia, calle 67 No. 53 – 108 Medellín, Colombia

juan.mejiag1@udea.edu.co

Resumen.

En este artículo se presenta el diseño y desarrollo de un algoritmo que permite hallarla solución de cualquier
sistema de ecuaciones lineal utilizando dos métodos numéricos, la eliminación Gauss-Jordan y el método
iterativo de Jacobi. El algoritmo se desarrolló en lenguaje Python utilizando diversas librerías que permitirían
minimizar la extensión del código y facilitar el proceso. El objetivo se centró en probar los dos métodos y
analizar los pros y contras de cada uno para establecer que método es más recomendable utilizar dado un
caso en particular. 5 ejemplos son mostrados, ilustrando diferentes casos. Este trabajo muestra que el método
iterativo es mas eficiente, pero requiere que la matriz de sistema sea estrictamente diagonalmente dominante,
mientras que el método directo de Gauss-Jordan tarda mas en mostrar la solución y puede consumir mucha
memoria, pero sirve para todos los casos de sistemas de ecuaciones lineales de cualquier orden.

Palabras clave: sistema de ecuaciones lineales, Python, métodos numéricos.

1 Introducción

En matemáticas, un sistema de ecuaciones algebraicas es un conjunto de ecuaciones con más de


una incógnita que conforman un problema matemático que consiste en encontrar los valores de
las incógnitas que satisfacen dichas operaciones.

En un sistema de ecuaciones algebraicas, las incógnitas son valores numéricos menores a la


constante (o más generalmente elementos de un cuerpo sobre el que se plantean las
ecuaciones), mientras que en una ecuación diferencial las incógnitas son funciones o
distribuciones de un cierto conjunto definido de antemano. Una solución de dicho sistema es
por tanto, un valor o una función que substituida en las ecuaciones del sistema hace que éstas se
cumplan automáticamente sin que se llegue a una contradicción. En otras palabras el valor que
reemplazamos en las incógnitas debe hacer cumplir la igualdad del sistema.

Dentro de los métodos actuales se pueden encontrar dos principales tipos de métodos: los
métodos directos y los métodos iterativos. Los primeros hacen alusión a las soluciones de tipo
matricial y reducción de ecuaciones, mientras que los segundos se refieren a métodos que
realizan aproximaciones a partir de una aproximación inicial. El desarrollo de métodos para
encontrar solución a sistemas lineales es muy importante puesto que se presenta en gran
cantidad de problemas de la ingeniería y la ciencia.

El objetivo de este trabajo es el desarrollo de un método directo, llamado método de Gauss-


Jordan y uno iterativo, llamado método de Jacobi, que permitan la resolución de gran variedad
de sistemas de ecuaciones lineales.

2 Metodología
Un sistema de ecuaciones se resuelve por el método de Gauss cuando se obtienen sus soluciones mediante la
reducción del sistema dado a otro equivalente en el que cada ecuación tiene una incógnita menos que la anterior.
2
El método de Gauss transforma la matriz de coeficientes en una matriz triangular superior. El método de Gauss-
Jordan continúa el proceso de transformación hasta obtener una matriz diagonal.

Para realizar la reducción de filas en una matriz, se usa una secuencia de operaciones de fila elementales para
modificar la matriz hasta que la esquina inferior izquierda de la matriz se llene con ceros, tanto como sea
posible. Hay tres tipos de operaciones de fila elementales:

- Intercambiando dos filas.


- Multiplicando una fila por un número distinto de cero.
- Agregar un múltiplo de una fila a otra fila.

Usando estas operaciones, una matriz siempre se puede transformar en una matriz triangular superior, y de
hecho una que está en forma escalonada por filas.

Por otro lado, en el caso del método iterativo de Jacobi, la base del método consiste en construir una sucesión
convergente definida iterativamente. El límite de esta sucesión es precisamente la solución del sistema. A
efectos prácticos si el algoritmo se detiene después de un número finito de pasos se llega a una aproximación al
valor de x de la solución del sistema. En este trabajo, se establece 500 como el número máximo de iteraciones y
se le da al usuario la posibilidad de ingresar una tolerancia, precisamente para que cuando la distancia entre el
valor actual y el anterior sea menor a la tolerancia, se pare el método.

La sucesión se construye descomponiendo la matriz del sistema A en la forma siguiente:

A=D+ R

donde  D es una matriz diagonal y  R , es la suma de una matriz triangular inferior L  y una matriz triangular
superior U . Partiendo de  Ax=B , podemos reescribir dicha ecuación como:
x=D −1 ( b−Rx )

Si aii ≠ 0 para cada i. Por la regla iterativa, la definición del Método de Jacobi puede ser expresado de la forma:
x k+1=D −1 ( b−R x k )

donde k es el contador de iteración.


El método de Jacobi siempre converge si la matriz A es estrictamente diagonal dominante y puede converger
incluso si esta condición no se satisface.

2.1 Código

Ilustración 1. librerías usadas en el programa

Para la implementación del código, se usó el lenguaje de programación Python debido a sus potentes módulos.
primero se importan los módulos que se usarán, estos se muestran en la ilustración 1

A continuación, se muestra el paso a paso del código:

1. Preguntar por el método a usar


El usuario ingresa el método que desea usar.
3

2. Definir dimensión o el orden del sistema

3. Decidir si ingresara el sistema manual o lo hará aleatoriamente


El usuario decide si prefiere ingresar el sistema de forma manual o crear un sistema que genere los
coeficientes de forma aleatoria. Esto le permitirá realizar diversas comparaciones entre los dos
métodos.

4. Definir la matriz A
En caso de que se desee ingresar los coeficientes manualmente, la función matriz_usuario devolverá la
matriz A necesaria para los dos métodos.

5. Definir el vector solución b


La función vector_solucion permite al usuario ingresar el vector b requerido para los dos métodos.

6. Definir semilla y tolerancia (en caso de Jacobi)


En caso de que se haya seleccionado el método de Jacobi, se pedirá el valor de semilla y la tolerancia.
Esta última es importante para definir la precisión que se quiere en la respuesta.

7. Uso del método seleccionado


Con los 6 pasos anteriores, se tienen todos los parámetros necesarios para cualquiera de los 2 métodos.
Enviándole estos parámetros a la función del método seleccionado, este empezara a calcular el vector x
de n orden que soluciona el sistema de ecuaciones lineales Ax=B y, enviara los resultados a la
función resultados, que mostrara en pantalla la solución arrojada por el método empleado en Python y
la solución del sistema de ecuaciones que arroja la librería numpy para efectos de comparación entre
una librería tan potente como numpy y el código implementado.

3 Resultados

Se emplearon 4 ejemplos en los que se trató de encerrar la mayoría de las posibilidades en los
sistemas de ecuaciones lineales, desde sistema no dominante, a usar dos ejemplos aleatorios.

3.1. Ejemplo 1

Para el primer ejemplo, se seleccionó un sistema de ecuaciones lineales de dimensión 5, como se muestra en la
ilustración 3. Este sistema no es diagonalmente dominante. Para este primer ejemplo se emplearon ambos
métodos. Los resultados del método directo se muestran en la ilustración 3, mientras que los del método
iterativo se muestran en la ilustración 4.
4

Ilustración 2. Datos de entrada requeridos por el programa para el primer ejemplo

Ilustración 3. Datos de salida usando el método directo Gauss-Jordan


5

Ilustración 4. Resultados del ejemplo 1 usando el método de Jacobi

3.2. Ejemplo 2
Para el segundo ejemplo, se generó una matriz cuadrada de dimensión 8, la cual se generó aleatoriamente por el
programa, al igual que el vector solución “b”. Se hizo uso del método directo Gauss-Jordan para su solución.
6

Ilustración 5. Matriz del ejemplo 2

Ilustración 6. solución del ejemplo 2

3.3. Ejemplo 3
7
En este ejemplo, se generó la matriz, el vector solución y la semilla de forma aleatoria para un sistema de
ecuaciones de orden 8. Esta vez, la matriz es diagonalmente dominante y se hace uso del método iterativo de
Jacobi.

Ilustración 7. Matriz aleatoria generada por el programa para el ejemplo 3

Ilustración 8. Vector aleatorio generado por el sistema, al igual que la semilla.


8

Ilustración 9. numero de iteraciones y el vector solución

Ilustración 10. Solución del sistema.

3.4. Ejemplo 4
Para el ejemplo 4 se generó un sistema de ecuaciones lineales de orden 100 usando el método directo. El tiempo
que requirió la solución se muestra en la ilustración 12.

Ilustración 11.Datos de entrada para el ejemplo 4.


9

Ilustración 12. tiempo que tomo el método para solucionar el sistema.

3.5. Ejemplo 5
Para el ejemplo 5 se generó un sistema de ecuaciones lineales de orden 100 usando el método iterativo. El
tiempo que requirió la solución se muestra en la ilustración 14.

Ilustración 13. Datos de entrada ejemplo 5

Ilustración 14. tiempo que tomo el método para solucionar el sistema.

4 Conclusiones y análisis

Como se ve en la ilustración 4, el método directo arroja una solución idéntica a la solución de la librería numpy,
mientras que el método iterativo Gauss-Jordan no logra converger luego de 500 iteraciones. De hecho, cada
iteración se aleja más de la respuesta propuesta por la librería numpy. Se debe principalmente a que la matriz
ingresada para este ejemplo no es diagonalmente dominante, por lo tanto, no se pudo garantizar la convergencia
del método.

Los métodos directos son los más confiables a la hora de buscar una solución precisa de un sistema lineal de
cualquier tipo. Sin embargo pueden llegar a presentar desventajas en problemas de uso de memoria y eficiencia
en matrices de gran tamaño, como pudo observarse en el ejemplo 5, que para solucionar un sistema de
ecuaciones de gran tamaño (orden 100), se demoró 4.5 veces más que el método iterativo.

Por otro lado, en el caso del método iterativo, aunque más rápido y eficiente, solo se garantiza su convergencia
cuando la matriz es estrictamente diagonalmente dominante. Como pudo verse en el ejemplo 2, el método no
logro encontrar una solución para un sistema que no era diagonalmente dominante.

Referencias
1. Método de Jacobi - Wikipedia, la enciclopedia libre. (2021). Retrieved 25 April 2021, from
https://es.wikipedia.org/wiki/M%C3%A9todo_de_Jacobi
2. Gaussian elimination - Wikipedia. (2021). Retrieved 25 April 2021, from
https://en.wikipedia.org/wiki/Gaussian_elimination

También podría gustarte