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

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

18 horas ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

6 días ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

1 semana ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

2 semanas ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

2 semanas ago

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

3 semanas ago

This website uses cookies.