Capítulo 5

Eigenvalores y Eigenvectores

5.1 Definición

Un vector v0\mathbf{v} \neq \mathbf{0} es eigenvectorde A si:

Av=λvA\mathbf{v} = \lambda \mathbf{v}

El escalar λ es el eigenvalor. Geométricamente, el eigenvector solo seescala (no cambia de dirección) bajo la transformación.

5.2 Cálculo

Los eigenvalores satisfacen el polinomio característico:

det(AλI)=0\det(A - \lambda I) = 0
python
import numpy as np

A = np.array([[4, -2],
              [1,  1]])

eigvals, eigvecs = np.linalg.eig(A)

print("Eigenvalores:", eigvals)
print("Eigenvectores:
", eigvecs)

# Verificación: A @ v = λ * v
v = eigvecs[:, 0]
lam = eigvals[0]
print(f"A @ v = {A @ v}")
print(f"λ * v = {lam * v}")

# Para matrices simétricas, los eigenvectores son ortogonales
B = np.array([[3, 1],
              [1, 2]])  # simétrica
vals, vecs = np.linalg.eigh(B)  # eigh es más estable para simétricas
print("
Eigenvectores (simétrica):
", vecs)
print("Q^T Q:
", vecs.T @ vecs)  # ≈ identidad → ortogonales

5.3 Diagonalización

Si A tiene n eigenvectores independientes, se puede diagonalizar:

A=PDP1A = PDP^{-1}

donde P tiene los eigenvectores y D es diagonal con los eigenvalores.

Ventajas

  • Ak=PDkP1A^k = PD^kP^{-1} (potencia fácil)
  • A1=PD1P1A^{-1} = PD^{-1}P^{-1} (inversa fácil)
  • Revela la estructura de la transformación

Matrices simétricas

Si A=ATA = A^T, entonces P es ortogonal: A=QΛQTA = Q \Lambda Q^T. Todos los eigenvalores son reales.

python
import numpy as np

A = np.array([[4, -2],
              [1,  1]])

vals, vecs = np.linalg.eig(A)
P = vecs
D = np.diag(vals)

# Reconstruir
A_rec = P @ D @ np.linalg.inv(P)
print("A reconstruida:
", A_rec)

# Potencia: A^5
A_pow = P @ np.diag(vals**5) @ np.linalg.inv(P)
print("A^5:
", A_pow)
print("A^5 (directo):
", np.linalg.matrix_power(A, 5))

5.4 Matrices Definidas Positivas

A es definida positiva si xTAx>0\mathbf{x}^T A \mathbf{x} > 0 para todo x0\mathbf{x} \neq \mathbf{0}.

Propiedades equivalentes

  • Todos los eigenvalores > 0
  • Existe Cholesky A=LLTA = LL^T
  • Todos los determinantes de menores principales > 0

En ML

Las matrices de covarianza son semidefinidas positivas. Es la base para PCA, análisis discriminante y más.

python
import numpy as np

# Matriz de covarianza (simétrica, definida positiva)
A = np.array([[2, 0.5],
              [0.5, 1]])

# Verificar eigenvalores > 0
vals = np.linalg.eigvalsh(A)  # eighvalsh para simétricas
print(f"Eigenvalores: {vals}")
print("Definida positiva:", all(vals > 0))

# Cholesky
L = np.linalg.cholesky(A)
print("Cholesky L:
", L)
print("L @ L.T:
", L @ L.T)  # = A