Statistica Computazionale - Modulo di programmazione in Java 2 - F.M.Stefanini Esame del 9.04.2001 (1) Si consideri la classe StatStim composta da un solo metodo statico che calcola il momento 1 N r r-esimo empirico di un vettore di dati, m r x i N i 1 public class StatStim { public static double calcMomR(double[] vdata, double r){ double mome=0; for(int i = 0; i<vdata.length;i++) mome = mome + Math.pow(vdata[i], r)/vdata.length; return mome; } } Sfruttando la relazione varianza m2 m1 , definire un metodo statico calcVarianza che ha come parametro un vettore di double e che restituisce il valore della varianza calcolato impiegando calcMomR. 2 (2) Scrivere la classe FiltroFile che contiene gli attributi nomeinput e nomeoutput, entrambi stringhe, ed il metodo trasformaMinuscolo. Lo scopo del metodo trasformaMinuscolo è di copiare il file di input in quello di output trasformando tutti i caratteri di ogni riga di ingresso in minuscole. Definire un metodo main che crea un oggetto FiltroFile e invoca il metodo trasformaMinuscolo ed infine stampa l'oggetto con System.out.println. Nell'implementazione della classe si segua lo schema UML sotto riportato FiltroFile //Nome file di input privato String nomeinput // Nome file di output privato String nomeoutput // Costruttore FiltroFile(Stringa nomein, String nomeout) // Nessun valore restituito, nessun parametro void trasformaMinuscolo() String toString() 1 (3) Implementare una classe AgendaMese, seguendo l'indicazione dello schema UML: la classe memorizza il mese (da 1 a 12) e le ore lavorate in quel mese. Implementare la classe RegistroAnno, che memorizza Cognome e Nome del lavoratore e la sua attività lavorativa annuale (12 mesi). Questa classe deve contenere un metodo che calcola il totale di ore lavorate in 12 mesi. Commentare la struttura della classe AgendaMese (attributi e metodi) con commenti interpretabili dal programma javadoc. Produrre la relativa documentazione html con javadoc. RegistroAnno cognomeNome // dati di un lavoratore agenda // contiene 12 mesi di tipo AgendaMese RegistroAnno(String lavoratore) // cognomenome set(mese, ore) // setta un mese get() // restituisce un mese e le sue ore totaleOre() // restituisce la somma di ore lavorate getLavoratore() // restituisce cognome e nome toString() | | AgendaMese mese // da 1 a 12 totaleOreLavorate // da 0 a 200 AgendaMese() // costruttore AgendaMese(valoremese, valoreore) setMese setOre getMese getOre toString 2 Statistica Computazionale Modulo di programmazione in Java 2 - F.M.Stefanini Esame del 4.06.2001 Esercizi (1) Si definisca la classe YearEta composta da un solo metodo statico, calcolaEta, che calcola l'età di una persona trasformando il numero di anni in numero di mesi. La classe deve contenere un metodo main che domanda l'età all'utente e riceve da tastiera il mese e l'anno di nascita, secondo l'algoritmo seguente: 1. Richiedi anno nascita all'utente (numero intero). 2. Richiedi mese di nascita all'utente (numero intero). 3. Chiama il metodo calcolaEta con argomento i due valori ottenuti da tastiera ed il mese (numero) ed anno (numero) corrente. Il metodo calcolaEta deve restituire il numero di mesi. 4. Stampa a schermo l'età in anni e quella in mesi. (2) Scrivere la classe SimulaCV che contiene gli attributi media, varianza, simulatiX, CV (tutti in virgola mobile), ed i metodi xToCV e simulaRun. Lo scopo del metodo simulaRun è di generare 1000 numeri estratti dalla distribuzione Gaussiana (normale) che ha i valori di media e varianza contenuti nei rispettivi attributi di classe. Definire un metodo main che assegna a media il valore 12, alla varianza il valore 4, e che chiama simulaRun per generare i valori e memorizzarli in simulaX; quindi invoca il metodo xToCV per calcolare il coeff. di variazione dei valori simulati e memorizzarlo in CV. Infine, il main stampa il valore degli attributi media, varianza, CV impiegando System.out.println. (3) Implementare la classe IntegraGrid, seguendo fedelmente l'indicazione dello schema UML. Lo scopo di IntegraGrid è di calcolare il momento r-esimo , m r 1 N N x i 1 r i per una funzione di densità approssimata su di una griglia di punti compresi tra minimoX e massimoX, ad una dato valore di risoluzione (differenza tra due punti successivi della griglia). Creare la classe DiscreDistri che eredità metodi e attributi da IntegraGrid e ridefinisce il metodo double valDensi(double x), in modo che il valore di densità sia dato dall'equazione: p( x) e x IntegraGrid 3 double risoluzione; double minimoX; double massimoX; int numeropuntigriglia; double ordineR;//ordine del momento double[] griglia; IntegraGrid() // double valDensi(double x) {return 1/(massimoX-minimoX)}; // momento m-esimo double momentoM(double mome); // normalizza sommatoria griglia ad uno // void normalizzaGriglia(); | | DiscreDistri DiscreDistri() // costruttore // Valore della funzione di densità di probabilità double valDensi(double x); Nel costruttore l'algoritmo procede come segue: 1. Parametri del Costruttore: risoluzione, minimoX, massimoX 2. Calcola numero di unti nella griglia 3. Calcola densità in ogni punto della griglia 4. normalizza i valori in modo che la sommatoria dei punti della griglia sommi ad uno Definire un metodo main in cui il minimo di x è 0.001, il massimo è 100, = 4, risoluzione 0.5. Procedere con il calcolo del momento quarto. Commentare la struttura della classe DiscreDistri (attributi e metodi) con commenti interpretabili dal programma javadoc. Produrre la relativa documentazione html con javadoc. 4 Statistica Computazionale Modulo di programmazione in Java 2 - F.M.Stefanini Esame del 19.06.2001 Esercizi (1) Nella classe Convert si costruisca il metodo statico ToPolar che riceve le coordinate cartesiane px e py del punto p (parametri del metodo in virgola mobile) e le trasforma le in e d impiegando le funzioni: py arcsin d 2 2 d p x p y Commentare la classe seguendo lo stile di javadoc. La classe deve contenere un metodo main che domanda all'utente di immettere a tastiera le coordinate di un punto e che stampa i valori trasformati. (2) Scrivere la classe Anova1W che legge i risultati sperimentali contenuti nel file "risulta.txt" e che calcola due statistiche riassuntive (in virgola mobile). I numeri nel file sono separati da spazi bianchi ed organizzati in righe e colonne (matrice). Il costruttore riceve come parametri il valore del numero di righe e di colonne contenute nel file. Anova1W tabella;// matrice di dati stats1;// vettore statistica S1 stats2;//vettore statistica S2 Anova1W // costruttore getData // metodo di lettura da file calcStatSuf // calcolo delle statistiche stampaStat // metodo che stampa le statistiche main // metodo di prova della classe Il metodo calcStatSuf effettua il calcolo di due statistiche per ogni colonna della matrice dei dati. Indicando con i la riga e j la colonna della matrice dei dati, si ha: I S1, j xi , j i 1 I S 2, j x 2 i , j i 1 Il metodo getData legge i dati dal file. Il metodo stampaStat stampa a schermo due righe di valori relativi a S1 e S2 (un valore per ogni colonna j). Definire un metodo main che crea un oggetto Anova1W legge i dati, calcola e stampa le statistiche S1,j e S2,j per ogni j=1,2,…,J. (3) Definire la classe TavolaAnova1W come specializzazione della classe costruita nell'esercizio precedente, Anova1W, seguendo il diagramma UML sottoriportato. Gli attributi sono calcolati con le seguenti formule: 5 J S1, j S1, j debg I * I J * I j 1 j 1 J S1, j 2 dewg S 2, j I j 1 glb J 1 J 2 glw J * ( I 1) debg QMB glb dewg QMW glw QMB Femp QMW TavolaAnova1W debg dewg glb glw QMB QMW Femp TavolaAnova1W // costruttore calcolaDevGl // calcola debg, dewg,glb,glw calcolaQMeF // calcola QMB, QMW, Femp stampaTabella //stampa a schermo Il metodo stampaTabella deve produrre a schermo la tabella sotto riportata (gli attributi sono sostituiti dai rispettivi valori): |----------------------------------------------------------------| |Fonti di variazione | GL | SQ | QM | F | |----------------------------------------------------------------| | Tra gruppi | glb | debg | QMB | Femp | | Entro gruppi | glw | dewg | QMW | | |----------------------------------------------------------------| 6 Statistica Computazionale Modulo di programmazione in Java 2 - F.M.Stefanini Esame del 12.07.2001 Esercizi (1) Nella classe Convert si costruisca il metodo statico ToCarte che riceve le coordinate polari del punto p, e d, e le trasforma in coordinate cartesiane px e py (parametri del metodo in virgola mobile) impiegando le funzioni: p y d sin 2 2 p x d p y Commentare la classe seguendo lo stile di javadoc. La classe deve contenere un metodo main che domanda all'utente di immettere a tastiera le coordinate e che stampa i valori trasformati. (2) Scrivere la classe Reg1 che legge i risultati sperimentali contenuti nel file "risulta.txt" sotto forma di due colonne, la prima delle y e la seconda delle x. Definire nella classe un metodo calcStatSuf per calcolare le statistiche riassuntive (in virgola mobile): I S 2 xi i 1 2 I T2 y 2 i i 1 I W xi y i i 1 I numeri nel file sono separati da spazi bianchi ed organizzati in righe e colonne (matrice). Il costruttore riceve come parametri il valore del numero di righe contenute nel file. Reg1 tabella;// matrice di dati s2;// statistica S2 t2;// statistica T2 w; // statistica W Reg1 // costruttore getData // metodo di lettura da file calcStatSuf // calcolo delle statistiche stampaStat // metodo che stampa le statistiche main // metodo di prova della classe Il metodo getData legge i dati dal file. Il metodo stampaStat stampa a schermo le statistiche calcolate. Definire un metodo main che crea un oggetto Reg1, legge i dati, calcola e stampa le statistiche. (3) Definire la classe Reg1Par come specializzazione della classe costruita nell'esercizio precedente, Reg1, seguendo il diagramma UML sottoriportato. L'attributo è calcolato con la seguente formula: W beta1 S Reg1 7 | | Reg1Par beta1; Reg1Par // costruttore calcolaBeta1 // calcola beta1 toString //stampa a schermo Il metodo toString deve fornire lo stato complessivo dell'oggetto istanziato di classe Reg1Par 8