14  Da Gram–Schmidt ai polinomi di Legendre

Autore/Autrice
Affiliazione

Enrico Bertolazzi

University of Trento, Department of Industrial Engineering

14.1 Il prodotto scalare pesato sui polinomi

Sia w:[a,b]\to[0,+\infty) una funzione peso integrabile. Definiamo

\langle f,g\rangle_w=\int_a^b f(x)g(x)w(x)\,\mathrm{d}x, \qquad \|f\|_w=\sqrt{\langle f,f\rangle_w}.

Affinché questa espressione definisca un prodotto scalare pesato definito positivo sullo spazio dei polinomi, sono necessarie due condizioni.

I momenti devono essere finiti. Il k-esimo momento del peso è

\mu_k=\langle x^k,1\rangle_w=\int_a^b x^k\,w(x)\,\mathrm{d}x, \tag{14.1}

ossia l’integrale del monomio x^k rispetto al peso. La denominazione deriva dalla meccanica: se w è la densità di un’asta, \mu_0 ne è la massa, \mu_1 il momento statico e \mu_2 il momento d’inerzia rispetto all’origine. I momenti devono essere finiti affinché \langle f,g\rangle_w sia finito per ogni coppia di polinomi: sviluppando i due fattori, il prodotto scalare risulta una combinazione lineare di momenti. Su un intervallo limitato, se w è integrabile, questa condizione è automaticamente soddisfatta, poiché |x|^k\le\max(|a|,|b|)^k. La condizione è rilevante soprattutto sugli intervalli illimitati, dove il peso deve decadere abbastanza rapidamente. È il caso dei polinomi ortogonali di Hermite e di Laguerre (si veda Capitolo 15.)

Il peso non deve essere nullo. Basta chiedere

\int_a^b w(x)\,\mathrm{d}x>0 . \tag{14.2}

Serve per avere \|p\|_w>0 per ogni polinomio p\ne0, cioè perché \|\cdot\|_w sia una norma e non solo una seminorma. Che basti si vede così: un polinomio non nullo si annulla al più in un numero finito di punti, quindi p(x)^2w(x) è positivo ovunque lo sia w, tranne al più in quei pochi punti; se \int p^2w fosse nullo dovrebbe esserlo anche \int w.

Nota

In letteratura si trova spesso la richiesta, più forte, che w sia positiva quasi ovunque. Senza scomodare la teoria della misura: vuol dire che w può annullarsi, ma solo su un insieme di punti così piccolo da non cambiare il valore di nessun integrale. Per tutti i pesi di questo capitolo si tratta di un numero finito di punti, in genere gli estremi dell’intervallo — si pensi a w(x)=\sqrt{1-x^2}, nulla in \pm1. Ai fini di quanto segue 14.2 è tutto ciò che occorre.

Una famiglia p_0(x),p_1(x),\ldots, con \deg p_n(x)=n, è ortogonale se \langle p_n,p_m\rangle_w=0\quad(n\ne m), ed è ortonormale se inoltre \|p_n\|_w=1. Il segno e la scala restano liberi finché non si fissa una normalizzazione, per esempio polinomio monico oppure p_n(1)=1.

14.2 Esistenza della famiglia ortogonale

Il prodotto scalare c’è; resta da capire se una famiglia ortogonale esista davvero, come la si costruisce e perché la via più ovvia — ortogonalizzare i monomi — non sia praticabile al calcolatore.

Ortogonalizzazione di Gram–Schmidt

Applicando Gram–Schmidt12 ai monomi 1,x,x^2,\ldots si ottiene

q_0=\frac{1}{\|1\|_w},\qquad \widetilde q_n=x^n-\sum_{k=0}^{n-1}\langle x^n,q_k\rangle_w\,q_k, \qquad q_n=\frac{\widetilde q_n}{\|\widetilde q_n\|_w}.

Il coefficiente non ha denominatore perché i q_k sono già ortonormali; lavorando con una famiglia ortogonale ma non normalizzata p_k esso diventa \langle x^n,p_k\rangle_w/\|p_k\|_w^2.

La formula è una definizione costruttiva e dimostra l’esistenza e l’unicità della famiglia ortonormale una volta fissato il segno del coefficiente principale. Per calcoli con polinomi di grado elevato non si applica direttamente Gram–Schmidt ai monomi: i momenti e le potenze possono essere mal condizionati. Le famiglie classiche evitano questo problema con formule e ricorrenze stabili. Si noti che il rimedio abituale in algebra lineare — Gram–Schmidt modificato o riflessioni di Householder, Capitolo 4 — attenua la perdita di ortogonalità ma non il cattivo condizionamento della base di partenza: quindi è necessario cambiare base, non solo algoritmo. Questo è spiegato in maniera precisa in Teorema 14.2 mostrando che il condizionamento della base monomiale cresce esponenzialmente nel grado qualunque sia il peso scelto.

La matrice di Gram e la matrice di Hankel

Che cosa esattamente renda mal condizionata la base monomiale si deduce dalla sua matrice di Gram.

Definizione 14.1 (Matrice di Gram) Dati v_0,v_1,\ldots,v_n in uno spazio vettoriale con prodotto scalare \langle\cdot,\cdot\rangle, la loro matrice di Gram è la matrice G\in\Re^{(n+1)\times(n+1)} di elementi

G_{ij}=\langle v_i,v_j\rangle,\qquad i,j=0,1,\ldots,n.

\bm{G} è sempre simmetrica e semidefinita positiva, perché per ogni c\in\Re^{n+1}

\bm{c}^T\bm{G}\bm{c}=\Big\|\sum_{i=0}^n c_iv_i\Big\|^2\ \ge\ 0,

ed è definita positiva se e solo se i v_i sono linearmente indipendenti (si veda per esempio [4]). Il suo condizionamento misura quanto la base è storta: \bm{G}=\bm{I} esattamente per una base ortonormale, mentre \kappa_2(\bm{G}) grande segnala vettori quasi dipendenti.

Per i monomi v_i=x^i accade qualcosa di particolare. Dai momenti 14.1 si ha \langle x^i,x^j\rangle_w=\mu_{i+j}: la matrice di Gram dipende solo dalla somma degli indici, ed è quindi di un tipo speciale.

Definizione 14.2 (Matrice di Hankel) Una matrice \bm{H} si dice di Hankel se H_{ij} dipende solo da i+j, cioè se è costante lungo le antidiagonali: esiste una successione h_0,h_1,\ldots,h_{2n} con H_{ij}=h_{i+j}.

La matrice di Gram dei monomi è dunque la matrice di Hankel dei momenti,

H_n=\big(\mu_{i+j}\big)_{i,j=0}^{n}. \tag{14.3}

Teorema 14.1 (Esistenza tramite i momenti) Esiste una famiglia di polinomi ortogonali per il peso w se e solo se

\det H_n\ne0\qquad\text{per ogni } n\ge0 ,

e in tal caso la famiglia è unica a meno della normalizzazione.

Dimostrazione. Diamo l’argomento nel verso che ci serve, cioè costruendo la famiglia; il verso opposto si ottiene ripercorrendo gli stessi passaggi all’indietro (la trattazione completa è in [2]).

Cerchiamo il polinomio di grado n in forma monica,

\pi_n(x)=x^n+c_{n-1}x^{n-1}+\cdots+c_1x+c_0 ,

e imponiamo che sia ortogonale a tutti i polinomi di grado minore. Non serve imporlo per ognuno di essi: basta farlo sui monomi 1,x,\ldots,x^{n-1}, che ne sono una base. Le condizioni sono dunque

\langle \pi_n,x^i\rangle_w=0,\qquad i=0,1,\ldots,n-1 .

Sviluppiamo una di queste condizioni usando la definizione di momento 14.1, cioè \langle x^i,x^j\rangle_w=\mu_{i+j}:

0=\langle \pi_n,x^i\rangle_w =\mu_{i+n}+\sum_{j=0}^{n-1}c_j\,\mu_{i+j} ,

ossia, portando a destra il termine noto,

\sum_{j=0}^{n-1}\mu_{i+j}\,c_j=-\mu_{i+n}, \qquad i=0,1,\ldots,n-1 . \tag{14.4}

Questo è un sistema lineare di n equazioni nelle n incognite c_0,\ldots,c_{n-1}, e la sua matrice dei coefficienti ha elemento di posto (i,j) uguale a \mu_{i+j}: è esattamente H_{n-1}, la matrice di Hankel 14.3. Per l’algebra lineare elementare il sistema ha una e una sola soluzione se e solo se \det H_{n-1}\ne0. Richiedendolo per ogni n si ottengono, uno dopo l’altro, tutti i \pi_n; ogni altra famiglia ortogonale si ottiene moltiplicando i \pi_n per costanti non nulle, da cui l’unicità a meno di normalizzazione.

Per un peso positivo la condizione è automaticamente soddisfatta, perché per Definizione 14.1 H_n è la matrice di Gram dei monomi 1,x,\ldots,x^n, che sono linearmente indipendenti: H_n è quindi definita positiva e in particolare invertibile. L’esistenza non è mai in discussione.

Il condizionamento della base monomiale

Il problema vero è il condizionamento, e 14.3 lo rende quantitativo: su [0,1] con w\equiv1 si ha \mu_k=\int_0^1x^k\,\mathrm dx=1/(k+1), cioè

(H_n)_{ij}=\frac{1}{i+j+1},

che è la matrice di Hilbert, l’esempio canonico di matrice mal condizionata [3]. Risolvere 14.4 — cioè ortogonalizzare i monomi — equivale a risolvere un sistema con quella matrice, ed è per questo che il procedimento degenera già a gradi modesti.

Si potrebbe sperare che il guaio dipenda dal peso scelto e che un altro peso dia una Hankel più docile. Non è così, come mostra il seguente teorema.

Teorema 14.2 (Disuguaglianza di Beckermann) Per ogni matrice di Hankel \bm{H} definita positiva di ordine n\ge3 vale

\kappa_2(\bm{H})\ \ge\ \frac{\gamma^{\,n-1}}{16\,n}, \qquad \gamma=e^{4G/\pi}\simeq3{,}210 , \tag{14.5}

dove \kappa_2(\bm{H})=\|\bm{H}\|_2\|\bm{H}^{-1}\|_2 è il numero di condizionamento in norma 2 e G=\sum_{k\ge0}(-1)^k/(2k+1)^2\simeq0{,}916 è la costante di Catalan. La minorazione è ottimale a meno di un fattore 8\gamma n.

La dimostrazione, che copre anche le matrici di Vandermonde reali, usa strumenti di teoria del potenziale ed è in [1]. Quello che conta qui è leggerne l’enunciato: \gamma>1, quindi \gamma^{n-1} cresce esponenzialmente in n mentre il denominatore 16n cresce solo linearmente. Già per n=20 il membro destro di 14.5 vale circa 1{,}3\cdot10^{7}, e per n=30 supera 10^{12}.

Poiché la matrice di Gram dei monomi è di Hankel qualunque sia il peso, il teorema dice che nessuna scelta del peso rende i monomi una base ben condizionata: il condizionamento cresce almeno esponenzialmente nel grado. È la forma precisa dell’avvertimento dato sopra: contro un difetto della base non c’è algoritmo che tenga, bisogna cambiare base.

Nota

La tabella si ferma a n=10 non per brevità: oltre quel grado \kappa_2(H_n) supera 10^{16} e il valore calcolato in doppia precisione non è più affidabile. Per n=14 R restituisce 7{,}5\cdot10^{17}, cioè meno che per n=12: il condizionamento della matrice è diventato troppo grande perché lo si possa misurare con la stessa aritmetica che ne soffre.

Tabella 14.1: Condizionamento della matrice di Hankel dei momenti del peso unitario su [0,1], cioè della matrice di Hilbert: circa un fattore 30 per ogni grado in più, ben oltre il minimo garantito da Teorema 14.2.
n condizionamento
2 5.24e+02
4 4.77e+05
6 4.75e+08
8 4.93e+11
10 5.22e+14

Esempio svolto: costruire P_2 a mano

Lavoriamo su [-1,1] con peso w\equiv1. I primi due passi sono immediati:

\widetilde q_0(x)=1, \qquad \widetilde q_1(x)=x,

dove \widetilde q_1 non va corretto perché è già ortogonale a \widetilde q_0: l’integrando x è dispari su un intervallo simmetrico. Per il grado due Gram–Schmidt richiede invece di sottrarre due componenti:

\widetilde q_2(x)=x^2 -\frac{\langle x^2,1\rangle_w}{\langle 1,1\rangle_w}\cdot 1 -\frac{\langle x^2,x\rangle_w}{\langle x,x\rangle_w}\cdot x .

I prodotti scalari che vi compaiono sono tre integrali elementari:

\begin{aligned} \langle x^2,1\rangle_w &= \int_{-1}^{1} x^2\,\mathrm{d}x = \frac{2}{3}, \\[1mm] \langle 1,1\rangle_w &= \int_{-1}^{1} \mathrm{d}x = 2, \\[1mm] \langle x^2,x\rangle_w &= \int_{-1}^{1} x^3\,\mathrm{d}x = 0 \qquad \text{(integrando dispari).} \end{aligned}

L’ultimo è nullo, quindi la componente lungo x non c’è e resta

\widetilde q_2(x) = x^2 - \frac{2/3}{2}\cdot 1 = x^2 - \frac{1}{3}.

Manca solo la normalizzazione. La convenzione dei Legendre è P_2(1)=1, mentre

\widetilde q_2(1) = 1 - \frac{1}{3} = \frac{2}{3},

quindi si moltiplica per 3/2:

P_2(x) = \frac{3}{2}\left(x^2-\frac{1}{3}\right) = \frac{1}{2}\left(3x^2-1\right).

È lo stesso polinomio che la formula di Rodrigues produce per derivazione.

14.3 I polinomi di Legendre

Fissiamo ora il caso più semplice e più usato: intervallo [-1,1] e peso costante. La famiglia che ne risulta ha un nome, una formula chiusa, una ricorrenza e un’equazione differenziale, e le incontriamo tutte in questa sezione.

Definizione e primi polinomi

Su [-1,1] scegliamo il peso costante w(x)=1. I polinomi di Legendre3 P_n(x) sono normalizzati da P_n(1)=1 e soddisfano

\int_{-1}^1 P_n(x)P_m(x)\,\mathrm{d}x =\frac{2}{2n+1}\,\delta_{nm}.

Una definizione esplicita è la formula di Rodrigues4:

P_n(x)=\frac{1}{2^n n!}\frac{\mathrm d^n}{\mathrm{d}x^n}(x^2-1)^n. \tag{14.6}

I primi sei polinomi, quelli disegnati in Figura 14.1, sono

\begin{aligned} P_0(x) &= 1, \\ P_1(x) &= x, \\ P_2(x) &= \frac{1}{2}\left(3x^2-1\right), \\ P_3(x) &= \frac{1}{2}\left(5x^3-3x\right), \\ P_4(x) &= \frac{1}{8}\left(35x^4-30x^2+3\right), \\ P_5(x) &= \frac{1}{8}\left(63x^5-70x^3+15x\right). \end{aligned}

La ricorrenza a tre termini

Rodrigues è una definizione, non un algoritmo: derivare n volte un polinomio di grado 2n è costoso e numericamente pessimo. Per il calcolo si usa la ricorrenza a tre termini

\begin{aligned} P_0(x)&=1,\\ P_1(x)&=x,\\ (k+1)\,P_{k+1}(x)&=(2k+1)\,x\,P_k(x)-k\,P_{k-1}(x). \end{aligned} \tag{14.7}

Che una ricorrenza di questo tipo esista non è un caso fortunato: in Capitolo 15 si vede che l’ortogonalità obbliga xp_n ad avere componenti non nulle solo su p_{n-1},p_n,p_{n+1}, e in Capitolo 16 se ne ricava la forma generale. I coefficienti di 14.7 sono il caso \alpha=\beta=0 della ricorrenza di Jacobi.

Una verifica immediata. Per k=1 la ricorrenza dà

2P_2(x)=3x\cdot x-1, \qquad\text{cioè}\qquad P_2(x)=\frac{1}{2}\left(3x^2-1\right),

e per k=2

3P_3(x)=5x\cdot\frac{1}{2}\left(3x^2-1\right)-2x, \qquad\text{cioè}\qquad P_3(x)=\frac{1}{2}\left(5x^3-3x\right),

che sono i polinomi elencati sopra.

Tradotta in codice, 14.7 costa O(n) operazioni e memoria costante, e non richiede mai i coefficienti monomiali. La funzione seguente è definita in _common.R ed è usata da tutti gli esempi del capitolo:

legendre <- function(n, x) {
  if (n == 0) return(rep(1, length(x)))
  p0 <- rep(1, length(x)); p1 <- x
  if (n == 1) return(p1)
  for (k in 1:(n - 1)) {
    p2 <- ((2*k + 1)*x*p1 - k*p0)/(k + 1)
    p0 <- p1; p1 <- p2
  }
  p1
}

Il comportamento in virgola mobile di questa ricorrenza è discusso in Capitolo 16.

Rodrigues e la dimostrazione dell’ortogonalità

Teorema 14.3 (Ortogonalità e norma dei polinomi di Legendre) Il polinomio P_n definito dalla formula di Rodrigues è ortogonale a ogni polinomio di grado minore di n e soddisfa

\int_{-1}^{1} P_n(x)^2\,\mathrm{d}x = \frac{2}{2n+1}.

Dimostrazione. Conviene dare un nome alla funzione che si deriva:

u(x)=(x^2-1)^n=(x-1)^n(x+1)^n,

cosicché

P_n(x)=\frac{1}{2^n\,n!}\,u^{(n)}(x).

Passo 1: u(x) e le sue derivate fino all’ordine n-1 si annullano in \pm1. Applichiamo la formula di Leibniz per la derivata di un prodotto:

u^{(j)}(x)=\sum_{i=0}^{j}\binom{j}{i} \frac{\mathrm d^{i}}{\mathrm{d}x^{i}}\big[(x-1)^n\big]\cdot \frac{\mathrm d^{\,j-i}}{\mathrm{d}x^{\,j-i}}\big[(x+1)^n\big].

Derivare i volte (x-1)^n dà

\frac{\mathrm d^{i}}{\mathrm{d}x^{i}}(x-1)^n =\frac{n!}{(n-i)!}\,(x-1)^{\,n-i},

che contiene ancora il fattore (x-1) ogni volta che i<n. Se j\le n-1, in ogni addendo della somma si ha i\le j<n: tutti gli addendi contengono (x-1) e quindi si annullano in x=1. Scambiando il ruolo dei due fattori si ragiona allo stesso modo in x=-1. Dunque

u^{(j)}(\pm1)=0,\qquad j=0,1,\ldots,n-1 . \tag{14.8}

Passo 2: integrare per parti n volte. Sia r(x) un polinomio qualunque. Un singolo passo di integrazione per parti dà

\int_{-1}^{1} r\,u^{(n)}\,\mathrm{d}x =\Big[\,r\,u^{(n-1)}\Big]_{-1}^{1} -\int_{-1}^{1} r'\,u^{(n-1)}\,\mathrm{d}x =-\int_{-1}^{1} r'\,u^{(n-1)}\,\mathrm{d}x,

dove il termine di bordo è nullo per 14.8. L’integrale che resta ha la stessa forma di quello di partenza, con una derivata in meno su u e una in più su r. Ripetendo il procedimento n volte — e a ogni passo il termine di bordo è nullo, sempre per 14.8 — si ottiene

\int_{-1}^{1} r(x)\,u^{(n)}(x)\,\mathrm{d}x =(-1)^n\int_{-1}^{1} r^{(n)}(x)\,u(x)\,\mathrm{d}x , \tag{14.9}

dove il segno (-1)^n raccoglie il meno che compare a ciascuno degli n passi.

Passo 3: l’ortogonalità. Se \deg r<n, derivando r per n volte si ottiene la funzione identicamente nulla, r^{(n)}\equiv0, e quindi il secondo membro di 14.9 è zero. Dividendo per la costante 2^n\,n!,

\int_{-1}^{1} r(x)\,P_n(x)\,\mathrm{d}x=0 \qquad\text{per ogni } r \text{ di grado } <n .

In particolare, scegliendo r(x)=P_m(x) con m<n, si ha \langle P_n,P_m\rangle=0: i polinomi di Legendre sono a due a due ortogonali.

Passo 4: il coefficiente direttore di P_n(x). Serve per la norma. Scriviamo u(x)=(x^2-1)^n=x^{2n}+\cdots, dove i puntini indicano termini di grado minore di 2n. Derivando n volte, il termine di grado massimo diventa

\frac{\mathrm d^n}{\mathrm{d}x^n}x^{2n} =2n\,(2n-1)\cdots(n+1)\,x^{n}=\frac{(2n)!}{n!}\,x^{n},

mentre tutti gli altri danno potenze di grado minore. Dividendo per 2^n n!, il coefficiente direttore di P_n(x) è

a_n=\frac{(2n)!}{2^n\,(n!)^2}.

Poiché P_n(x) ha grado esattamente n, derivandolo n volte resta la costante

P_n^{(n)}(x)=n!\,a_n=\frac{(2n)!}{2^n\,n!} .

Passo 5: un integrale ausiliario. Poniamo

I_n=\int_{-1}^{1}(1-x^2)^n\,\mathrm{d}x .

Integriamo per parti derivando (1-x^2)^n e integrando il fattore 1:

I_n=\Big[x\,(1-x^2)^n\Big]_{-1}^{1} +2n\int_{-1}^{1}x^2(1-x^2)^{n-1}\,\mathrm{d}x =2n\int_{-1}^{1}x^2(1-x^2)^{n-1}\,\mathrm{d}x,

perché (1-x^2)^n si annulla in \pm1. Scrivendo ora x^2=1-(1-x^2), l’ultimo integrale si spezza in I_{n-1}-I_n, e si ottiene I_n=2n\,(I_{n-1}-I_n), cioè la ricorrenza

I_n=\frac{2n}{2n+1}\,I_{n-1}, \qquad I_0=\int_{-1}^{1}\mathrm{d}x=2 .

Moltiplicando fra loro queste uguaglianze per k=1,2,\ldots,n,

I_n=2\cdot\frac{2\cdot4\cdots(2n)}{3\cdot5\cdots(2n+1)} =\frac{2^{2n+1}\,(n!)^2}{(2n+1)!} .

Passo 6: la norma. Applichiamo 14.9 con r(x)=P_n(x), che ha grado n:

\int_{-1}^{1}P_n(x)^2\,\mathrm{d}x =\frac{1}{2^n n!}\int_{-1}^{1}P_n\,u^{(n)}\,\mathrm{d}x =\frac{(-1)^n}{2^n n!}\int_{-1}^{1}P_n^{(n)}\,u\,\mathrm{d}x .

Per il Passo 4 la quantità P_n^{(n)} è una costante e si porta fuori dall’integrale; inoltre (-1)^n u(x)=(1-x^2)^n, quindi ciò che resta è esattamente I_n:

\int_{-1}^{1}P_n^2\,\mathrm{d}x =\frac{1}{2^n n!}\cdot\frac{(2n)!}{2^n n!}\cdot I_n =\frac{(2n)!}{2^{2n}(n!)^2}\cdot\frac{2^{2n+1}(n!)^2}{(2n+1)!} =\frac{2\,(2n)!}{(2n+1)!} =\frac{2}{2n+1},

dove nell’ultimo passaggio si è usato (2n+1)!=(2n+1)\,(2n)!.

Di conseguenza \phi_n(x)=\sqrt{\frac{2n+1}{2}}P_n(x) è la versione ortonormale.

Equazione differenziale e funzione generatrice

I polinomi di Legendre soddisfano l’equazione:

\frac{\mathrm d}{\mathrm{d}x}\!\left[(1-x^2)P_n'(x)\right] +n(n+1)P_n(x)=0.

Questa equazione segue anche in senso inverso: la soluzione polinomiale di grado n, normalizzata a 1 in x=1, è P_n. La funzione generatrice compatta tutti i gradi in un’unica identità:

\frac{1}{\sqrt{1-2xt+t^2}}=\sum_{n=0}^{\infty}P_n(x)t^n, \qquad |t|<1,\quad -1\le x\le1.

Due conseguenze utili sono la simmetria P_n(-x)=(-1)^nP_n(x) e la formula ai capi P_n(1)=1, P_n(-1)=(-1)^n.

La famiglia in un grafico

La Figura 14.1 sovrappone i primi polinomi: si vede la parità alternata, il numero crescente di oscillazioni e il valore unitario comune all’estremo destro. Gli zeri sono interni e distinti; la loro separazione sarà dimostrata in Sezione 16.2.

Figura 14.1: Polinomi di Legendre di grado 0–5 su [-1,1]. La figura evidenzia simmetria, oscillazioni e comportamento agli estremi.

Una seconda figura verifica numericamente l’ortogonalità calcolando la matrice di Gram con quadratura composta del punto medio. Nella Figura 14.2 ogni cella riporta il valore di G_{ij}=\langle P_i,P_j\rangle: sulla diagonale si leggono i valori 2/(2n+1), cioè 2, 0.6667, 0.4, 0.2857, 0.2222, 0.1818, mentre fuori diagonale si trovano numeri dell’ordine di 10^{-8} o minori, cioè zero a meno dell’errore di quadratura.

m <- 12000
x <- -1 + (seq_len(m) - 0.5)*2/m
P <- sapply(0:5, legendre, x = x)
G <- crossprod(P)*(2/m)
d <- 5

par(mar = c(0.6, 3.6, 3.4, 0.6))
# scala radice: comprime il salto fra 2.0000 e 0.1818 senza colorare gli zeri
S   <- sqrt(abs(G)/max(abs(G)))
pal <- colorRampPalette(c("white", "#dbe9f6", "#92c5de",
                          "#3182bd", "#08519c"))(40)
image(0:d, 0:d, t(S[(d+1):1, ]), col = pal,
      breaks = seq(0, 1, length.out = 41),
      axes = FALSE, xlab = "", ylab = "")
axis(3, at = 0:d, tick = FALSE, line = -0.8,
     labels = sapply(0:d, function(k) as.expression(bquote(P[.(k)]))))
axis(2, at = 0:d, tick = FALSE, las = 1, line = -0.8,
     labels = sapply(d:0, function(k) as.expression(bquote(P[.(k)]))))
mtext("Matrice di Gram dei polinomi di Legendre", side = 3, line = 1.9,
      cex = 1.05, font = 2)
abline(h = (0:d) + 0.5, v = (0:d) + 0.5, col = "grey82")
box(col = "grey55")
for (i in 0:d) for (j in 0:d) {
  v <- G[i+1, j+1]
  text(j, d - i,
       if (i == j) sprintf("%.4f", v) else sprintf("%.0e", v),
       cex = 0.80, col = if (S[i+1, j+1] > 0.55) "white" else "grey25")
}
Figura 14.2: Matrice di Gram dei polinomi di Legendre di grado 0–5, calcolata per quadratura. L’intensità del blu cresce con \sqrt{|G_{ij}|}: le celle bianche sono numericamente nulle, quindi resta colorata solo la diagonale, che vale 2/(2n+1).
Nota

La figura è un controllo numerico, non una prova dell’ortogonalità: il ragionamento analitico usa Rodrigues. I numeri fuori diagonale non sono esattamente nulli perché l’integrale è stato sostituito da una somma finita: raffinando la quadratura (aumentando m) tendono a zero.

In sintesi

  • Un peso positivo w definisce un prodotto scalare sui polinomi; Gram–Schmidt sui monomi dimostra che la famiglia ortogonale esiste ed è unica a meno di normalizzazione, ma non è un buon algoritmo.
  • Su [-1,1] con w\equiv1 si ottengono i polinomi di Legendre, normalizzati da P_n(1)=1, con \|P_n\|_2^2=2/(2n+1).
  • Rodrigues serve per dimostrare l’ortogonalità; la ricorrenza a tre termini 14.7 serve per calcolare, in O(n).
  • Parità, valori agli estremi e zeri interni seguono dalla simmetria del peso e dall’ortogonalità, non da conti espliciti.

14.4 Esercizi

  1. Usando la formula di Rodrigues calcolare P_0(x), P_1(x) e P_2(x), inoltre verificarne i valori in \pm1.
  2. Usare la parità per dedurre che \int_{-1}^1 xP_{2k}(x)\,\mathrm{d}x=0.
  3. Spiegare perché la norma dei polinomi ortonormali è uno, mentre \|P_n\|_2^2=2/(2n+1).
  4. Verificare 14.7 per k=3 confrontando il risultato con l’espressione esplicita di P_4.

  1. Jørgen Pedersen Gram (1850-1916)↩︎

  2. Erhard Schmidt (1876-1959)↩︎

  3. Adrien-Marie Legendre (1752-1833)↩︎

  4. Benjamin Olinde Rodrigues (1795-1851)↩︎