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.
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
- Inizializzazione: Poniamo v₁ = a₁.
- 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.
- Calcolare le proiezioni:
- 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:
Applicando Gram-Schmidt:
- v₁ = [1, -1, 0]
- v₂ = [1, 0, 1] – (⟨[1,0,1], [1,-1,0]⟩/⟨[1,-1,0], [1,-1,0]⟩) [1, -1, 0] = [0.5, 0.5, 1]
- 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:
- MIT Mathematics – Gram-Schmidt Process (Massachusetts Institute of Technology)
- NIST Digital Library of Mathematical Functions (National Institute of Standards and Technology)
- Stanford CS168 – Numerical Linear Algebra (Stanford University)
Consiglio per gli Studenti:
Per verificare manualmente i risultati:
- Calcola il rango di A (dimensione dell’immagine).
- Applica Gram-Schmidt alle colonne linearmente indipendenti.
- Verifica che QᵀQ = I (matrice identità) per ortonormalità.
- Confronta con la decomposizione QR usando software come MATLAB o Python (
numpy.linalg.qr).