Esercizio - matrice di Fourier per una matrice generica a sinistra e a destra e per aI + bU (compito del 27 gennaio 2025, es. 2)
In questa pagina 3
Testo (compito d'esame del 27 gennaio 2025 di Algoritmi per l'Ingegneria, Ing. Informatica UniPD, seconda parte, esercizio 2, 16 punti). Sia una potenza di due ed la matrice di Fourier di ordine (dunque per ). Sia una matrice quadrata di numeri complessi , con . Si descriva concisamente (senza fornire necessariamente lo pseudocodice) come eseguire efficientemente le seguenti operazioni matriciali, analizzando in ciascun caso il numero di operazioni tra numeri complessi eseguite dal metodo proposto. (Attenzione: le operazioni di copia di un numero complesso non vanno contabilizzate.)
- (a) [5 punti] , dove è una matrice quadrata qualsiasi.
- (b) [5 punti] , dove è una matrice quadrata qualsiasi.
- (c) [6 punti] , dove è una matrice quadrata tale che per e per , dove e sono numeri complessi arbitrari.
Teoria usata: DFT, matrice di Fourier e radici n-esime dell'unitàla DFT di ordine n valuta un polinomio di grado limitato da n sulle n radici n-esime dell'unità, y_i = p(ω^i) con ω = e^{2πi/n}; è il prodotto per la matrice di Fourier F_n, una Vandermonde invertibile. Le radici formano un gruppo moltiplicativo e valgono tre lemmi: cancellazione (ω_{dn}^{dk} = ω_n^k, ω_n^{n/2} = -1), dimezzamento (i quadrati delle n radici sono le n/2 radici n/2-esime, ciascuna due volte) e somma (la somma delle potenze di ω^k vale n se k è multiplo di n, 0 altrimenti). Teorema di convoluzione lineare: (c|0) = DFT^{-1}{2n}(DFT{2n}(a|0) ⊙ DFT_{2n}(b|0)).DFT, matrice di Fourier e radici n-esime dell'unità → (), Fast Fourier Transform - algoritmo ricorsivo e trasformata inversala FFT calcola DFT_n (n potenza di due) con divide et impera: si separano i coefficienti di indice pari e dispari, p(x) = p0(x^2) + x p1(x^2), e per il lemma di dimezzamento bastano due DFT di ordine n/2; y_i = y0_i + w^i y1_i e y_{i+n/2} = y0_i - w^i y1_i. La ricorrenza T(n) = 2T(n/2) + 2n con T(1) = 0 ha soluzione esatta 2 n log2 n. L'inversa ha matrice F^{-1}{ij} = w^{-ij}/n: si ottiene con la FFT sulle potenze negative (poi si divide per n fuori dalla ricorsione) oppure con DFT_n(y) rovesciato. LIN_CONV moltiplica due polinomi con n coefficienti in 12 n log2(2n) + 4n operazioni.Fast Fourier Transform - algoritmo ricorsivo e trasformata inversa → (costo ), Trasformate notevoli ed esponenziazione di polinomi con la FFTalcune famiglie di vettori hanno DFT nota o più economica della FFT generale: il vettore costante (a,...,a) ha DFT (na,0,...,0), il vettore (a,0,...,0) ha DFT (a,...,a); un vettore (n,k)-sparso ha DFT formata da k copie della DFT{n/k} delle sue componenti di indice multiplo di k, e SPARSE_FFT costa 2 (n/k) log2(n/k) con ricorrenza T(n,k) = T(n/2,k/2). Per la potenza p(x)^k di un polinomio con n coefficienti: o si eleva a potenza per quadrature successive con LIN_CONV, O(nk log(nk)), oppure si valuta p con la FFT su h = 2^ceil(log2((n-1)k+1)) punti, si eleva alla k ogni valore e si antitrasforma, Theta(nk log(nk)).Trasformate notevoli ed esponenziazione di polinomi con la FFT → (DFT del vettore costante), Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici → (prodotto righe per colonne, trasposta di un prodotto).
Il prodotto di due matrici qualsiasi richiede operazioni con l'algoritmo per definizione e circa con Algoritmo di Strassen e ibridazioneStrassen calcola il prodotto n x n con 7 chiamate ricorsive invece di 8, usando 10 somme/sottrazioni nel divide e 8 nel conquer: T(n) = 7T(n/2) + (9/2)n^2, Theta(n^(log2 7)) con soluzione esatta 7n^(log2 7) - 6n^2; la costante 7 è più che tripla di quella dell'iterativo (2) e Strassen batte l'iterativo solo da n = 655 (per le potenze di 2, da 1024). L'ibridazione cambia il caso base (iterativo per n <= n0): costo n^(log2 7)(2n0+5)/n0^(log2 7 - 2) - 6n^2, minimo per n0 = 8 con costante ~3.92.Algoritmo di Strassen e ibridazione →. Qui un fattore è la matrice di Fourier, che non è generica: moltiplicare per un vettore è una DFT e costa solo .
(a) con qualsiasi
La colonna di è per la colonna di : Quindi basta applicare la FFT a ciascuna delle colonne di . Ogni FFT costa operazioni (Fast Fourier Transform - algoritmo ricorsivo e trasformata inversala FFT calcola DFT_n (n potenza di due) con divide et impera: si separano i coefficienti di indice pari e dispari, p(x) = p0(x^2) + x p1(x^2), e per il lemma di dimezzamento bastano due DFT di ordine n/2; y_i = y0_i + w^i y1_i e y_{i+n/2} = y0_i - w^i y1_i. La ricorrenza T(n) = 2T(n/2) + 2n con T(1) = 0 ha soluzione esatta 2 n log2 n. L'inversa ha matrice F^{-1}_{ij} = w^{-ij}/n: si ottiene con la FFT sulle potenze negative (poi si divide per n fuori dalla ricorsione) oppure con DFT_n(y) rovesciato. LIN_CONV moltiplica due polinomi con n coefficienti in 12 n log2(2n) + 4n operazioni.Fast Fourier Transform - algoritmo ricorsivo e trasformata inversa →), perciò Estrarre le colonne e comporle in sono copie, che non si contano. Il costo è inferiore a quello di qualunque algoritmo noto per il prodotto di matrici generiche ( nel miglior risultato asintotico noto, per definizione). Verificato con un'implementazione che conta le operazioni, per con complessa casuale: risultato uguale a calcolato per definizione e numero di operazioni esatto.
(b) con qualsiasi
Qui moltiplica a destra. Si usa che la trasposta di un prodotto è il prodotto delle trasposte in ordine inverso, , e che è simmetrica: , quindi . Allora Il prodotto si calcola come in (a), applicando la FFT alle colonne di , cioè alle righe di . Infine . Per capirlo senza trasposte: la riga di è la riga di per , e per la simmetria di è la DFT della riga di . Le trasposizioni sono solo copie (), non contate, quindi come in (a). (Verificato numericamente che per .)
(c) con
La matrice ha sulla diagonale e fuori: si scrive Per la linearità del prodotto Ogni colonna di è il vettore , e per la DFT del vettore costante (Trasformate notevoli ed esponenziazione di polinomi con la FFTalcune famiglie di vettori hanno DFT nota o più economica della FFT generale: il vettore costante (a,...,a) ha DFT (na,0,...,0), il vettore (a,0,...,0) ha DFT (a,...,a); un vettore (n,k)-sparso ha DFT formata da k copie della DFT_{n/k} delle sue componenti di indice multiplo di k, e SPARSE_FFT costa 2 (n/k) log2(n/k) con ricorrenza T(n,k) = T(n/2,k/2). Per la potenza p(x)^k di un polinomio con n coefficienti: o si eleva a potenza per quadrature successive con LIN_CONV, O(nk log(nk)), oppure si valuta p con la FFT su h = 2^ceil(log2((n-1)k+1)) punti, si eleva alla k ogni valore e si antitrasforma, Theta(nk log(nk)).Trasformate notevoli ed esponenziazione di polinomi con la FFT →) . Quindi ha la prima riga fatta di e tutte le altre nulle: (con e ). Perciò (per : .)
Algoritmo e costo. Anche se ha elementi, essi appartengono all'insieme di soli valori (perché ). Basta quindi calcolare:
- i prodotti per ( non richiede operazioni): prodotti;
- : prodotto;
- : somma.
Tutti i elementi di sono poi copie di questi valori. Quindi molto meno dei elementi della matrice (e del di (a)). La soluzione del corso riporta : conta prodotti per le potenze e un prodotto per , ma dimentica la somma della prima riga; contandola si ottiene (stesso ordine, ).
Esempio (). Con : Prodotti necessari: , , (con ), più e . Confrontato con calcolato per definizione con complessi casuali, per .
Versione ripasso
Testo. potenza di due, , . Come calcolare in modo efficiente e con quante operazioni tra complessi (le copie non contano): (a) [5] con qualsiasi; (b) [5] ; (c) [6] con se e altrimenti. Teoria: DFT, matrice di Fourier e radici n-esime dell'unitàla DFT di ordine n valuta un polinomio di grado limitato da n sulle n radici n-esime dell'unità, y_i = p(ω^i) con ω = e^{2πi/n}; è il prodotto per la matrice di Fourier F_n, una Vandermonde invertibile. Le radici formano un gruppo moltiplicativo e valgono tre lemmi: cancellazione (ω_{dn}^{dk} = ω_n^k, ω_n^{n/2} = -1), dimezzamento (i quadrati delle n radici sono le n/2 radici n/2-esime, ciascuna due volte) e somma (la somma delle potenze di ω^k vale n se k è multiplo di n, 0 altrimenti). Teorema di convoluzione lineare: (c|0) = DFT^{-1}{2n}(DFT{2n}(a|0) ⊙ DFT_{2n}(b|0)).DFT, matrice di Fourier e radici n-esime dell'unità →, Trasformate notevoli ed esponenziazione di polinomi con la FFTalcune famiglie di vettori hanno DFT nota o più economica della FFT generale: il vettore costante (a,...,a) ha DFT (na,0,...,0), il vettore (a,0,...,0) ha DFT (a,...,a); un vettore (n,k)-sparso ha DFT formata da k copie della DFT_{n/k} delle sue componenti di indice multiplo di k, e SPARSE_FFT costa 2 (n/k) log2(n/k) con ricorrenza T(n,k) = T(n/2,k/2). Per la potenza p(x)^k di un polinomio con n coefficienti: o si eleva a potenza per quadrature successive con LIN_CONV, O(nk log(nk)), oppure si valuta p con la FFT su h = 2^ceil(log2((n-1)k+1)) punti, si eleva alla k ogni valore e si antitrasforma, Theta(nk log(nk)).Trasformate notevoli ed esponenziazione di polinomi con la FFT →, Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici →.
- (a) Colonna di colonna di della colonna. FFT da : (meglio di per matrici generiche).
- (b) è simmetrica (), quindi : si calcola come in (a) (DFT delle righe di ) e si traspone (). Trasposte = copie. .
- (c) ( tutta di ): , con (DFT del vettore costante), quindi e per , per .
- Costo di (c): gli elementi di sono solo gli valori : prodotti (), prodotto , somma ; il resto è copia. (il corso riporta , senza contare la somma ).
- Esempio : riga tutta ; righe : , , .
- Errori tipici: applicare le FFT alle colonne per (vanno applicate alle righe, per la simmetria ); contare le copie come operazioni; usare in (c) senza sfruttare che ha solo valori distinti.