¿Cómo aprender álgebra lineal usando Python?
Tags: math, python, tutorial, computerscience
Published: 2022-10-09 04:20:02


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 {% katex inline %} \mathbb{R}^3 {% endkatex %})

## Para muestra, un problema

Intentemos hallar, si existe, la intersección entre las siguientes rectas.
{% katex %}
\begin{align*}
&\mathbb{L}_1 = \lambda(2,2,1) + (2,1,-3) \\\\
&\mathbb{L}_2 = \lambda(1,-1,1) + (0,2,3)
\end{align*}
{% endkatex %}

Primero planteamos la igualdad {% katex inline%} \mathbb{L}_1 = \mathbb{L}_2 {% endkatex %}, por lo tanto

{% katex %}
\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*} 
{% endkatex %}

A partir de este sistema de ecuaciones, que además es homogéneo, podemos construir una matriz de coeficientes para buscar los valores de {% katex inline %}\alpha{% endkatex %} y {% katex inline %}\beta{% endkatex %}

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

## Hechizos de magia

```python
import numpy as np
```

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

```python
F1 = np.array([2,-1,-2])
F2 = np.array([2,1,1])
F3 = np.array([1,-1,6])
```
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
```python
F2 = F2 - 2*F3
F1 = F1 - 2*F3
```

Quedándonos con la siguiente matriz
```
[  0   1 -14]
[  0   3 -11]
[  1  -1   6]
```
Nuevamente, procedemos a finalizar la triangulación restándole al triple de la primer fila la segunda
```python
F1 = 3*F1 - F2
```
```
[[  0   0 -31]
 [  0   3 -11]
 [  1  -1   6]]
```
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 {% katex inline %}\alpha{% endkatex %} y la segunda de {% katex inline %}\beta{% endkatex %}.

{% katex %}
\begin{cases}
0\alpha + 0\beta = -31 \\\\
0\alpha + 3\beta = -11\\\\
\alpha -\beta = 6
\end{cases}
{% endkatex %}

De la primer ecuación nos queda que {% katex inline %}\beta = \frac{-31}{0}{% endkatex %}, 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi40gqs2089ar7zio9hw.png)

## 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.