En los apuntes de Álgebra Lineal de la sección de Apuntes se introducen dos concepto de gran importancia: los autovalores y autovectores. A continuación, Copilot nos explica, brevemente, por qué estos conceptos son relevantes:
Los autovalores y autovectores de una matriz son fundamentales en Álgebra Lineal porque revelan la estructura interna de las transformaciones lineales. Aquí tienes una explicación breve pero poderosa:
🔍 Autovalores: Indican cuánto se estira o comprime un autovector cuando se aplica la transformación. Son los "factores de escala" de la matriz.
📐 Autovectores: Son las direcciones que no cambian (excepto en magnitud) bajo la transformación. Es decir, si aplicas la matriz a un autovector, el resultado es el mismo vector multiplicado por su autovalor.
¿Por qué son importantes?
📊 Análisis de sistemas dinámicos: Ayudan a entender el comportamiento a largo plazo de sistemas físicos, económicos o biológicos.
🧠 Reducción de dimensiones: En técnicas como PCA (Análisis de Componentes Principales), se usan para simplificar datos sin perder información clave.
🧮 Diagonalización de matrices: Facilitan cálculos complejos como potencias de matrices o resolución de ecuaciones diferenciales.
🎵 Procesamiento de señales e imágenes: Se aplican en compresión, reconocimiento facial y más.
En resumen, los autovalores y autovectores son como el ADN de una matriz: contienen la información esencial sobre cómo transforma el espacio.
Bien es cierto que obtener estos elementos de forma manual puede ser tedioso, por ello existen varias calculadoras de autovalores y autovectores en la red: Calculadora de autovalores y autovectores, Eigenvalues and Eigenvectors o Eigenvalues and Eigenvectors Calculator - eMathHelp , entre otras. Pero en esta entrada del taller comparto una versión (bastante simple) desarrollada en Python.
Comencemos por las importaciones de sympy
from sympy import Matrix, Rational, pprint
A continuación, crearemos un breve menú:
print('Elija su opción.')
print()
print('1.')
pprint(Matrix([[1, 2], [1, 3]]))
print()
print('2.')
pprint(Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]))
print()
print('3.')
pprint(Matrix([[1, 0, -1, 0], [2, -1, -3, 0], [-2, 0, 2, 0], [0, 0, 0, 3]]))
print()
print('4. Crea tu matriz.')
print()
try:
option = int(input("Seleccione una opción (1-4): "))
match option:
case 1:
A = Matrix([[1, 2],
[1, 3]])
case 2:
A = Matrix([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
case 3:
A = Matrix([[1, 0, -1, 0],
[2, -1, -3, 0],
[-2, 0, 2, 0],
[0, 0, 0, 3]])
case 4:
try:
rows = int(input('Ingrese el número de filas: '))
cols = rows
matrix = []
for i in range(rows):
row = []
for j in range(cols):
element = input(f'Ingrese el elemento ({i+1}, {j+1}): ')
row.append(Rational(element)) # Usa float para permitir decimales
matrix.append(row)
A = Matrix(matrix)
except ValueError:
print("Error: Ingrese solo números válidos.")
A = None
case _:
print("Opción inválida.")
A = None
if A is not None:
print("Matriz creada correctamente:")
pprint(A)
else:
print("No se pudo crear la matriz.")
except Exception as e:
print(f"Ocurrió un error inesperado: {e}")
Como vemos hacemos uso de un try-except para capturar errores del match. Asimismo, en las primeras opciones se tienen precargadas algunas matrices y, por último, la opción 4 permite la creación de una matriz cualquiera.
Para obtener la información que buscamos simplemente debemos ejecutar el siguiente comando:
eigen_data = A.eigenvects()
De esta forma, obtenemos la información espectral de la matriz A. Para visualizarla por pantalla podemos ejecutar este último código:
for val, mult, vects in eigen_data:
print("Autovalor:")
pprint(val)
print("Multiplicidad:", mult)
print("Autovectores:")
for v in vects:
pprint(v)
print('')
Así pues tenemos una calculadora de autovalores y autovectores casera y customizable. Adjunto además un Google Colab.
Comentar debidamente el código.
Mejorar la escritura de la matriz creando, por ejemplo, una pequeña interfaz como la mostrada en las webs anteriores.
Mejorar la presentación de los resultados y añadir opción para extraerlos en un .txt, por ejemplo.
Cuando sea posible (2D o 3D) dar la opción de graficar.