Laboratorio 8 : Il Problema Lineare dei Minimi Quadrati
Laboratorio 8 : Il Problema Lineare dei Minimi Quadrati#
Siamo interessati a risolvere sistemi lineari sovradeterminati, ossia della forma
Se il problema non ha soluzione si cercano i vettori \(\mathbf{x}\in \mathbb{R}^{n}\) che soddisfano
Tale problema viene detto problema dei minimi quadrati.
In questo laboratorio vogliamo concentrarci su metodi numerici di risoluzione del problema dei minimi quadrati e vedere un’applicazione al fitting di dati.
La determinazione di un punto di minimo di \(\Psi(\mathbf{x})=\lVert A\mathbf{x}-\mathbf{b}\rVert_2\) si riconduce alla ricerca dei punti che annullano tutte le derivate parziali prime di \(\Psi\) e questo porta alle equazioni normali
Se la matrice \(A\) ha rango massimo, allora la soluzione del problema dei minimi quadrati (11) è unica e può essere ottenuta risolvendo il sistema (12).
In tal caso, si può utilizzare la fattorizzazione \(LU\) della matrice \(A^{\top}A\). Poiché la matrice \(A^{\top}A\) è simmetrica definita positiva, puo essere fattorizzata come
detta fattorizzazione di Cholesky, dove \(L\in\mathbb{R}^n\) è una matrice triangolare inferiore con elementi principali positivi. La soluzione del sistema delle equazioni normali (12) viene calcolata risolvendo successivamente i due sistemi di ordine \(n\) con matrice dei coefficienti triangolare
In alternativa, abbiamo discusso a lezione il metodo basato sulla fattorizzazione \(QR\) della matrice \(A\) per il calcolo della soluzione del problema dei minimi quadrati (11).
Esercizio 1
Si scriva una function che risolve il problema dei minimi quadrati sfruttando il seguente prototipo:
function [x,min_res] = minquad(A,b,flag)
%%MINQUAD risolve il problem ai minimi quadrati associato
% al sistema Ax=b con il metodo specificato in flag
% INPUT:
% A matrice del sistema
% b termine noto del sistema
% flag stringa che specifica il metodo di risoluzione
% OUTPUT:
% x soluzione del problema ai minimi quadrati, punto di minimo
% min_res valore del minimo
end
flagè una stringa che può assumere il valore'EqNormali'oppure'MetodoQR'e determina il metodo numerico con cui il problema dei minimi quadrati viene risolto all’interno della function.Si calcoli la fattorizzazione \(LU\) di \(A^{\top}A\) usando l’algoritmo di Doolittle visto nel Laboratorio 7a.
Si usi il comando MATLAB
qrper calcolare la fattorizzazione \(QR\) della matrice \(A\).Si usino le funzioni
backwardsolveeforwardsolve, implementate nel Laboratorio 7b, per risolvere i sistemi lineari triangolari risultanti.
Una tipica situazione in cui è necessario risolvere un problema dei minimi quadrati si presenta quando si vuole costruire una funzione che «si avvicini il più possibile» ad un insieme di dati.
Esercizio 2
Vogliamo trovare i coefficienti \(a_1\) e \(a_2\) della funzione \(f(t) = t(a_1+a_2 e^{-t})\) in modo che \(f\) approssi i dati \((t_i,f_i)\), \(i=0,1,2,3,4\), di Tabella 1 nel senso dei minimi quadrati
Per risolvere il problema del fitting di dati, si derivino la matrice \(A\) ed il vettore \(\mathbf{b}\) del problema dei minimi quadrati corrispondente. Si utilizzi la function minquad implementata nell’Esercizio 1 per risolvere il problema.
Si completi il seguente programma usando i dati forniti
% Soluzione del problema di fitting di dati
% Dati
t = ...
f = ...
% Definizione della matrice e del termine noto del sistema
A = ...
b = ...
% Soluzione usando le equazioni normali
flag = 'EqNormali';
[a,min_a] = minquad(A,b,flag);
fprintf("Il minimo dato dalla soluzione del sistema delle equazioni normali e' %1.2e\n",...
min_a);
% Soluzione usando il metodo QR
flag = 'MetodoQR';
[c,min_c] = minquad(A,b,flag);
fprintf("Il minimo dato dal metodo QR e' %1.2e\n", min_c);
% Plot dei dati
plot(t,f,'sk','LineWidth',1)
hold on;
% Valutazione della funzione approssimante nei punti dati in tfine
tfine = 0:0.02:1;
fa = ...
fc = ...
% Plot delle funzioni approssimanti sulla griglia tfine
plot(tfine, fa, '-b'); hold on
plot(tfine, fc, '--r','LineWidth',1);
xlabel('t'); legend('Dati','Soluzione delle equazioni normali','Soluzione del metodo QR','Location','best')
Il grafico risultante è mostrato qui sotto.
Quando la funzione approssimante cercata è un polinomio esistono le seguenti routine di MATLAB:
a = polyfit(xData,yData,m)restituisce il vettoreadi coefficienti del polinomio di grado \(m\) che approssima i dati(xData,yData)nel senso dei minimi quadrati.y = polyval(a,x)valuta nel puntoxil polinomio definito dai coefficientia.