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

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

16 horas ago

Augurios deportivos y portadas malditas, o cuando The Economist predice mejor al revés – El bestiario de los indicadores económicos absurdos (parte 3)

Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…

2 días ago

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

4 días ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

1 semana ago

Cómo comparar tendencias con gráficos de líneas en Matplotlib: guía práctica paso a paso

Tienes los datos de tráfico web de los últimos cinco meses desglosados por canal: orgánico,…

2 semanas ago

This website uses cookies.