Alvise Sommariva Universit`a degli Studi di Padova Dipartimento di Matematica Pura e Applicata
14 maggio 2021
Approssimazione ai minimi quadrati (discreti)
Si digiti sulla command-window di Matlab >> x = 0 : 0 . 0 1 : 2∗p i;
>> y=s i n( 2∗ x ) +(10ˆ(−1) ) ∗r a n d(s i z e( x ) ) ; >> p l o t( x , y ,’ r− ’) ;
Dal grafico si capisce che la funzione pu`o essere interpretata come una
perturbazionedella funzione sin(2x ) nell’intervallo [0, 2π].
Ci interessa approssimare non tanto la funzione plottata bens`ı sin(2x ) (che in qualche modo `e la funzione senzarumore).
Osserviamo che non ha senso utilizzare un interpolante polinomiale p di grado N n`e una spline interpolante visto chericostruirebberola funzione
Scriviamo sulla command-window di Matlab/Octave
help polyfit
In una recente release di Matlab abbiamo P O L Y F I T Fit p o l y n o m i a l to d a t a .
P O L Y F I T ( X , Y , N ) f i n d s the c o e f f i c i e n t s of a p o l y n o m i a l P ( X ) of d e g r e e N t h a t f i t s the data , P ( X ( I ) ) ˜=Y ( I ) , in a l e a s t −squares sense .
L’help dice chepolyfitcalcola i coefficienti del polinomio di grado N chemeglio
approssima i dati (X (k), Y (k)), k = 1, . . . , M nel senso deiminimi quadrati, ovvero determina l’unico polinomio pN∈ PN tale che sia minima la quantit`a
kf − PNk2= v u u t M X i =1 |f (xi) − PN(xi)|2.
Approssimazione ai minimi quadrati (discreti)
Nota. (Norme enorm)
Ricordiamo che se u ∈ RM allora kuk2:= v u u t M X i =1 u2
In Matlab, per calcolare tale quantit`a si usa il comando
Il problema di determinare il polinomio di grado 1 chemeglioapprossima i dati (X (k), Y (k)), k = 1, . . . , M nel senso deiminimi quadrati, viene usualmente dettoregressione lineare.
Vediamone un esempio in Matlab, implementato indemo regressione lineare.m.
f u n c t i o n d e m o _ r e g r e s s i o n e _ l i n e a r e % E s e m p i o r e g r e s s i o n e l i n e a r e . a =0; b =1; h = 0 . 0 5 ; x=a : h : b ; % a s c i s s e e q u i s p a z i a t e y=0.1+x +(10ˆ( −1) )∗r a n d(s i z e( x ) ) ; % o r d i n a t e % v a l u t a z i o n e c o e f f . d e l l ’ a p p r o s s i m a n t e a i m i n i m i q u a d r a t i % ” p n ” d i ” f ” d i g r a d o ”1” c o e f f=p o l y f i t( x , y , 1 ) ; % v a l o r e ” p 1 ” n e l l e a s c i s s e ” x ” z=p o l y v a l( coeff , x ) ; % e r r o r e | | f−p 1 | | 2 e r r 2=norm( z−y , 2 ) ; f p r i n t f(’ \n \ t E r r o r e r e g r e s s i o n e norma2 : %1.2 e ’, err2 ) ; % g r a f i c o d e l p o l i n o m i o a i m i n i m i q u a d r a t i d i g r a d o ”1” ht = 1 / 1 0 0 0 0 ; u=a : ht : b ; v=p o l y v a l( coeff , u ) ;
Tale routine,
definisce una funzione che corrisponde a unaperturbazionedella retta r (x ) = 0.1 + x ;
determina mediante il comando
coeff=polyfit(x,y,1);
i coefficienti del polinomio p1di grado 1 chemeglioapprossima i dati (x (k), y (k)), k = 1, . . . , 21 = (1/h) + 1 nel senso deiminimi quadrati; valuta kf − p1k2;
disegna in una stessa figura il grafico dei dati (x (k), y (k)), k = 1, . . . , 21 e del polinomio pn, valutato mediante il comando
v=polyval(coeff,u);
nelle ascisse di testu; si osservi che i punti vengono rappresentati mediante cerchietti, utilizzando varie preferenze di colore e grandezza; inserito il titoloregressione lineare, e una legenda.
Lanciato da command-window abbiamo >> d e m o _ r e g r e s s i o n e _ l i n e a r e
E r r o r e r e g r e s s i o n e n o r m a 2 : 1 . 2 9 e−01 >>
e la figura che segue.
Regressione lineare
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.2 0.4 0.6 0.8 1 1.2 Regressione lineare Dati Retta di regressioneFigura:Grafico che illustra l’approssimazione ai minimi quadrati di grado 1 su una
La figura mostra che la retta soluzione del problema non interpola i dati, ma in generale liapprossimatutti relativamente bene.
Nota.
Vista la presenza di numeri casuali, ogni esempio che viene compiuto mediante tale routine `e potenzialmente diverso.
Esercizio (Facile)
Nel codice `e presente la riga di codice
y=0.1+x+(10^(-1))*rand(size(x));
Rifare l’esercizio, sostituendola con
y=0.1+x+(10^(-1))*2*(rand(size(x))-0.5);
Un altro esempio
Digitiamo quindi in un filedemo minimiquadrati.m
Tale routine, dapprima definisce una funzione che corrisponde a una
perturbazionedi sin(x ) in [0, 2π]. Di seguito per n che varia da 1 a 8,
determina i coefficienti del polinomio pndi grado n chemeglioapprossima i dati (x (k), y (k)), k = 1, . . . , 101 = (1/h) + 1 nel senso deiminimi quadrati;
valuta kf − pnk2;
disegna in una stessa figura il grafico dei dati (x (k), y (k)), k = 1, . . . , 101 e del polinomio pn, cambiando il titolo al variare del grado, e inserendo una legenda;
mette in pausa per 5 secondi il processo.
Esercizio (Facile)
Nel codice precedente `e presente la riga di codice
y=sin(2*x)+(10^(-1))*rand(size(x));
Rifare l’esercizio, sostituendola con
y=sin(2*x)+(10^(-1))*2*(rand(size(x))-0.5);
Un altro esempio
Dal punto di vista numerico se il grado `e basso, in virt`u delle concavit`a e delle convessit`a di sin(2 x ), il polinomio pN fornisce un’approssimazione scadente, mentre migliora per N ≥ 5.
Osserviamo che per N > 10 tale routine incorre in problemi di condizionamento e stampa un warning del tipo
0 1 2 3 4 5 6 7 -1.5 -1 -0.5 0 0.5 1
1.5 Minimi quadrati di grado:5
Dati
Approssimante Minimi quadrati
Figura:Grafico che illustra l’approssimazione ai minimi quadrati di grado 5 su una
perturbazionedella funzione sin (2x ) (campionamento in nodi equispaziati)).
Un altro esempio
Vediamo ora i risultati: >> d e m o _ m i n i m i q u a d r a t i n : 1 norma2 : 1 . 6 3 e+01 n : 2 norma2 : 1 . 6 3 e+01 n : 3 norma2 : 1 . 5 0 e+01 n : 4 norma2 : 1 . 5 0 e+01 n : 5 norma2 : 5 . 5 0 e+00 n : 6 norma2 : 5 . 5 0 e+00 n : 7 norma2 : 1 . 2 2 e+00 n : 8 norma2 : 1 . 2 2 e+00 >> Nota.I risultati variano da esperimento a esperimento, visto la presenza di numeri casuali.
Nota.
Esercizio
Si supponga che le coppie, (xk, yk), k = 1, . . . , 21, corrispondano alla k-sima riga della matrice (vedasifile dati.m):
d a t i =[ 1 . 0 0 0 0 e+00 −1.9450 e+00 1 . 2 0 0 0 e+00 −1.2530 e+00 1 . 4 0 0 0 e+00 −1.1400 e+00 1 . 6 0 0 0 e+00 −1.0870 e+00 1 . 8 0 0 0 e+00 −7.6000 e−01 2 . 0 0 0 0 e+00 −6.8200 e−01 2 . 2 0 0 0 e+00 −4.2400 e−01 2 . 4 0 0 0 e+00 −1.2000 e−02 2 . 6 0 0 0 e+00 −1.9000 e−01 2 . 8 0 0 0 e+00 4 . 5 2 0 0 e−01 3 . 0 0 0 0 e+00 3 . 3 7 0 0 e−01 3 . 2 0 0 0 e+00 7 . 6 4 0 0 e−01 3 . 4 0 0 0 e+00 5 . 3 2 0 0 e−01 3 . 6 0 0 0 e+00 1 . 0 7 3 0 e+00 3 . 8 0 0 0 e+00 1 . 2 8 6 0 e+00 4 . 0 0 0 0 e+00 1 . 5 0 2 0 e+00 4 . 2 0 0 0 e+00 1 . 5 8 2 0 e+00 4 . 4 0 0 0 e+00 1 . 9 9 3 0 e+00 4 . 6 0 0 0 e+00 2 . 4 7 3 0 e+00 4 . 8 0 0 0 e+00 2 . 5 0 3 0 e+00 5 . 0 0 0 0 e+00 2 . 3 2 2 0 e + 0 0 ] ;
Esercizio
Si definisca un fileesercizio regressione lineare.mcome segue.
Si scarichi il filefile dati.me si digitifile datio in alternativa si copi il contenuto di tale file nel testo della routine;
Mediante il comandodati(:,1),dati(:,2), si selezionino le ascissexe le ordinatey.
Si calcolino i coefficientiPdella retta di regressione. Stampare il polinomio di regressione p∗
1 utilizzandofprintf. Il polinomio `e
P(1) · x + P(2) oppure P(2) · x + P(1)? Si valuti il polinomio di regressione p∗
1 nei punti equispaziati xje sia zk= p1∗(xk).
Si calcoli mediante tali valutazioni, l’errore di regressione v u u t 21 X k=1 (yk− zk)2 e lo si stampi a video.
In una figura si determino le coppie estratte dal file di dati e si disegni la retta di regressione.
La correzione a questo esercizio si pu´o trovare nell’implementazione
S.D. Conte e C. de Boor,Elementary Numerical Analysis, 3rd Edition, Mc Graw-Hill, 1980.
Wikipedia, Least Squares,
http://en.wikipedia.org/wiki/Least squares. Wikipedia, Minimi quadrati,
http://it.wikipedia.org/wiki/Minimi quadrati.