Python

Sistemas de ecuaciones lineales con numpy

Un problema de cálculo que se puede resolver fácilmente con Python son los sistemas de ecuaciones lineales. Gracias a las matrices de numpy se puede conseguir el resultado poco más de un par de líneas. Por ejemplo, para resolver un sistema de ecuaciones lineales con numpy solamente se ha de utilizar el siguiente bloque de código:

import numpy as np

A = np.matrix([[2, 3],[1, -2]])
b = np.matrix([[8],[-10]])

x = (A**-1)*b

Al ejecutar el código se puede comprobar que en la variable x se ha almacenado la matriz [[-2], [4]] que se corresponde con la solución del problema:

\begin{matrix} 2 x_1 + 3x_2 & = 8 \\ x_1 - 2 x_2 & = -10 \end{matrix}

Sistema de ecuaciones lineales

Un sistema de n ecuaciones con n incógnitas se puede escribir de la siguiente forma:

\begin{matrix} a_{11} x_1 + a_{12} x_2 + \ldots + a_{1n} x_n &= b_1 \\ a_{21} x_1 + a_{22} x_2 + \ldots + a_{2n} x_n &= b_2 \\ \ldots \\ a_{n1} x_1 + a_{n2} x_2 + \ldots + a_{nn} x_n &= b_n \end{matrix}

El sistema también se puede escribir en forma matricial de la forma:

\begin{bmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \ldots & \ldots & \ldots & \ldots \\ a_{n1} & a_{n2} & \ldots & a_{nn} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \ldots \\ x_n \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \\ \ldots \\ b_n \end{bmatrix}

Lo que se puede reescribir de forma compacta utilizando \boldsymbol{A}\boldsymbol{x} = \boldsymbol{b} donde \boldsymbol{A} es una matriz de dimensión n \times n y \boldsymbol{x} y \boldsymbol{b} son dos vectores columna de longitud n. En esta ecuación se ha para despejar el valor de \boldsymbol{x}. Para ello, asumiendo que la matriz \boldsymbol{A} es regular se puede multiplicar la expresión por la inversa de \boldsymbol{A}, \boldsymbol{A^{-1}}

\boldsymbol{A^{-1}} \boldsymbol{A} \boldsymbol{x} = \boldsymbol{A^{-1}} \boldsymbol{b}

En este caso \boldsymbol{A^{-1}} \boldsymbol{A}A es la matriz identidad y, por lo tanto, se puede escribir la solución del sistema como:

\boldsymbol{x} = \boldsymbol{A^{-1}} \boldsymbol{b}

Esta operación es lo que se ha escrito anteriormente en el código Python. La matriz inversa de A se puede obtener mediante A**-1 y al multiplicar esta matriz por b se obtiene el resultado buscado.

Determinar si el sistema se puede resolver

Para poder implementar este método se ha de verificar que la matriz A sea invertible. En caso de que no sea así al intentar invertirá Python generar un error. Cuando se trabaja de forma interactiva con Python esto no es problema mayor, pero si cuando el procedimiento se implementa en un programa. Para asegurar que se puede resolver el problema simplemente se ha de verificar que el determinante de la matriz se distinto de cero, mediante la utilización del método det().

if np.linalg.det(A) == 0:
    x = None
    print("No se puede resolver")
else:
    x = (A**-1)*b

Este trozo de código devuelve la solución cuando es posible y None en caso contrario.

Conclusiones

En esta entrada se ha visto cómo resolver un sistema de ecuaciones con numpy de forma rápida. Esta es una tarea que puede ser bastante habitual y con este truco se puede aumentar la productividad a la hora de realizar cálculos numéricos.

Imágenes: Unsplash (Antoine Dautry)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: NumPy

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.