DEV Community

Nahuel Rabey
Nahuel Rabey

Posted on

¿Cómo aprender álgebra lineal usando Python?

Esta semana tuve mi primer parcial de Algebra en la universidad. Los profesores nos recomendaron experimentar con varias propiedades y pruebas, pero cada nueva iteración tenía decenas de cuentas, y por lo tanto, decenas de errores.

"Programar un ejercicio" nos permite jugar con las propiedades matemáticas que vemos en los libros e integrarlas mejor, sin el miedo de confundirnos un signo o un número.

Computación científica

"Numpy es el paquete fundamental para la computación científica en Python". En español, es una caja de herramientas para hacer todo tipo de cálculos.

Por ahora, lo que más nos interesa son los arrays, que tienen un comportamiento similar a un vector. Numpy los dota de operaciones cómo la suma, el producto escalar, y producto vectorial (definido sólo para R3\mathbb{R}^3 )

Para muestra, un problema

Intentemos hallar, si existe, la intersección entre las siguientes rectas.

L1=λ(2,2,1)+(2,1,3)L2=λ(1,1,1)+(0,2,3) \begin{align*} &\mathbb{L}_1 = \lambda(2,2,1) + (2,1,-3) \\ &\mathbb{L}_2 = \lambda(1,-1,1) + (0,2,3) \end{align*}

Primero planteamos la igualdad L1=L2\mathbb{L}_1 = \mathbb{L}_2 , por lo tanto

α(2,2,1)+(2,1,3)=β(1,1,1)+(0,2,3){2α+2=β2α+1=β+2α3=β+3{2αβ=22α+β=1αβ=6 \begin{align*} &\alpha(2,2,1) + (2,1,-3) = \beta(1,-1,1) + (0,2,3)\\ &\Longleftrightarrow \begin{cases} 2\alpha + 2 = \beta \\ 2\alpha + 1 = -\beta + 2\\ \alpha - 3 = \beta + 3 \end{cases} \\ &\Longleftrightarrow \begin{cases} 2\alpha -\beta = -2 \\ 2\alpha + \beta = 1\\ \alpha -\beta = 6 \end{cases} \\ \end{align*}

A partir de este sistema de ecuaciones, que además es homogéneo, podemos construir una matriz de coeficientes para buscar los valores de α\alpha y β\beta

(212211116) \left( \begin{array}{cc|c} 2 & -1 & -2 \\ 2 & 1 & 1 \\ 1 & -1 & 6 \\ \end{array} \right)

Hechizos de magia

import numpy as np
Enter fullscreen mode Exit fullscreen mode

Para resolver la matriz, debemos aplicar el método de Gauss-Jordan. Definimos tres "vectores" (arrays) que representen cada fila de la matriz

F1 = np.array([2,-1,-2])
F2 = np.array([2,1,1])
F3 = np.array([1,-1,6])
Enter fullscreen mode Exit fullscreen mode

Luego procedemos cómo cualquier triangulación. A cada vector lo podemos multiplicar por un escalar y sumarlo por otro. Voy a empezar restando a la primer y segunda fila el doble de la tercera

F2 = F2 - 2*F3
F1 = F1 - 2*F3
Enter fullscreen mode Exit fullscreen mode

Quedándonos con la siguiente matriz

[  0   1 -14]
[  0   3 -11]
[  1  -1   6]
Enter fullscreen mode Exit fullscreen mode

Nuevamente, procedemos a finalizar la triangulación restándole al triple de la primer fila la segunda

F1 = 3*F1 - F2
Enter fullscreen mode Exit fullscreen mode
[[  0   0 -31]
 [  0   3 -11]
 [  1  -1   6]]
Enter fullscreen mode Exit fullscreen mode

Hemos llegado a un absurdo. Recordemos que nuestra matriz, en este caso, representa un sistema de ecuaciones, dónde la primer columna son los coeficientes de α\alpha y la segunda de β\beta .

{0α+0β=310α+3β=11αβ=6 \begin{cases} 0\alpha + 0\beta = -31 \\ 0\alpha + 3\beta = -11\\ \alpha -\beta = 6 \end{cases}

De la primer ecuación nos queda que β=310\beta = \frac{-31}{0} , lo cual es indefinido para los números reales.

De hecho, si graficamos ambas rectas en el espacio, podremos observar que son alabeadas

Rectas alabeadas

Conclusión

Las computadoras son una clara herramienta para evitar errores de cálculo. Con ellas podemos desprendernos de "las cuentas" para concentrarnos puramente en el razonamiento que hay detrás y, así, avanzar más rápidamente en la asimilación de conceptos.

Sin embargo, tenemos que tener en cuenta que, en este ejemplo, no trabajamos sobre los números reales, sino sobre los racionales, puesto que nuestro array no está representando coordenadas con infinitos decimales.

Top comments (0)