Resolviendo Sistemas de Ecuaciones Lineales con Python's Numpy

Dos o más ecuaciones lineales con el mismo conjunto de variables se denominan sistema de ecuaciones lineales. Podemos resolver esas variables en Python con Numpy.

La biblioteca entumecido se puede utilizar para realizar una variedad de operaciones matemáticas/científicas, como productos escalares y cruzados de matrices, encontrar valores de seno y coseno, [Transformada de Fourier](https:/ /en.wikipedia.org/wiki/Fourier_transform) y manipulación de formas, etc. La palabra Numpy es una notación abreviada para "Numerical Python".

En este artículo, verá cómo resolver un sistema de ecuaciones lineales utilizando la biblioteca Numpy de Python.

¿Qué es un Sistema de Ecuaciones Lineales?

Wikipedia define system_of_linear_equations como:

En matemáticas, un sistema de ecuaciones lineales (o sistema lineal) es una colección de dos o más ecuaciones lineales que involucran el mismo conjunto de variables.

El objetivo final de resolver un sistema de ecuaciones lineales es encontrar los valores de las variables desconocidas. Aquí hay un ejemplo de un sistema de ecuaciones lineales con dos variables desconocidas, x e y:

Ecuación 1:

1
2
4x  + 3y = 20
-5x + 9y = 26

Para resolver el sistema anterior de ecuaciones lineales, necesitamos encontrar los valores de las variables x e y. Hay varias formas de resolver un sistema de este tipo, como la eliminación de variables, la regla de Cramer, la técnica de reducción de filas y la solución matricial. En este artículo cubriremos la solución matricial.

En la solución matricial, el sistema de ecuaciones lineales a resolver se representa en forma de matriz AX = B. Por ejemplo, podemos representar la Ecuación 1 en forma de matriz de la siguiente manera:

1
2
3
4
5
6
7
8
A = [[ 4   3]
     [-5   9]]

X = [[x]
     [y]]

B = [[20]
     [26]]

Para encontrar el valor de las variables x e y en la Ecuación 1, necesitamos encontrar los valores en la matriz X. Para hacerlo, podemos tomar el producto escalar de la inversa de la matriz ‘A’ y la matriz ‘B’ como se muestra a continuación:

1
X = inverse(A).B

Si no está familiarizado con cómo encontrar el inverso de una matriz, eche un vistazo a este enlace para entender cómo [encontrar el inverso] manualmente (https://www.mathsisfun.com/algebra/matrix-inverse.html) de una matriz. Para entender el producto escalar de matrices, consulta Este artículo.

Resolver un sistema de ecuaciones lineales con números {#resolver un sistema de ecuaciones lineales con números}

De la sección anterior, sabemos que para resolver un sistema de ecuaciones lineales, necesitamos realizar dos operaciones: inversión de matriz y un producto escalar de matriz. La biblioteca Numpy de Python admite ambas operaciones. Si aún no ha instalado la biblioteca Numpy, puede hacerlo con el siguiente comando pip:

1
$ pip install numpy

Veamos ahora cómo resolver un sistema de ecuaciones lineales con la biblioteca Numpy.

Usando los métodos inv() y dot()

Primero, encontraremos la inversa de la matriz A que definimos en la sección anterior.

Primero creemos la matriz A en Python. Para crear una matriz, se puede utilizar el método array del módulo Numpy. Una matriz se puede considerar como una lista de listas donde cada lista representa una fila.

En el siguiente script, creamos una lista llamada m_list, que además contiene dos listas: [4,3] y [-5,9]. Estas listas son las dos filas de la matriz A. Para crear la matriz A con Numpy, m_list se pasa al método array como se muestra a continuación:

1
2
3
4
import numpy as np

m_list = [[4, 3], [-5, 9]]
A = np.array(m_list)

Para encontrar la inversa de una matriz, la matriz se pasa al método linalg.inv() del módulo Numpy:

1
2
3
inv_A = np.linalg.inv(A)

print(inv_A)

El siguiente paso es encontrar el producto escalar entre la inversa de la matriz ‘A’ y la matriz ‘B’. Es importante mencionar que el producto escalar de matrices solo es posible entre las matrices si las dimensiones internas de las matrices son iguales, es decir, el número de columnas de la matriz de la izquierda debe coincidir con el número de filas de la matriz de la derecha.

Para encontrar el producto escalar con la biblioteca Numpy, se usa la función linalg.dot(). El siguiente script encuentra el producto escalar entre la inversa de la matriz A y la matriz B, que es la solución de la Ecuación 1.

1
2
3
4
B = np.array([20, 26])
X = np.linalg.inv(A).dot(B)

print(X)

Producción:

1
[2. 4.]

Aquí, 2 y 4 son los valores respectivos para las incógnitas x e y en la Ecuación 1. Para verificar, si insertas 2 en lugar de la incógnita x y 4 en lugar de la incógnita y en la ecuación 4x + 3y, verás que el resultado será 20.

Resolvamos ahora un sistema de tres ecuaciones lineales, como se muestra a continuación:

1
2
3
4x + 3y + 2z = 25
-2x + 2y + 3z = -10
3x -5y + 2z = -4

La ecuación anterior se puede resolver usando la biblioteca Numpy de la siguiente manera:

Ecuación 2:

1
2
3
4
5
A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]])
B = np.array([25, -10, -4])
X = np.linalg.inv(A).dot(B)

print(X)

En el script anterior, los métodos linalg.inv() y linalg.dot() están encadenados. La variable X contiene la solución para la Ecuación 2, y se imprime de la siguiente manera:

1
[ 5.  3. -2.]

El valor de las incógnitas x, y y z son 5, 3 y -2, respectivamente. Puede introducir estos valores en Ecuación 2 y verificar su exactitud.

Usando el método solve()

En los dos ejemplos anteriores, usamos los métodos linalg.inv() y linalg.dot() para encontrar la solución del sistema de ecuaciones. Sin embargo, la biblioteca Numpy contiene el método linalg.solve(), que se puede usar para encontrar directamente la solución de un sistema de ecuaciones lineales:

1
2
3
4
5
A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]])
B = np.array([25, -10, -4])
X2 = np.linalg.solve(A,B)

print(X2)

Producción:

1
[ 5.  3. -2.]

Puede ver que la salida es la misma que antes.

Un ejemplo del mundo real

Veamos cómo se puede usar un sistema de ecuaciones lineales para resolver problemas del mundo real.

Suponga que un vendedor de frutas vendió 20 mangos y 10 naranjas en un día por un total de $350. Al día siguiente vendió 17 mangos y 22 naranjas por $500. Si los precios de las frutas permanecieron sin cambios en ambos días, ¿cuál fue el precio de un mango y una naranja?

Este problema se puede resolver fácilmente con un sistema de dos ecuaciones lineales.

Digamos que el precio de un mango es x y el precio de una naranja es y. El problema anterior se puede convertir así:

1
2
20x + 10y = 350
17x + 22y = 500

La solución para el sistema de ecuaciones anterior se muestra aquí:

1
2
3
4
5
A = np.array([[20, 10], [17, 22]])
B = np.array([350, 500])
X = np.linalg.solve(A,B)

print(X)

Y aquí está la salida:

1
[10. 15.]

El resultado muestra que el precio de un mango es $10 y el precio de una naranja es $15.

Conclusión

El artículo explica cómo resolver un sistema de ecuaciones lineales utilizando la biblioteca Numpy de Python. Puedes usar los métodos linalg.inv() y linalg.dot() en cadena para resolver un sistema de ecuaciones lineales, o simplemente puedes usar el método solve(). El método solve() es la forma preferida.