Ottava esercitazione
Esercizio 1
Esercizio 2
Esercizio 3
Esercizio 4
Soluzione analitica e numerica del metodo dei Minimi Quadrati
Esercizio 1
Dato il file pendolo.dat
contenente i dati di un esperimento della misura di g tramite pendolo semplice
nel formato
N
L_1 eL_1 T_1 eT_1
L_2 eL_2 T_2 eT_2
...
L_N eL_N T_N eT_N
(dove L=lunghezza in m, eL=errore su L, T=periodo, eT=errore sul periodo)
- determinare, utilizzando la soluzione analitica del metodo dei minimi quadrati,
i coefficienti a e b della relazione
T2 = (4 pi2)/g L
dove a=(4 pi2)/g e b=0.
- Disegnare i punti sperimentali con i loro errori e sovrapporre ad essa
la miglior retta determinata con il metodo dei minimi quadrati.
Soluzione analitica del metodo dei minimi quadrati (trascurando
l'errore sulle x):
La funzione che calcola la soluzione analitica dei minimi
quadrati avrà un prototipo del tipo:
void minquadrati(int n, double *x, double *y, double *ex, double *ey, double &a, double &b, double &ea, double &eb)
Esercizio 2
Il metodo dei minimi quadrati è risolvibile, nel caso generale,
solo numericamente. La funzione delle libreria CROOT R_MinuitSimpl
(così come tutte le altre funzioni con nome R_MinuitXXXXX)
minimizza la funzione
in funzioni dei parametri pi della funzione f e calcola il valore di questi ultimi
in corrispondenza del minimo.
Schema di utilizzo:
int ndat;
double *x,*y,*ex,*ey;
#define npar 2
double fchiq(int n, double *xpar){
// calcolo del chi-quadro
// valore di ritorno = valore del chi-quadro
}
int main(){
double par[npar]={val_1,val_2,...,val_npar}; // valori dei param. da cui iniziare
// la minimizzazione
double outpar[npar],err[npar],chiq;
R_MinuitSimpl(fchiq,npar,par,outpar,err,&chiq);
// outpar -> valore dei parametri in corrispodenza del minimo
// err -> errore sui parametri
// chiq -> valore della funzione nel minimo
return 0
}
Applicare ai dati dell'esercizio precedente la soluzione numerica del metodo
dei minimi quadrati prima trascurando poi considerando il contributo dell'errore su x
(termine con la derivata al denominatore).
Esercizio 3
Applicare il metodo dei minimi quadrati ai dati dell'elongazione di una molla in presenza della
forza di gravità e di un forza attrito.
I dati sono
contenuti nel file molla_con_attrito.dat secondo il formato
N
t1 et1 L1 eL1
t2 et2 L2 eL2
...
tN etN LN eLN
(t=tempo in sec.,L=elongazione in cm).
Determinare il valore dei parametri della funzione che descrive l'elongazione in funzione del tempo:
f(x,p1,p2,p3) = p1*exp(-p2*t)*cos(p3*t)
(trascurate l'errore sul tempo)
Esercizio 4
Realizzare un programma che realizzi il best fit di
una generica funzione di n parametri a una serie
di misure sperimentali. Il formato del file di input
sarà del tipo:
nome_funzione
numero_parametri
valore_iniziale_1 passo_1 minimo_1 massimo_1
...
valore_iniziale_n passo_n minimo_n massimo_n
numero_punti
x_1 y_1 ex_1 ey_1
...
x_m y_m ex_m ey_m
Il programma dovrà essere strutturato in funzioni che
realizzino i principali task:
- lettura del file
- calcolo degli estremi x e y del grafico
- realizzazione del grafico dei punti
- calcolo del best fit
- grafico della miglior curva sovrapposto ai punti
La selezione della funzione avverrà attraverso il nome
scritto nel file di input a partire da una lista di funzioni
note e compilate nel programma e per mezzo di un puntatore a
funzione:
string fun_name;
double (*fun)(double x, double *par);
...
if (fun_name == "retta") {
fun = retta;
} else if (fun_name == "esponenziale") {
fun = esponenziale;
} ...
} else {
cout << } EXIT(-1); FUNZIONE NON DISPONIBILE << ENDL;