Retta di regressione e spline lineari

Complementi di Matematica
e Calcolo Numerico
A.A. 2015-2016
Laboratorio 5 - Function files, Minimi quadrati e spline
FUNCTION-FILES MATLAB
Le funzioni matlab sono porzioni di codici scritte in un file indipendente che svolgono un
determinato compito e comunicano con lo spazio di lavoro solo attraverso i parametri in
ingresso ed in uscita.
L’intestazione di una function Matlab ha sempre la struttura:
out2, ...] = nomefun
function
| {z } [out1,
| {z }
|
{z
}
parola chiave
(in1, in2, ...)
|
{z
}
nome funzione parametri in ingresso
parametri in uscita
L’intestazione è seguita dalle istruzioni e la function terminerà con la parola chiave return.
Prima di essa, deve essere stato assegnato un valore a ciascuno dei parametri in uscita
out1,out2,...
La funzione nomefun deve essere salvata nel file nomefun.m.
Att.ne! Un file può contenere un unica funzione.
Le variabili assegnate nel blocco istruzioni interno alla function sono locali, ovvero vengono
cancellate dalla memoria al termine della chiamata.
Per chiamare una function, ad esempio dallo spazio di lavoro:
>> [value1,value2,value3]=nomefun(in1,in2,in3);
Una funzione può richiamare o essere richiamata da altre.
A titolo di esempio si riveda la funzione polysum vista nel laboratorio precedente.
1
APPROSSIMAZIONE DI FUNZIONI O DI DATI
Consideriamo il problema di valutare una funzione nota soltanto attraverso le misurazioni
sperimentali nella tabella seguente, in un punto diverso da quelli tabulati.
x
y
1
1.3
2
3.5
3
4.2
4
5.0
5
7.0
6
8.8
7
10.1
8
12.5
9
13
10
15.6
Con il comando plot(x,y,’*’) ottemiano il grafico dei dati.
16
14
12
10
8
6
4
2
0
1
2
3
4
5
6
7
8
9
10
Dal grafico vediamo che la relazione che intercorre tra x ed y è di tipo lineare ma che nessuna
retta passa esattamente per tutti i punti misurati, il che non stupisce se si tiene conto del
fatto che le misurazioni sperimentali sono affette da inevitabili errori. In questo caso non e’
più ragionevole pensare di richiedere cha la funzione approssimante interpoli i dati, e quindi
passi esattamente per i punti dati, perchè questo introdurrebbe inevitabili oscillazioni. Un
miglior approccio al problema sarebbe quello di cercare una retta che passi ’il più vicino
possibile’, in qualche senso, ai dati misurati (si veda la figura seguente). In un caso come
questo una buona soluzione è fornita dalla retta di regressione. Nella figura sotto a sinistra
in rosso il polinomio interpolatore in quella a destra in blu la retta di regressione.
16
16
14
14
12
12
10
10
8
8
6
6
4
4
2
2
0
1
2
3
4
5
6
7
8
9
0
10
2
1
2
3
4
5
6
7
8
9
10
RETTA DI REGRESSIONE LINEARE
Siano (xi , yi ), per i = 0, ..., N , N + 1 coppie di dati di origine sperimentale o originati
dal campionamento yi = f (xi ) di una funzione f (x). Ricordiamo che si chiama retta di
regressione lineare, oppure retta che approssima i dati (xi , yi ) nel senso dei minimi quadrati,
la retta y = p1 (x) = mx + q, che minimizza lo scarto quadratico
S=
N
X
2
|yi − p1 (xi )| =
i=0
N
X
|yi − (m xi + q)|2 ,
i=0
cioè con coefficienti m e q che risolvono il sistema lineare
!
!
#
" PN 2 PN
PN
x
y
m
x
x
i
i
i
i
i=0
i=0
i=0
= PN
.
PN
PN
q
y
1
x
i
i
i=0
i=0
i=0
Tale sistema si ottiene imponendo a zero le derivate di S rispetto alle variabili m e q.
In Matlab la retta di regressione si calcola con il comando
polyfit(x,y,1)
Esercizio 1. Si considerino i dati
x=[ 0 1
2
3
4
5
6
7
8
9
10
]
y = [ 0 1.25 2.27 3.04 3.77 4.71 5.91 7.19 8.29 9.12 9.83 ]
e si calcoli la retta di regressione lineare con il comando polyfit con grado di approssimazione
1. Si disegni in un grafico la retta di regressione nell’intervallo [−1, 11] con una linea nera e
si evidenzino i punti (xi , yi ) mediante un cerchietto rosso.
Esercizio 2. Si considerino le coppie di dati definiti come
>> x=linspace(0,1,10);
>> y=10*x+rand(size(x));
• Si calcoli il polinomio p9 (x) di grado 9 che interpola i dati assegnati
• Si calcoli inoltre la retta di regressione che approssima i dati nel senso dei minimi
quadrati.
3
• Si confrontino graficamente i polinomi calcolati rispetto ai dati assegnati. Se si ripete
il calcolo dei dati, il vettore rand cambia e quindi anche i valori delle ordinate. Si commentino le proprietà rispettive dell’approssimazione ai minimi quadrati e dell’interpolazione
di Lagrange in termini di sensibilitià rispetto alle perturbazioni sui dati.
Esercizio 3. Assegnati i punti di coordinate
>> x=[-5 -2 0.5 1 1.5 3 6];
>> y=[1.5 2 -1 2.5 1 -2 3];
si calcoli la retta di regressione che approssima i dati nel senso dei minimi quadrati e si
disegni il grafico della retta calcolata e dei dati (x, y). Verificare che la retta di regressione
lineare passa per il punto che ha per coordinate rispettivamente la media delle ascisse e la
media delle ordinate dei dati in tabella.
SPLINE LINEARI
Dato un insieme di punti (xi , yi ), per i = 0, ..., N , una spline lineare interpolante è una
funzione s(x) globalmente continua e tale che
- su ogni intervallino [xi , xi+1 ] è una retta, ovvero un polinomio di grado 1
- s(xi ) = yi per i = 0, ..., N
Assegnati i punti di coordinate
>> x=[-1 1 2 3 5];
>> y=[0 -1 5 2 1];
si disegni la spline lineare interpolante ed i punti della tabella evidenziati con un cerchietto.
Allo scopo si utilizzi il comando:
>> pp = interp1(x,y,’linear’,’pp’)
che crea e memorizza la spline in ’pp-form’ (N.B. in alcune versioni Matlab x ed y devono
essere vettori colonna). Per disegnarne il grafico si valuti la spline in un vettore di punti
ausiliari z con il comando ppval prima di utilizzare il comando plot per disegnarla, ovvero
>> z=linspace(-1,5);
>> ppz = ppval(pp,z);
>> plot(z,ppz);
4
In alternativa il comando
>> ppz=interp1(x,y,z,’linear’)
calcola e valuta la spline lineare interpolante direttamente nei punti del vettore z che deve
essere definito in precedenza.
Esercizio 1. Approssimare con una spline interpolante lineare la funzione
f (x) =
1
1 + x2
nell’intervallo [−5, 5] suddiviso in m sottointervalli di ampiezza H = ampiezza intervallo/m.
Definire 10000 punti equidistanti ausiliari in [−5, 5] e usarli:
• per disegnare sullo stesso grafico la funzione e la spline;
• per calcolare l’errore di approssimazione (massimo modulo della differenza tra la funzione f e la spline).
Riportare i risultati ottenuti nella sottostante tabella:
m
50
500
5000
H=10/m
Errore
Verificare che:
• per m che tende all’infinito l’errore tende a zero;
• l’errore è un O(H 2 ).
Esercizio 2. Ripetere l’esercizio precedente con le funzioni
1
f (x) = x sin
in [0.05, 0.5]
x
f (x) = ex cos(4x) in [0, π].
5
Esercizio 3. Di seguito vengono riportate le variazioni medie della temperatura sulla terra a
diverse latitudini in particolari condizioni. A partire dai dati (xi , yi ) memorizzati nei vettori
>> x=[-55:10:55];
>> y=-[3.25 3.37 3.35
3.2
3.12
3.02
3.02
3.07
3.17
3.32
3.3
3.22];
eseguire quanto segue:
• calcolare il polinomio interpolatore
• calcolare la spline lineare interpolante,
• rappresentare graficamente il polinomio, la spline e i dati x e y che sono stati considerati. Quale approssimazione appare piú ragionevole?
Esercizio 4. Nei vettori x e y seguenti sono riportate le coordinate di 17 punti che individuano, con un po’ di fantasia, la testa di un gattino
>> x = [2 2.05 2.1 2.15 2.2 2.25 2.6 2.8 3 3.2 3.4 3.75 3.8 3.85 3.9 3.95 4];
>> y = [1 1.31 1.44 1.53 1.6 2.3 1.92 1.98 2 1.98 1.92 2.3 1.6 1.53 1.44 1.31 1];
Predisporre un vettore contenente 1000 punti in [2, 4] e utilizzarlo per disegnare (in due
grafici distinti) le ricostruzioni dei dati ottenute calcolando:
• il polinomio interpolatore
• la spline lineare interpolante.
Confrontare i grafici ottenuti.
6