∫Atlas Matemáticas Aplicadas

Inicio › Temas › Álgebra lineal

🧮 Álgebra lineal nivel avanzado

Ortogonalidad y Gram-Schmidt

Fabricar bases ortonormales restando proyecciones, y de ahí la factorización QR.

🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)

La idea

Dos vectores son ortogonales cuando su producto interior es cero. Trabajar con una base ortonormal —vectores ortogonales entre sí y de longitud uno— simplifica enormemente los cálculos: las coordenadas de un vector en esa base son simplemente sus productos interiores con cada elemento, sin necesidad de resolver ningún sistema, las longitudes se calculan con Pitágoras y la matriz de cambio de base tiene por inversa su propia transpuesta.

El proceso de Gram-Schmidt fabrica una base ortonormal a partir de cualquier base. Se toma el primer vector tal cual; al segundo se le resta su proyección sobre el primero, de modo que lo que queda es exactamente la parte perpendicular; al tercero se le restan las proyecciones sobre los dos anteriores, y así sucesivamente. Al final se normaliza cada resultado dividiéndolo por su norma. Si en algún paso el vector restante sale nulo, el vector de partida era combinación lineal de los anteriores y se descarta: el proceso detecta por sí mismo la dependencia lineal y devuelve una base del subespacio generado.

Guardar los coeficientes de las proyecciones que se han ido restando produce la factorización QR: A = Q·R, con Q de columnas ortonormales y R triangular superior. Es la forma numéricamente sólida de resolver mínimos cuadrados, porque evita formar el producto AᵗA, que empeora el condicionamiento. La versión clásica del algoritmo pierde ortogonalidad con la aritmética de punto flotante, así que en la práctica se emplea la variante modificada o las reflexiones de Householder.

Fórmulas clave

  • Producto interior⟨u, v⟩ = u₁v₁ + u₂v₂ + … + uₙvₙ
  • Proyecciónproy_u v = (⟨v, u⟩ / ⟨u, u⟩) · u
  • Paso de Gram-Schmidtuₖ = vₖ − Σ_{j<k} proy_{uⱼ} vₖ
  • Normalizaciónqₖ = uₖ / ‖uₖ‖
  • Ortonormalidad⟨qᵢ, qⱼ⟩ = 1 si i = j, 0 si i ≠ j
  • Factorización QRA = Q·R, QᵗQ = I, R triangular superior

Dónde se aplica

En procesamiento de señales, las bases ortonormales de senos y cosenos (o de ondículas) permiten descomponer una señal en componentes independientes, comprimirla y filtrarla: es el fundamento del JPEG y del MP3. En química cuántica, los orbitales calculados se reortogonalizan con Gram-Schmidt en cada iteración para que sigan representando estados físicamente válidos. En computación gráfica y en navegación inercial, las matrices de rotación acumulan errores de redondeo y dejan de ser ortogonales, por lo que se reortonormalizan periódicamente. Y en estadística, la QR es el motor numérico que usan los paquetes de regresión en lugar de las ecuaciones normales.

Con programación (Python)

import math

def interior(u, v):
    return sum(a*b for a, b in zip(u, v))

def gram_schmidt(vs):
    base = []
    for v in vs:
        u = list(v)
        for q in base:
            k = interior(v, q)
            u = [ui - k*qi for ui, qi in zip(u, q)]
        n = math.sqrt(interior(u, u))
        if n < 1e-12:
            print("  vector dependiente, se descarta:", v)
            continue
        base.append([ui/n for ui in u])
    return base

V = [(3, 1, 0), (2, 2, 0), (0, 1, 4)]
Q = gram_schmidt(V)
for i, q in enumerate(Q):
    print(f"q{i+1} = ({q[0]:8.5f},{q[1]:8.5f},{q[2]:8.5f})  norma = {math.sqrt(interior(q,q)):.6f}")
for i in range(len(Q)):
    for j in range(i+1, len(Q)):
        print(f"<q{i+1},q{j+1}> = {interior(Q[i], Q[j]):.1e}")

x = (1, 2, 3)
coef = [interior(x, q) for q in Q]
recon = [sum(coef[k]*Q[k][i] for k in range(len(Q))) for i in range(3)]
print("coeficientes:", [round(c, 4) for c in coef])
print("reconstruido:", [round(r, 6) for r in recon])
print("Con un vector dependiente:", len(gram_schmidt([(1, 0), (2, 0), (0, 5)])), "vectores de base")

La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.

Temas relacionados

Mínimos cuadrados · Vectores en el plano · La matriz inversa · Valores y vectores propios

← Todos los temas