Capitolo 5 Interpolazione ed approssimazione
Transcript
Capitolo 5 Interpolazione ed approssimazione
Capitolo 5 Interpolazione ed approssimazione 5.1 Interpolazione Data una funzione f : [a, b] → R e un insieme {xi }ni=1 ⊂ [a, b], sia Ln−1 f (x) il polinomio di grado n − 1 interpolatore di f nei punti xi (cioè Ln−1 f (xi ) = f (xi ). Chiameremo i punti xi nodi di interpolazione (o, più semplicemente, nodi ). Un generico punto x̄ ∈ [a, b] in cui si valuta Ln−1 f sarà chiamato nodo target (o, più semplicemente, target). 5.1.1 Nodi di Chebyshev Si chiamano n nodi di Chebyshev gli zeri del polinomio Chebyshev di grado di jπ+ π2 , j = 0, . . . , n − 1. n Tn (x) = cos(n arccos(x)). Dunque, xj+1 = cos n Si chiamano n nodi di Chebyshev estesi (o di Chebyshev–Lobatto) i nodi jπ , j = 0, . . . , n − 1. Tali nodi appartengono all’intervalx̄j+1 = cos n−1 lo [−1, 1]. I nodi di Chebyshev relativi ad un intervallo generico [a, b] si ottengono semplicemente per traslazione e scalatura. 5.1.2 Interpolazione di Lagrange Dato un insieme di n coppie di interpolazione {(xi , yi )}ni=1 , il polinomio elementare di Lagrange i-esimo (di grado n − 1) è Li (x) = n Y (x − xj ) j=1 j6=i 23 xi − xj . 24 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE L’algoritmo per il calcolo dei polinomi di Lagrange su vettori (colonna) target x è riportato in Tabella 5.1. function y = lagrange(i,x,nodi) % % y = lagrange(i,x,nodi) % n = length(nodi); m = length(x); y = prod(repmat(x,1,n-1)-repmat(nodi([1:i-1,i+1:n]),m,1),2)/... prod(nodi(i)-nodi([1:i-1,i+1:n])); Tabella 5.1: Polinomio elementare di Lagrange. Il polinomio di interpolazione si scrive dunque pn−1 (x) = n X yi Li (x) . i=1 5.1.3 Sistema di Vandermonde Dato il polinomio pn−1 (x) = a1 xn−1 + a2 xn−2 + . . . + an−1 x + an e n coppie di interpolazione {(xi , yi )}ni=1 , il corrispondente sistema di Vandermonde si scrive x1n−1 xn−1 2 .. . n−1 xn−1 xnn−1 x1n−2 . . . x1 x2n−2 . . . x2 .. .. . ... . n−2 xn−1 . . . xn−1 xnn−2 . . . xn 1 a1 y1 1 a2 y 2 .. .. = .. . . . 1 an−1 yn−1 1 an yn (5.1) L’implementazione dell’algoritmo per il calcolo della matrice di Vandermonde è riportata in Tabella 5.2. Alternativamente, si può usare la function di GNU Octave vander. 5.1. INTERPOLAZIONE 25 function V = vandermonde(nodi,varargin) % % V = vandermonde(nodi) % n = length(nodi); if (nargin == 1) m = n; else m = varargin{1}; end V = repmat(nodi’,1,m).^repmat([m-1:-1:0],n,1); Tabella 5.2: Matrice di Vandermonde. 5.1.4 Interpolazione di Newton Data una funzione f , definiamo le differenze divise nel seguente modo: f [x] = f (x) f [x] − f [x1 ] f [x1 , x] = x − x1 ... = ... f [x1 , x2 , . . . , xk−1 , x] − f [x1 , x2 , . . . , xk−1 , xk ] f [x1 , x2 , . . . , xk−1 , xk , x] = x − xk L’algoritmo per il calcolo delle differenze divise è riportato in Tabella 5.3. function d = diffdiv(nodi,valori) % % d = diffdiv(nodi,valori) % n = length(nodi); for i = 1:n d(i) = valori(i); for j = 1:i-1 d(i) = (d(i)-d(j))/(nodi(i)-nodi(j)); end end Tabella 5.3: Differenze divise. 26 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE L’interpolazione nella forma di Newton si scrive dunque L0 f (x) = d1 w = (x − x1 ) Li f (x) = Li−1 f (x) + di+1 w, i = 1, . . . , n − 1 w = w · (x − xi+1 ), i = 1, . . . , n − 1 ove di = f [x1 , . . . , xi ] . Il calcolo delle differenze divise e la costruzione del polinomio di interpolazione possono essere fatti nel medesimo ciclo for. Sfruttando la rappresentazione dell’errore ! ! i i Y Y (x − xj ) f [x1 , . . . , xi , xi+1 ] (x − xj ) f [x1 , . . . , xi , x] ≈ f (x)−Li−1 f (x) = j=1 j=1 (5.2) è possibile implementare un algoritmo per la formula di interpolazione di Newton adattativo, che si interrompa cioè non appena la stima dell’errore è più piccola di una tolleranza fissata. Dato il polinomio interpolatore nella forma di Newton pn−1 (x) = d1 + d2 (x − x1 ) + . . . + dn (x − x1 ) · . . . · (x − xn−1 ) , si vede che le differenze divise soddisfano il sistema lineare 0 ... ... 0 1 f (x1 ) dn 0 ... 0 (x2 − x1 ) 1 dn−1 f (x2 ) .. . . . . . . .. .. .. = .. .. .. . Qn−2 0 (xn−1 − xj ) . . . (xn−1 − x1 ) 1 d2 f (xn−1 ) j=1 Qn−1 f (xn ) d1 ... . . . (xn − x1 ) 1 j=1 (xn − xj ) (5.3) 5.2 Interpolazione polinomiale a tratti Data una funzione f : [a, b] → R e un’insieme {xi }ni=1 ⊂ [a, b] di nodi ordinati, consideriamo l’interpolante polinomiale a tratti Lck−1 f di grado k −1. Su ogni intervallo hi = xi+1 − xi essa coincide con il polinomio di grado k − 1 ai,1 (x − xi )k−1 + ai,2 (x − xi )k−2 + . . . + ai,k−1 (x − xi ) + ai,k . (5.4) Dunque, l’interpolante polinomiale a tratti è completamente nota una volta noti i nodi e i coefficienti di ogni polinomio. 5.2. INTERPOLAZIONE POLINOMIALE A TRATTI 5.2.1 27 Strutture in GNU Octave In GNU Octave è possibile definire delle strutture, cioè degli insiemi (non ordinati) di oggetti. Per esempio, le istruzioni S.a = 1; S.b = [1,2]; generano la struttura S S = { a = b = 1 1 2 } L’interpolazione polinomiale a tratti è definita mediante una struttura solitamente chiamata pp (piecewise polynomial), che contiene gli oggetti pp.x (vettore colonna dei nodi), pp.P (matrice dei coefficienti), pp.n (numero di polinomi), pp.k (grado polinomiale aumentato di uno) e pp.d (numero di valori assunti dai polinomi). La matrice P ha dimensione n × k e, con riferimento a (5.4), Pij = ai,j . Nota una struttura pp, è possibile valutare il valore dell’interpolante in un generico target x̄ con il comando ppval(pp,xbar). È possibile definire una struttura anche attraverso il comando mkpp(x,P). 5.2.2 Splines cubiche Le splines cubiche sono implementate da GNU Octave con il comando spline che accetta in input il vettore dei nodi e il vettore dei valori e restituisce la struttura associata. La spline cubica costruita è nota come not-a-knot, ossia viene imposta la continuità della derivata terza (generalemente discontinua) nei nodi x2 e xn−1 . Lo stesso comando permette di generare anche le splines vincolate: è sufficiente che il vettore dei valori abbia due elementi in più rispetto al vettore dei nodi. Il primo e l’ultimo valore verranno usati per imporre il valore della derivata alle estremità dell’intervallo. 28 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE Implementazione di splines cubiche in GNU Octave Con le notazioni usate fino ad ora, si può costruire una spline cubica S a partire dalla sua derivata seconda nell’intervallo generico [xi , xi+1 ] ′′ S[x (x) = i ,xi+1 ] mi+1 − mi (x − xi ) + mi , hi i = 1, . . . , n − 1 (5.5) ove mi = S ′′ (xi ) sono incogniti, con m1 = mn = 0. Integrando due volte la (5.5), si ottiene mi+1 − mi (x − xi )2 + mi (x − xi ) + ai 2hi mi mi+1 − mi (x − xi )2 + ai (x − xi ) + bi (x − xi )3 + S[xi ,xi+1 ] (x) = 6hi 2 ′ S[x (x) = i ,xi+1 ] ove le costanti ai e bi sono da determinare. Innanzitutto, richiedendo la proprietà di interpolazione, cioè S[xi ,xi+1 ] (xj ) = f (xj ), j = i, i + 1, si ottiene bi = f (xi ), hi hi f (xi+1 ) − f (xi ) − (mi+1 − mi ) − mi = ai = hi 6 2 f (xi+1 ) − f (xi ) hi hi = − mi+1 − mi hi 6 3 ′ A questo punto, richiedendo la continuità della derivata prima, cioè S[x (xi ) = i−1 ,xi ] ′ S[xi ,xi+1 ] (xi ) per i = 2, . . . , n − 1, si ottiene hi−1 hi−1 + hi hi f (xi+1 ) − f (xi ) f (xi ) − f (xi−1 ) mi−1 + mi + mi+1 = − . 6 3 6 hi hi−1 (5.6) Risulta chiaro che ci sono n − 2 equazioni e n incognite mi . Splines cubiche naturali Si impone che il valore della derivata seconda agli estremi dell’intervallo sia 0. Dunque m1 = mn = 0. Il sistema lineare (5.6) diventa allora 1 h61 0 . .. 0 0 0 ... h1 +h2 3 h2 6 ... ... ... ... ... ... 0 ... ... 0 ... ... ... ... ... ... hn−2 6 hn−2 +hn−1 3 ... 0 0 0 .. . m1 d1 m2 d2 . . . . . . . = . . . 0 . . hn−1 mn−1 dn−1 6 mn dn 1 29 5.2. INTERPOLAZIONE POLINOMIALE A TRATTI function pp = splinenaturale(x,y) % % function pp = splinenaturale(x,y) % n = length(x); x = x(:); y = y(:); h = x(2:n)-x(1:n-1); d1 = h(2:n-2)/6; d0 = (h(1:n-2)+h(2:n-1))/3; rhs = (y(3:n)-y(2:n-1))./h(2:n-1)-(y(2:n-1)-y(1:n-2))./h(1:n-2); S = diag(d1,-1)+diag(d0)+diag(d1,1); m = zeros(n,1); m(2:n-1) = S\rhs; a = (y(2:n)-y(1:n-1))./h(1:n-1)-h(1:n-1).*(m(2:n)/6+m(1:n-1)/3); b = y(1:n-1); pp.x = x; pp.P = [(m(2:n)-m(1:n-1))./(6*h),m(1:n-1)/2,a,b]; pp.k = 4; pp.n = n-1; pp.d = 1; Tabella 5.4: Spline cubica naturale. (xi−1 ) (xi ) − f (xi )−f , i = 2, . . . , n − 1. con d1 = dn = 0 e di = f (xi+1h)−f hi−1 i L’algoritmo per il calcolo della struttura associata ad una spline cubica naturale è riportato in Tabella 5.4. Splines cubiche vincolate Si impongono due valori d′1 e d′2 per la derivata S ′ (x1 ) e S ′ (xn ), rispettivamente. Si ricava dunque a1 = d′1 mn − mn−1 (xn − xn−1 )2 + mn−1 (xn − xn−1 ) + an−1 = d′n 2hn−1 da cui h1 f (x2 ) − f (x1 ) h1 m1 + m2 = − d′1 3 6 h1 hn−1 f (xn ) − f (xn−1 ) hn−1 mn−1 + mn = d′n − 6 3 hn−1 30 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE Il sistema lineare da risolvere diventa dunque h h1 1 0 ... ... 0 m1 d1 3 6 h1 h1 +h2 h2 0 ... 0 6 3 6 m. 2 d.2 . . . . . .. .. .. .. .. .. .. 0 = . .. .. ... ... ... ... . 0 . . . hn−2 hn−2 +hn−1 hn−1 dn−1 mn−1 0 ... 0 6 3 6 hn−1 hn−1 mn dn 0 ... ... 0 6 3 con d1 = f (x2 )−f (x1 ) h1 − d′1 e dn = d′n − f (xn )−f (xn−1 . hn−1 Splines cubiche periodiche Si impone S ′′ (x1 ) = S ′′ (xn ) e S ′ (x1 ) = S ′ (xn ). Si ricava dunque m1 = mn mn − mn−1 a1 = hn−1 + mn−1 hn−1 + an−1 2 da cui m1 − mn = 0 h1 hn−1 hn−1 f (x2 ) − f (x1 ) f (xn ) − f (xn−1 ) h1 m1 + m2 + mn−1 + mn = − 3 6 6 3 h1 hn−1 Il sistema lineare da risolvere diventa dunque 1 0 ... ... ... 0 −1 m1 d1 h2 h1 h1 +h2 0 ... ... 0 6 3 6 m2 d2 h2 +h3 h3 h2 0 0 ... 0 m3 d3 6 3 6 . . .. .. . . . . . .. .. .. .. .. .. . . = .. .. .. .. .. ... ... ... ... ... . . . . hn−2 +hn−1 hn−1 hn−2 dn−1 0 m ... ... 0 n−1 6 3 6 hn−1 hn−1 h1 h1 mn dn 0 . . . 0 3 6 6 3 con d1 = 0 e dn = f (x2 )−f (x1 ) h1 − f (xn )−f (xn−1 ) . hn−1 Splines cubiche not-a-knot Si impone la continuità della derivata terza in x2 e xn−1 . Si ricava dunque m3 − m2 m2 − m1 = h1 h2 mn−1 − mn−2 mn − mn−1 = hn−2 hn−1 5.2. INTERPOLAZIONE POLINOMIALE A TRATTI 31 da cui 1 1 1 1 m2 + m3 = 0 m1 − + h h1 h2 h2 1 1 1 1 1 mn−1 + mn−2 − + mn = 0 hn−2 hn−2 hn−1 hn−1 Il sistema lineare da risolvere diventa dunque 1 − h11 − h12 h12 0 ... 0 d1 m1 h1 h1 +h2 h2 h1 0 ... 0 6 3 6 m. 2 d.2 . . . . . .. .. .. .. .. .. 0 .. = .. .. .. ... ... ... ... 0 . . . hn−2 hn−2 +hn−1 hn−1 0 mn−1 dn−1 ... 0 6 3 6 1 1 1 1 dn mn 0 ... 0 hn−2 − hn−2 − hn−1 hn−1 con d1 = dn = 0. Rappresentazione dell’errore Supponiamo di usare un metodo di interpolazione polinomiale a tratti di grado k − 1 in un intervallo [a, b] e consideriamo due diverse discretizzazioni, rispettivamente con n1 e n2 nodi, con intervalli di lunghezza media h1 = (b − a)/(n1 − 1) e h2 = (b − a)/(n2 − 1). Gli errori di approssimazione saranno verosimilmente err1 = Chk1 e err2 = Chk2 . Si ha dunque err2 = err1 h2 h1 k da cui log err2 − log err1 = k(log h2 − log h1 ) = −k(log(n2 − 1) − log(n1 − 1)) . Dunque, rappresentando in un grafico logaritmico-logaritmico l’errore in dipendenza dal numero di nodi, la pendenza della retta corrisponde al grado di approssimazione del metodo, cambiato di segno. 5.2.3 Compressione di dati Supponiamo di avere un insieme molto grande di coppie di nodi/valori {(xi , yi )}N i=1 e di non conoscere la funzione che associa il valore al nodo corrispondente. Ci poniamo il problema di comprimere i dati, ossia memorizzare il minor 32 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE numero di coefficienti pur mantenendo un sufficiente grado di accuratezza. Una prima idea potrebbe essere quella di selezionare alcuni dei nodi, diciamo n, e di costruire la spline cubica su quei nodi. Il costo di memorizzazione, oltre ai nodi, sarebbe dunque pari a 4(n − 1). Rimarrebbe il problema di scegliere i nodi da memorizzare, visto che non si suppone siano equispaziati. Si potrebbe ridurre il costo di memorizzazione (a n) usando un unico polinomio interpolatore: rimarrebbe il problema della scelta dei nodi e, probabilmente, si aggiungerebbe un problema di mal condizionamento sempre dovuto alla scelta dei nodi. Un’idea che combina le tecniche discusse è la seguente: si usa una interpolazione a tratti (anche lineare) per ricostruire i valori della funzione sconosciuta in corrispondenza di n nodi di Chebyshev. Si usa poi un unico polinomio interpolatore su quei nodi. Il rapporto di compressione è 2N/n, considerando che non è necessario memorizzare i nodi di Chebyshev, ma solo i coefficienti del polinomio interpolatore (e trascurando i due estremi dell’intervallo). 5.2.4 Il comando find Supponiamo di voler implementare una function per la valutazione della funzione ( sin(x) se x ≥ 0 f (x) = − sin(x) se x < 0 Una implementazione potrebbe essere function y = f(x) if (x >= 0) y = sin(x); else y = -sin(x); end La forte limitazione di questa implementazione è l’impossibilità di avere un risultato corretto quando x è un vettore anziché uno scalare. Si può dunque ricorrere al comando find. Per esempio, dato il vettore x=[-1,0,1], il comando find(x >= 0) restituisce il vettore [2,3]. Cioè, gli elementi 2 e 3 del vettore x soddisfano la relazione x>=0. Allora, una function che implementa correttamente la funzione data per un input vettoriale generico è 33 5.3. APPROSSIMAZIONE function y = f(x) y = zeros(size(x)); index1 = find(x >= 0); y(index1) = sin(x(index1)); index2 = find(x < 0); y(index2) = -sin(x(index2)); 5.3 5.3.1 Approssimazione Sistema normale per i minimi quadrati L’approssimazione ai minimi quadrati porta alla risoluzione di un sistema sovradeterminato Ax = b, A ∈ Rn×m , b ∈ Rn×1 , n > m . La soluzione ai minimi quadrati coincide con la soluzione del sistema normale AT Ax = AT b . (5.7) Si pensi al caso di approssimazione mediante polinomi: la matrice A è la matrice di Vandermonde costruita a partire dai nodi di interpolazione, fino al grado m − 1. La matrice AT A risulta essere simmetrica e definita positiva. Pertanto, è teoricamente possibile utilizzare la fattorizzazione di Cholesky per risolvere il sistema. In maniera più efficiente, si può usare la fattorizzazione A = QR, con Q ∈ Rn×m ortogonale e R ∈ Rm×m triangolare, senza il bisogno di calcolare esplicitamente la matrice AT A. Si ha infatti AT Ax = AT b ⇔ RT QT QRx = RT QT b ⇔ RT (Rx − QT b) = 0 ⇔ Rx = QT b . In ogni caso, il numero condizionamento della matrice AT A potrebbe essere molto elevato. Si può ricorrere alla decomposizione SVD. Sia A = U SV T , U ∈ Rn×n , S ∈ Rn×m , V ∈ Rm×m con U e V matrici ortogonali e s1 0 . . . 0 S= 0 0 . .. 0 0 ... ... 0 s2 0 ... 0 .. ... ... ... . . . . 0 sm−1 0 ... ... 0 sm ... ... ... 0 .. .. .. .. . . . . ... ... ... 0 34 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE La soluzione ai minimi quadrati è quella che minimizza kAx − bk2 . Per l’ortogonalità di U e V , si ha kAx − bk2 = U T (AV V T − b)2 = kSz − dk2 con z = V T x e d = U T b. Il minimo di kSz − dk2 si ha per zi = di /si , i = 1, . . . , m, da cui poi si ricava x = V z. 5.3.2 Il comando polyfit Nel caso di approssimazione ai minimi quadrati con polinomi, è possibile usare il comando polyfit. Dati due vettori di nodi e valori x e y di lunghezza n, il comando polyfit(x,y,m-1), m < n, restituisce i coefficienti del polinomio di grado m − 1 approssimante nel senso dei minimi quadrati. Ovviamente, se m = n, il polinomio è l’unico interpolante. 5.4 Esercizi 1. Si implementi una function y = lagrange(i,x,nodi) che valuta il polinomio di Lagrange i-esimo nel vettore x. 2. Si implementi una function y = interplagrange(nodi,valori,x) per la formula di interpolazione nella forma di Lagrange. 3. Si testi l’interpolazione nella forma di Lagrange della funzione di Runge nell’intervallo [−5, 5] su nodi equispaziati. Si prendano rispettivamente n = 11, 21, 31, 41, 51 nodi di interpolazione e si valuti l’interpolante su 5(n − 1) + 1 nodi target equispaziati. Si producano delle figure mettendo in evidenza i nodi di interpolazione, la funzione di Runge e l’interpolante. 4. Si implementi una function y = chebyshev(n) per il calcolo dei nodi di Chebyshev nell’intervallo [−1, 1]. 5. Si ripeta l’esercizio 3 usando nodi di interpolazione di Chebyshev anziché nodi equispaziati. 6. Si implementi una function V = vandermonde(nodi) per il calcolo della matrice di Vandermonde definita in (5.1). 7. Si implementi una function y = interpvandermonde(nodi,valori,x) per la formula di interpolazione mediante matrice di Vandermonde. Si spieghino i risultati ottenuti. 5.4. ESERCIZI 35 8. Si ripeta l’esercizio 3, usando la formula di interpolazione mediante matrice di Vandermonde. Si usi il metodo di Hörner implementato nel Capitolo 2, Tabella 2.1 per la valutazione del polinomio. 9. Si implementi una function y = interpnewton(nodi,valori,x) per il calcolo del polinomio di interpolazione nella forma di Newton. 10. Si ripeta l’esercizio 3, usando la formula di interpolazione di Newton. 11. Si modifichi l’implementazione dell’interpolazione nella forma di Newton, in modo da prevedere come parametro opzionale di input la tolleranza per l’errore (in norma infinito) di interpolazione, stimato come in (5.2). Nel caso la tolleranza non sia raggiunta, l’algoritmo si interrompe all’ultimo nodo di interpolazione. La function deve fornire in uscita il numero di iterazioni e la stima dell’errore. 12. Si considerino n = 21 nodi di interpolazione equispaziati nell’intervallo [−5, 5]. Si interpoli in forma di Newton la funzione y = cos(x) sull’insieme di nodi target {−2, 0, 1} per diverse tolleranze e, successivamente, sull’insieme di nodi target {−2π, π}. Si spieghino i risultati ottenuti. 13. Si calcolino i numeri di condizionamento della matrice di Vandermonde (5.1) e della matrice dei coefficienti dell’interpolazione di Newton, da ordine 2 a 20 (considerando nodi equispaziati in [−1, 1] e se ne produca un grafico semilogaritmico nelle ordinate. Si discutano i risultati. 14. Si implementi una function pp = lintrat(x,y) per l’interpolazione lineare a tratti. 15. Si verifichi, mediante un grafico logaritmico-logaritmico, il grado di approssimazione (errore in norma infinito) delle splines cubiche naturali per la funzione di Runge. Si considerino un numero di nodi di interpolazione equispaziati nell’intervallo [−5, 5] da n = 11 a n = 91 e 102 nodi target equispaziati. 16. Si ripeta l’esercizio precedente con l’interpolazione lineare a tratti. 17. Data la struttura associata ad una spline cubica, si ricavi la corrispondente struttura per la derivata seconda. 18. Si ripeta l’esercizio 15, confrontando però la derivata seconda della funzione di Runge e la derivata seconda della spline cubica not-a-knot associata. 36 CAPITOLO 5. INTERPOLAZIONE ED APPROSSIMAZIONE 19. Si considerino le coppie {(xi , yi )} ove gli xi sono N = 1001 nodi equispaziati nell’intervallo [0, 2π] e yi = sin(xi ). Mediante il procedimento descritto in § 5.2.3 (interpolazione lineare a tratti e interpolazione su nodi di Chebyshev estesi), si determini il minimo grado n necessario per comprimere i dati con un errore in norma infinito inferiore a 10−5 . Si determini poi l’errore in corrispondenza del rapporto di compressione 286. Infine, si giustifichi la stagnazione dell’errore di approssimazione per grado di interpolazione maggiore di 10. 20. Si implementino due functions per la risoluzione del sistema normale (5.7) tramite fattorizzazione QR e tramite decomposizione SVD. Si consulti l’help dei comandi qr e svd. 21. Si considerino i vettori x=linspace(0,3*pi,101) e y=sin(x)+(rand(size(x))-0.5)/5 Le coppie (xi , yi ) possono essere interpretate come dati affetti da rumore. Si costruiscano i polinomi di approssimazione ai minimi quadrati, con grado opportuno. Si determini sperimentalmente quale è il grado polinomiale che meglio ricostruisce la funzione seno. Indicando con A+ la matrice pseudoinversa (AT A)−1 AT , si ha A+ = V S + U T , ove S + è la matrice pesudoinversa di S. Risulta 1 0 ... ... 0 0 ... s1 0 1 0 ... 0 0 ... s2 .. . . . . .. + . .. S =. . . . 0 ... 0 ... 0 s 1 0 0 ... m−1 1 0 ... ... 0 0 ... sm 0 0 ∈ Rm×n 0 0 0 Nel caso si = 0, si sostiuisce il corrispondente elemento nella pseudoinversa con 0.