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