Polinomi - rappresentazione per coefficienti e per valori e convoluzione
In questa pagina 8
Il capitolo sulla FFT parte da un problema algebrico: moltiplicare due polinomi. L'idea è avere due rappresentazioni dello stesso oggetto, ognuna con operazioni facili diverse, e convertire in fretta da una all'altra. Qui si fissano le due rappresentazioni, i costi esatti delle operazioni e delle conversioni generali. Le basi su induzione e ricorsioni sono in Dimostrazioni, induzione e invariantiTecniche di dimostrazione (esempio, controesempio, assurdo), induzione con casi base multipli, invarianti di ciclo (inizializzazione, conservazione, uso alla fine), schema generale per provare la correttezza; esempi svolti su arrayMax, sequenza di bit e numeri di Fibonacci.Dimostrazioni, induzione e invarianti → e Algoritmi ricorsiviAlgoritmi ricorsivi come induzione eseguita; albero della ricorsione e record di attivazione nello stack; esempi ReverseArray, LinearSum, Power in tempo logaritmico, Fibonacci ricorsivo (esponenziale) e con memoizzazione; analisi della complessità con l'albero della ricorsione e correttezza per induzione.Algoritmi ricorsivi →; le sommatorie in SommatorieIl simbolo di sommatoria, le sue proprietà (linearità, additività, cambio di indice) e le somme notevoli di Gauss e geometrica.Sommatorie →.
I polinomi sono funzioni , con coefficienti complessi (richiami sui complessi in Numeri complessi, formula di Eulero ed esponenziali complessiUn numero complesso si scrive in forma cartesiana a+jb o polare |x|e^{jφ}; il prodotto moltiplica i moduli e somma le fasi. La formula di Eulero e^{jα}=cos α + j sin α lega esponenziali e sinusoidi e permette di trattare tutti i segnali del corso come somme di esponenziali complessi e^{(σ+jω)t}.Numeri complessi, formula di Eulero ed esponenziali complessi →). Il costo di un algoritmo è, in tutto il capitolo, il numero di operazioni aritmetiche tra scalari complessi (somme, differenze, prodotti, divisioni, ciascuna per 1).
Rappresentazione per coefficienti
Definizione (polinomio di grado limitato da ). Il polinomio è rappresentato con coefficienti dal vettore e si scrive . Il numero è il limite di grado (degree bound); il grado effettivo è .
Il vettore si può estendere con zeri (padding) senza cambiare il polinomio: e anche . Le rappresentazioni per coefficienti dello stesso polinomio sono quindi infinite. Il padding serve agli algoritmi che pretendono una taglia fissa, per esempio una potenza di due (la FFT).
Rappresentazione per valori e teorema di interpolazione
Teorema (interpolazione). Date coppie con per , esiste uno e un solo polinomio di grado limitato da tale che per .
Dimostrazione. Imporre significa risolvere il sistema lineare (), cioè con . La matrice è una matrice di Vandermonde (riga = potenze consecutive di ). Se il sistema ha una e una sola soluzione (vedi Matrice inversaL'inversa di una matrice quadrata A è la matrice A⁻¹ con A A⁻¹ = A⁻¹ A = I; esiste se e solo se rango(A) = n e si calcola con Gauss-Jordan riducendo (A | I) fino a (I | A⁻¹).Matrice inversa → e Sistemi lineari e teorema di Rouché-CapelliUn sistema lineare si scrive AX = B; ha soluzioni se e solo se B sta nell'immagine di A, cioè se rango(A) = rango(A|B) (Rouché-Capelli); le soluzioni sono una soluzione particolare più il nucleo e dipendono da n − r parametri.Sistemi lineari e teorema di Rouché-Capelli →). Il determinante vale che è diverso da zero perché i punti sono distinti.
Dimostrazione del determinante, per induzione su . Per , e il prodotto è vuoto: vale . Passo: in si sottrae, partendo dall'ultima colonna e andando verso sinistra, volte la colonna precedente: per . Questa operazione non cambia il determinante (vedi Proprietà del determinante, Binet e LaplaceIl determinante è lineare in ogni riga, cambia segno scambiando due righe, non cambia sommando a una riga un multiplo di un'altra: così si calcola con Gauss riducendo a triangolare. Binet: det(AB) = det A · det B. Laplace: sviluppo lungo una riga o colonna con i complementi algebrici.Proprietà del determinante, Binet e Laplace →). Il nuovo elemento è . La riga diventa , quindi si sviluppa secondo la prima riga e resta il determinante della matrice di elementi con . Dalla riga si porta fuori il fattore : e per ipotesi induttiva l'ultimo determinante è .
Definizione (rappresentazione per valori). Dato a componenti distinte (la base), il polinomio di grado limitato da è rappresentato dalla coppia con . Basi diverse danno rappresentazioni diverse. L'unicità è garantita dal teorema.
Esempio. nella base è . Anche questa rappresentazione si può estendere: aggiungendo il punto si aggiunge , ma il padding è più elaborato di quello per coefficienti (bisogna calcolare un nuovo valore).
Somma e prodotto per coefficienti
Somma. , quindi e il costo è somme. Con limiti di grado diversi bastano somme (il resto si copia): .
Prodotto. Se e hanno limite di grado , il prodotto ha grado effettivo al più : il suo limite di grado è . Il coefficiente raccoglie tutti i prodotti con , cioè con entrambi gli indici in :
Definizione (convoluzione lineare). Per , il vettore ha componenti Se e allora . Con vettori di lunghezza e il risultato ha lunghezza .
Esempio. , (, ). Si ordinano i prodotti per :
| prodotti | ||
|---|---|---|
| 0 | 4 | |
| 1 | 13 | |
| 2 | 28 | |
| 3 | 27 | |
| 4 | 18 |
Quindi (controllato con numpy.convolve). Il numero di termini nella somma di è : cresce da a e poi scende a .
Teorema (costo della convoluzione per definizione). Calcolare con richiede prodotti e somme, in tutto operazioni.
Dimostrazione. Ogni coppia con contribuisce a esattamente una componente, : i prodotti sono . Le componenti sono e ogni componente con addendi richiede somme; la somma totale degli addendi è , quindi le somme sono .
Per : prodotti e somme (verificato contando le operazioni di un'implementazione in Python per ). Per : .
L'operazione è commutativa e associativa (perché lo è il prodotto di polinomi): si usa nell'Esponenziazione veloce per quadrature successivepotenza x^n con un operatore associativo con elemento neutro, costo = numero di applicazioni dell'operatore; STUPID_POWER costa n-1, la sottostruttura x^n = (x^floor(n/2))^2 (per n dispari per x) dà POWER con T(n) = floor(log2 n) + (numero di bit a 1 di n) - 1, Theta(log n) (caso peggiore 2 floor(log2 n), n = 2^t - 1); versioni iterative POWER2 e POWER3 dalla rappresentazione binaria di n; esempio con la matrice di Fibonacci; il modello a costo unitario vale solo se l'operatore non fa crescere gli operandi.Esponenziazione veloce per quadrature successive → applicata ai polinomi.
Somma e prodotto per valori
Due polinomi si possono sommare o moltiplicare per valori solo se sono rappresentati sulla stessa base . Allora dove è il prodotto componente per componente. Il costo è per entrambe: il prodotto per valori è lineare, contro il quadratico per coefficienti.
Attenzione al limite di grado. Il prodotto ha limite di grado e quindi per essere determinato servono almeno punti. Se i due fattori sono dati su soli punti, non rappresenta il prodotto. Controesempio: sulla base dà e , ma il polinomio di grado limitato da per e è , mentre . Su una base estesa a punti, , si ha e , che sono proprio i valori di in .
Conversione coefficienti valori: la valutazione
Per valutare in un punto si può applicare la definizione:
V(a, z)
n <- a.len
y <- a[0]; pow <- 1
for i <- 1 to n-1
pow <- pow * z
y <- y + a[i] * pow
return yDopo il primo comando dell'iterazione , pow vale , quindi y accumula . Ogni iterazione fa una somma e due prodotti: .
Regola di Horner. Si riscrive il polinomio annidando le potenze:
HORNER(a, z)
n <- a.len
y <- a[n-1]
for j <- 2 to n
y <- a[n-j] + z * y
return yCorrettezza (invariante). Alla fine dell'iterazione () vale . Prima del ciclo, , che è la formula con "". Se vale per , cioè , allora il nuovo valore è , e il termine isolato è quello con ed esponente : la formula vale per . A si ha .
Ogni iterazione fa una somma e un prodotto: , un terzo in meno di .
Esempio. in : ; : ; : ; : . Controllo: . Sono operazioni contro le di V.
La valutazione su una base ripete Horner volte:
VAL(a, x)
n <- a.len
for i <- 0 to n-1
y[i] <- HORNER(a, x[i])
return ycon costo . Non esiste di meglio per una base generica: la FFT sfrutterà una base speciale.
Conversione valori coefficienti: l'interpolazione
Sistema lineare. Si risolve con il metodo di Gauss-Jordan (vedi Eliminazione di GaussCon tre operazioni elementari sulle righe (scambio, moltiplicazione per uno scalare non nullo, somma di un multiplo di un'altra riga) ogni matrice si riduce a scala senza cambiare il rango; serve a calcolare ranghi, risolvere sistemi, trovare relazioni di dipendenza e matrici che riducono a scala.Eliminazione di Gauss →): pivot, ciascuno richiede un numero costante di operazioni su elementi, quindi .
Esempio. Per il sistema è , , , con unica soluzione cioè .
Formula di Lagrange. Il polinomio interpolante è Ogni frazione vale in e negli altri , quindi , e ha grado : per l'unicità è il polinomio cercato. I coefficienti si ottengono in così:
- si calcolano i coefficienti di , di grado : si moltiplica per un fattore alla volta, e ogni moltiplicazione costa , in totale ;
- per ogni si calcolano i coefficienti di con la regola di Ruffini (divisione per un binomio, );
- si calcola con Horner () e si somma ai coefficienti di ().
Le fasi 2 e 3 si ripetono per valori di , ognuna di costo : in tutto.
Esempio. Punti . . Allora con ; con ; con . Quindi
(Implementazione con Fraction provata su polinomi casuali di - coefficienti.)
Perché serve una base speciale
Le due conversioni generali costano (valutazione e Lagrange) o più. Il percorso "coefficienti valori su una base estesa prodotto coefficienti" costerebbe quindi , come la convoluzione diretta: il prodotto lineare per valori non basta. Se però esistesse una base per cui valutazione e interpolazione costano , il prodotto di polinomi costerebbe . Questa base esiste: le radici dell'unità, e la trasformazione si chiama DFT (vedi 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à →), calcolata con la FFT (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 →).
Il punto di vista del segnale è lo stesso, a parole diverse: la convoluzione lineare di due sequenze finite è la risposta di un sistema FIR (Sistemi LTI e convoluzione discretaUn sistema lineare e tempo-invariante (LTI) è completamente descritto dalla sua risposta impulsiva h[n]: y[n] = Σ x[k] h[n-k] = x[n] * h[n] (somma di convoluzione). Si ricava scomponendo x in impulsi traslati e usando linearità e invarianza. La convoluzione è commutativa, associativa e distributiva; una cascata di LTI equivale a un solo filtro con h = h1 * h2 e l'ordine non conta. Se x ha lunghezza N e h lunghezza L, y ha lunghezza N+L-1. Si calcola col metodo della finestra scorrevole o a tabella. I FIR sono LTI; altri sistemi (n·x[n], x[-n], x²) non lo sono.Sistemi LTI e convoluzione discreta →, Calcolo della convoluzione e sue proprietàIl supporto della convoluzione è la somma dei supporti, $\operatorname{rect}*\operatorname{rect}=\Lambda$, e due esponenziali causali danno $(e^{-bt}-e^{-at})/(a-b)$. Si calcola con il metodo grafico a casi (ribaltare, traslare, individuare gli intervalli di sovrapposizione). Proprietà: lineare, commutativa, associativa, $\delta$ è l'elemento neutro, la traslazione si somma, l'area è il prodotto delle aree.Calcolo della convoluzione e sue proprietà →) e coincide con il prodotto dei polinomi nella variabile .
Domande d'esame
- Per vettori di componenti, quante moltiplicazioni e somme richiede la convoluzione lineare per definizione? Risposta: prodotti e somme, operazioni.
- Quanti punti servono per rappresentare per valori il prodotto di un polinomio con coefficienti per uno con coefficienti? Perché non bastano ? Risposta: il prodotto ha limite di grado , servono almeno punti; con punti il prodotto componente per componente determina solo un polinomio di grado limitato da , diverso dal prodotto.
- Quante operazioni richiede la regola di Horner per un polinomio con coefficienti? E la valutazione su punti? Risposta: per un punto, per punti.
Esercizi svolti: Esercizio - matrice V per V trasposta con V di Vandermonde, formula degli elementi e calcolo in tempo quadratico (compito del 4 settembre 2024, es. 2); Esercizio - convoluzione con il vettore delle potenze di due in tempo lineare (compito del 5 settembre 2025, es. 2); Esercizio - domande di prima parte su polinomi, DFT e FFT (simulazioni d'esame).
Versione ripasso
- Per coefficienti: , limite di grado (grado effettivo ). Il padding con zeri non cambia il polinomio: . Costi in operazioni tra complessi.
- Per valori: con distinti e . Teorema di interpolazione: coppie con distinti determinano un unico polinomio di grado limitato da . Si risolve , con (Vandermonde, vedi Matrice inversaL'inversa di una matrice quadrata A è la matrice A⁻¹ con A A⁻¹ = A⁻¹ A = I; esiste se e solo se rango(A) = n e si calcola con Gauss-Jordan riducendo (A | I) fino a (I | A⁻¹).Matrice inversa →).
- Determinante di Vandermonde: . Dimostrazione per induzione: (da destra), la riga diventa , si porta fuori da ogni riga e resta (Proprietà del determinante, Binet e LaplaceIl determinante è lineare in ogni riga, cambia segno scambiando due righe, non cambia sommando a una riga un multiplo di un'altra: così si calcola con Gauss riducendo a triangolare. Binet: det(AB) = det A · det B. Laplace: sviluppo lungo una riga o colonna con i complementi algebrici.Proprietà del determinante, Binet e Laplace →).
- Somma: , costo (per coefficienti e per valori, sulla stessa base).
- Convoluzione lineare: , , è il prodotto dei polinomi. Ogni coppia finisce in : prodotti e somme, (per : ).
- Esempio: : , , , , .
- Prodotto per valori: in , ma serve una base di almeno punti. Controesempio: sulla base darebbe e quindi ; su dà , corretto.
- Valutazione: definizione operazioni; Horner
y <- a[n-j] + z*yper , operazioni, invariante (induzione: il nuovo termine ha esponente ). Esempio: in : . Su punti: . - Interpolazione: sistema con Gauss-Jordan, (Eliminazione di GaussCon tre operazioni elementari sulle righe (scambio, moltiplicazione per uno scalare non nullo, somma di un multiplo di un'altra riga) ogni matrice si riduce a scala senza cambiare il rango; serve a calcolare ranghi, risolvere sistemi, trovare relazioni di dipendenza e matrici che riducono a scala.Eliminazione di Gauss →). Lagrange: con e (Ruffini): calcolo di , poi per ogni una divisione, una valutazione e un'accumulazione in ; totale .
- Esempio di Lagrange: punti , , con , con : .
- Idea: le conversioni su basi generiche costano o più, quindi il prodotto passando per i valori non guadagna nulla; con una base speciale (radici dell'unità, 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à →) scendono a (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 →).
- Pseudocodice:
HORNER(a,z):y <- a[n-1]; for j <- 2 to n: y <- a[n-j] + z*y; return y.VAL(a,x):y[i] <- HORNER(a, x[i])per ogni , costo . Con limiti di grado diversi : somma in , prodotto di lunghezza . - Lagrange, passi: (1) coefficienti di , moltiplicando un fattore alla volta, ; (2) per ogni la divisione con la regola di Ruffini, ; (3) con Horner e somma di nel risultato, ; i passi 2 e 3 si ripetono volte.
- Domande tipo: convoluzione di due vettori di componenti operazioni; punti per il prodotto di un polinomio con coefficienti per uno con : ; Horner su punti .
- Esercizi svolti: Esercizio - matrice V per V trasposta con V di Vandermonde, formula degli elementi e calcolo in tempo quadratico (compito del 4 settembre 2024, es. 2); Esercizio - convoluzione con il vettore delle potenze di due in tempo lineare (compito del 5 settembre 2025, es. 2); Esercizio - domande di prima parte su polinomi, DFT e FFT (simulazioni d'esame).
- Errori tipici: usare punti per il prodotto invece di ; contare invece di somme nella convoluzione; dire che Horner fa iterazioni (sono ); dimenticare che i punti devono essere distinti.
Esercizi su questo argomento
- Esercizio - convoluzione con il vettore delle potenze di due in tempo lineare (compito del 5 settembre 2025, es. 2)
- Esercizio - matrice V per V trasposta con V di Vandermonde, formula degli elementi e calcolo in tempo quadratico (compito del 4 settembre 2024, es. 2)
- Esercizio - polinomio con tutte le radici dell'unità tranne 1 e -1, valutazione e DFT dei coefficienti (compito del 26 giugno 2025, es. 1)
- Esercizio - prodotto di matrici circolanti e convoluzione ciclica con la DFT (esercizi su supercircolanti e circolanti, es. CR 10)