Calcolare Una Base Ortogonale Per L’Immagine Della Trasformazione Lineare

Calcolatore Base Ortogonale per Immagine di Trasformazione Lineare

Calcola una base ortogonale per l’immagine di una trasformazione lineare definita da una matrice. Questo strumento applica il processo di ortogonalizzazione di Gram-Schmidt per generare una base ortonormale.

Valori inferiori a 1e-6 sono consigliati per precisione numerica

Risultati del Calcolo

Matrice Originale (A):

Base per l’Immagine (Colonne linearmente indipendenti):

Base Ortogonale (Processo Gram-Schmidt):

Base Ortonormale:

Dimensione dell’Immagine:

Guida Completa: Calcolare una Base Ortogonale per l’Immagine di una Trasformazione Lineare

Il calcolo di una base ortogonale per l’immagine (o range) di una trasformazione lineare è un problema fondamentale in algebra lineare con applicazioni in diversi campi, tra cui l’analisi numerica, la compressione dati e l’apprendimento automatico. Questa guida spiega il processo teorico e pratico, inclusi gli algoritmi necessari e le considerazioni numeriche.

1. Fondamenti Teorici

1.1 Trasformazioni Lineari e Immagine

Una trasformazione lineare T: V → W tra spazi vettoriali è definita da una matrice A di dimensione m×n, dove:

  • m = dimensione dello spazio di arrivo (codominio)
  • n = dimensione dello spazio di partenza (dominio)

L’immagine di T, denotata come Im(T), è lo spazio generato dalle colonne di A:

Im(T) = Span{a₁, a₂, …, aₙ}

dove aᵢ sono le colonne di A.

1.2 Base Ortogonale vs. Base Ortonormale

Caratteristica Base Ortogonale Base Ortonormale
Prodotto interno ⟨vᵢ, vⱼ⟩ = 0 per i ≠ j ⟨vᵢ, vⱼ⟩ = δᵢⱼ (delta di Kronecker)
Norma dei vettori ||vᵢ|| ≠ 1 (genericamente) ||vᵢ|| = 1
Applicazioni Decomposizione QR, proiezioni Trasformate di Fourier, SVD
Stabilità numerica Moderata Alta

2. Algoritmo di Gram-Schmidt

Il processo di Gram-Schmidt è il metodo standard per ortogonalizzare un insieme di vettori. Dati i vettori {a₁, a₂, …, aₙ}, l’algoritmo produce vettori ortogonali {v₁, v₂, …, vₖ} dove k ≤ n.

2.1 Procedura Passo-Passo

  1. Inizializzazione: Poniamo v₁ = a₁.
  2. Iterazione: Per j = 2, …, n:
    • Calcolare le proiezioni:

      vⱼ = aⱼ – Σ (⟨aⱼ, vᵢ⟩/⟨vᵢ, vᵢ⟩) vᵢ, per i = 1, …, j-1

    • Se vⱼ = 0, il vettore aⱼ è linearmente dipendente dai precedenti e viene scartato.
  3. Normalizzazione (opzionale per base ortonormale):

    uᵢ = vᵢ / ||vᵢ||

Attenzione Numerica:

In implementazioni reali, il processo di Gram-Schmidt classico è soggetto a errori di arrotondamento. La versione modificata (MGS) migliorare la stabilità numerica ricalcolando le proiezioni ad ogni passo.

2.2 Esempio Numerico

Consideriamo la matrice:

1
1
2
-1
0
1
0
1
1

Applicando Gram-Schmidt:

  1. v₁ = [1, -1, 0]
  2. v₂ = [1, 0, 1] – (⟨[1,0,1], [1,-1,0]⟩/⟨[1,-1,0], [1,-1,0]⟩) [1, -1, 0] = [0.5, 0.5, 1]
  3. v₃ = [2, 1, 1] – proiezioni su v₁ e v₂ = [0.5, 0.5, 0] (linearmente dipendente, scartato)

La base ortogonale per l’immagine è quindi {[1, -1, 0], [0.5, 0.5, 1]}.

3. Implementazione Pratica

3.1 Scelta della Tolleranza (ε)

La tolleranza ε determina quando un vettore è considerato linearmente dipendente. Valori tipici:

  • 1e-6: Precisione standard per doppi precisione (IEEE 754)
  • 1e-10: Per applicazioni ad alta precisione
  • 1e-14: Limite teorico per aritmetica a 64-bit

Il nostro calcolatore usa ε = 1e-6 come default.

3.2 Decomposizione QR

Il processo di Gram-Schmidt è equivalente alla decomposizione QR della matrice A:

A = Q·R

dove:

  • Q ha colonne ortonormali (base per Im(A))
  • R è triangolare superiore

La dimensione dell’immagine è uguale al rango di A, che corrisponde al numero di colonne non-nulle in R.

3.3 Complessità Computazionale

Operazione Complessità Dettagli
Gram-Schmidt classico O(m·n²) m = righe, n = colonne
Gram-Schmidt modificato O(m·n²) Stessa complessità ma più stabile
Decomposizione QR (Householder) O(m·n·min(m,n)) Metodo preferito per matrici grandi
SVD O(min(mn², m²n)) Più costoso ma più robusto

4. Applicazioni Pratiche

4.1 Riduzione della Dimensionalità (PCA)

L’analisi delle componenti principali (PCA) utilizza una base ortonormale per proiettare dati in uno spazio di dimensione inferiore, preservando la varianza massima. La matrice di covarianza Σ viene decomposta come:

Σ = U·Λ·Uᵀ

dove le colonne di U (autovettori) formano una base ortonormale.

4.2 Compressione Immagini (SVD)

Nella compressione tramite Singular Value Decomposition (SVD), un’immagine (matrice M) è scomposta in:

M = U·Σ·Vᵀ

Troncando i valori singolari minori (in Σ), si ottiene una approssimazione a rango ridotto con base ortonormale in U e V.

4.3 Risoluzione di Sistemi Lineari

Per sistemi sovradeterminati (m > n), la soluzione ai minimi quadrati è data da:

x = (AᵀA)⁻¹Aᵀb = R⁻¹Qᵀb

dove Q·R è la decomposizione QR di A. L’uso di una base ortonormale migliorare la stabilità numerica.

5. Errori Comuni e Soluzioni

5.1 Matrici Quasi Singolari

Se la matrice A è quasi singolare (determinante ≈ 0), Gram-Schmidt può produrre vettori con norme molto piccole. Soluzioni:

  • Usare la decomposizione QR con pivoting (colonne riordinate per magnitudine).
  • Applicare la SVD per identificare il rango numerico.
  • Aumentare la tolleranza ε (es. 1e-4).

5.2 Instabilità Numerica

Il Gram-Schmidt classico accumula errori di arrotondamento. Esempio:

    % MATLAB: Confronto tra Gram-Schmidt classico e modificato
    A = randn(100, 10);  % Matrice casuale 100x10
    [Q1, R1] = qr(A);     % Gram-Schmidt modificato (stabile)
    Q2 = classicGS(A);   % Implementazione naive
    norm(Q1'*Q1 - eye(10))  % ~1e-15 (ortonormale)
    norm(Q2'*Q2 - eye(10))  % ~1e-2 (perde ortogonalità)
    

Soluzione: Usare sempre la versione modificata o librerie ottimizzate (es. LAPACK).

6. Risorse Esterne

Per approfondimenti teorici e implementazioni:

Consiglio per gli Studenti:

Per verificare manualmente i risultati:

  1. Calcola il rango di A (dimensione dell’immagine).
  2. Applica Gram-Schmidt alle colonne linearmente indipendenti.
  3. Verifica che QᵀQ = I (matrice identità) per ortonormalità.
  4. Confronta con la decomposizione QR usando software come MATLAB o Python (numpy.linalg.qr).

Leave a Reply

Your email address will not be published. Required fields are marked *