Ortogonalizzazione di Gram-Schmidt

In matematica, e in particolare in algebra lineare, l'ortogonalizzazione Gram-Schmidt è un algoritmo che permette di ottenere un insieme di vettori ortogonali a partire da un generico insieme di vettori linearmente indipendenti in uno spazio vettoriale dotato di un prodotto scalare definito positivo.

Storia

Il procedimento è così chiamato in onore del matematico danese Jørgen Pedersen Gram (1850-1916) e del matematico tedesco Erhard Schmidt (1876-1959); esso però è stato introdotto precedentemente ai loro studi e si trova in lavori di Laplace e Cauchy.

Quando si implementa l'ortogonalizzazione su un computer, al processo di Gram-Schmidt di solito si preferisce la trasformazione di Householder, in quanto questa è numericamente più stabile, cioè gli errori causati dall'arrotondamento sono minori.

L'algoritmo

Sia V uno spazio vettoriale reale con un prodotto scalare definito positivo. Siano 𝐯1,…,𝐯n vettori linearmente indipendenti in V. L'algoritmo di Gram-Schmidt restituisce n vettori linearmente indipendenti 𝐞1,…,𝐞n tali che:

Span(𝐯1,…,𝐯i)=Span(𝐞1,…,𝐞i),∀i

e

⟨𝐞i,𝐞j⟩={1i=j,0i≠j,‖ei‖=1,∀i

In altre parole, i vettori restituiti sono ortonormali, ed i primi i generano lo stesso sottospazio dei primi i vettori iniziali.

Procedimento

La proiezione ortogonale è la funzione che "proietta" il vettore 𝐯 in modo ortogonale su 𝐮:

proj𝐮(𝐯)=⟨𝐯,𝐮⟩⟨𝐮,𝐮⟩𝐮.

Il procedimento di Gram–Schmidt permette di costruire una base ortogonale 𝐮1,…,𝐮n a partire da una base generica 𝐯1,…,𝐯n. Per calcolare 𝐮i si proietta 𝐯i ortogonalmente sul sottospazio Ui−1 generato da {𝐮1,𝐮2,…,𝐮i−1}. Si definisce allora 𝐮i come differenza tra 𝐯i e questa proiezione, in modo che risulta garantito che esso sia ortogonale a tutti i vettori nel sottospazio Ui−1. Normalizzando poi la base ortogonale (cioè dividendo ogni vettore 𝐮i che la compone per la propria norma ‖𝐮i‖) si ottiene una base ortonormale dello spazio.

Nello specifico:

I primi due passi dell'algoritmo.
𝐮1=𝐯1,𝐞1=𝐮1‖𝐮1‖𝐮2=𝐯2−proj𝐮1(𝐯2),𝐞2=𝐮2‖𝐮2‖𝐮3=𝐯3−proj𝐮1(𝐯3)−proj𝐮2(𝐯3),𝐞3=𝐮3‖𝐮3‖𝐮4=𝐯4−proj𝐮1(𝐯4)−proj𝐮2(𝐯4)−proj𝐮3(𝐯4),𝐞4=𝐮4‖𝐮4‖  ⋮  ⋮𝐮k=𝐯k−∑j=1k−1proj𝐮j(𝐯k),𝐞k=𝐮k‖𝐮k‖.

dove {𝐞i} è la base normalizzata.

Una verifica immediata della correttezza del procedimento eseguito, ovvero che si è ottenuto un insieme di vettori mutuamente ortogonali, è il calcolo del prodotto scalare fra 𝐮i e 𝐞j.

Generalizzazioni

Il processo di Gram-Schmidt si applica anche ad una successione infinita {𝐯i}i di vettori linearmente indipendenti. Il risultato è sempre una successione {𝐞i}i di vettori ortogonali e con norma unitaria, tale che:

Span(𝐯1,…,𝐯i)=Span(𝐞1,…,𝐞i),∀i.

Scrittura per mezzo del determinante

Il risultato del procedimento di Gram-Schmidt può essere espresso in modo non ricorsivo utilizzando il determinante:

𝐞j=1Dj−1Dj|⟨𝐯1,𝐯1⟩⟨𝐯2,𝐯1⟩…⟨𝐯j,𝐯1⟩⟨𝐯1,𝐯2⟩⟨𝐯2,𝐯2⟩…⟨𝐯j,𝐯2⟩⋮⋮⋱⋮⟨𝐯1,𝐯j−1⟩⟨𝐯2,𝐯j−1⟩…⟨𝐯j,𝐯j−1⟩𝐯1𝐯2…𝐯j|,
𝐮j=1Dj−1|⟨𝐯1,𝐯1⟩⟨𝐯2,𝐯1⟩⋯⟨𝐯j,𝐯1⟩⟨𝐯1,𝐯2⟩⟨𝐯2,𝐯2⟩⋯⟨𝐯j,𝐯2⟩⋮⋮⋱⋮⟨𝐯1,𝐯j−1⟩⟨𝐯2,𝐯j−1⟩⋯⟨𝐯j,𝐯j−1⟩𝐯1𝐯2⋯𝐯j|,

dove D0=1, e per j≥1 si indica con Dj il determinante della matrice di Gram:

Dj=|⟨𝐯1,𝐯1⟩⟨𝐯2,𝐯1⟩…⟨𝐯j,𝐯1⟩⟨𝐯1,𝐯2⟩⟨𝐯2,𝐯2⟩…⟨𝐯j,𝐯2⟩⋮⋮⋱⋮⟨𝐯1,𝐯j⟩⟨𝐯2,𝐯j⟩…⟨𝐯j,𝐯j⟩|.

Esempio

Dati i vettori 𝐯1=(3,1) e 𝐯2=(2,2) nel piano euclideo ℝ2 munito del prodotto scalare standard, applicando il procedimento di Gram-Schmidt si ha:

𝐮1=𝐯1,
𝐮2=𝐯2−proj𝐮1(𝐯2)=(2,2)−proj(3,1)(2,2)=(−2/5,6/5),

ottenendo i vettori 𝐮1 e 𝐮2 che sono ortogonali fra loro, come mostra il loro prodotto scalare:

⟨𝐮1,𝐮2⟩=⟨(3,1),(−2/5,6/5)⟩=−65+65=0.

Voci correlate