%% TESTO % 1) Generare un vettore denominato x di dimensione 1000x1 contenente % numeri casuali dalla distribuzione normale standardizzata (assegnare il % numero 1000 ad una variabile denominata n). Per replicabilità dei % risultati utilizzare il seed 100 % % 2) Calcolare tramite ciclo for la distribuzione di frequenza degli % elementi del vettore x ottenuti utilizzando le classi (-\infty -2] (- 2 0] (0 % 1.5] (1.5 +\infty ) % Osserverazione \infty = infinito % % 3) Inserire la distribuzione di frequenze in una matrice denominata Freq % che contenga nella prima colonna gli estremi superiori delle classi e % nella seconda colonna le frequenze associate. % % 4) Controllare che le frequenze ottenute siano le stesse che si ottengono % utilizzando la funzione histogram % % 5) Formattare il risultato in una table che contenga come nomi di righe le % etichette che seguono (-\infty -2] (- 2 0] (0 1.5] (1.5 \infty] % % 6) Calcolare tramite doppio ciclo for annidato la distribuzione di % frequenza utilizzando le classi di cui sopra. Suggerimento il primo ciclo % for più esterno scorre sulle righe del vettore x il ciclo for più interno % scorre sugli elementi del vettore che contiene gli estremi superiori % delle classi % % 7) Calcolare la distribzione di frequenze in maniera vettoriale % utilizzando un solo ciclo che scorre sul vettore che contiene gli estremi % superiori delle classi %% SOLUZIONE clear rng default % viene fissato a 100 il seed dei numeri casuali rng(100) % si assegna n numeri dalla normale n=1000; x=randn(n,1); classi=[-Inf -2 0 1.5 Inf]; % Mostrare il grafico ad istogrammi utilizzando le classi % (-infty -2] % (- 2 0] % (0 1.5] % (1.5 infty] % Inizializzazione della matrice Freq % Freq nella prima colonna contiene gli estremi superiori delle classi, Freq=[classi(2:end)' zeros(length(classi)-1,1)]; % Calcolo delle frequenze utilizzando il ciclo for ed inserimento delle % stesse nella seconda colonna della matrice Freq for i=1:n if x(i) <= -2 % se x(i) è compreso tra -4 e -2 incrementa la cella Freq(1,2) % di un'unità Freq(1,2)= Freq(1,2)+1; elseif x(i)> -2 && x(i) <=0 % se x(i) è compreso tra -2 e 0 incrementa la cella Freq(2,2) % di un'unità Freq(2,2)= Freq(2,2)+1; elseif x(i) >0 && x(i) <=1.5 Freq(3,2)= Freq(3,2)+1; elseif x(i)> 1.5 Freq(4,2)= Freq(4,2)+1; else end end % Frequenze utilizzando il ciclo for disp('Matrice contenente la distribuzione di frequenza') disp(Freq) %% Frequenze tramite la funzione histogram % 4) Controllare che le frequenze ottenute siano le stesse che si ottengono % utilizzando la funzione histogram disp('Frequenze tramite la funzione histogram') h=histogram(x,classi); disp(h.Values) %% Frequenze tramite la funzione histcounts freqConHistCounts=histcounts(x,classi); %% Creazione della table con le etichette di riga richieste % 5) Formattare il risultato in una table che contenga come nomi di righe % le etichette che seguono (-4 -2] (- 2 0] (0 1.5] (1.5 4] rownam={'(-4 -2]' '(- 2 0]' '(0 1.5]' '(1.5 4]'}; Freqtable=array2table(Freq(:,2),'VariableNames',{'Distr_frequenze'}, ... 'RowNames',rownam); disp(Freqtable) %% Creazione della distribuzione di frequenze tramite doppio ciclo for % 6) Calcolare tramite doppio ciclo for annidato la distribuzione di % frequenza utilizzando le classi di cui sopra. classi=[-4 -2 0 1.5 4]; % Inizializzazione della matrice FreqCHK FreqCHK=[classi(2:end)' zeros(length(classi)-1,1)]; % Calcolo delle frequenze utilizzando doppio ciclo for for i=1:n % ciclo che scorre sugli elementi di x for j=1:length(classi)-1 % ciclo che scorre sugli elementi del vettore classi if x(i)> classi(j) && x(i) <= classi(j+1) % La seconda colonna della matrice FreqCHK viene aumentata di uno % se x(i) è compreso tra class(j) e classi(j+1) FreqCHK(j,2)= FreqCHK(j,2)+1; % L'istruzione break serve per teminare il loop su j % e continuare con il loop su i. % Dato che è stato trovato che classi(j) < x(i) <=classi(j+1) % e dato che x(i) appartiene ad una sola classe % non è necessario continuare il loop (ciclo for) su j e si può % passare direttamente all'elemento x(i+1) break else end end end %% Risoluzione dell'esercizio in maniera vettoriale % 7) Calcolare la distribzione di frequenze in maniera vettoriale % utilizzando un solo ciclo che scorre sul vettore che contiene gli estremi % superiori delle classi % Inizializzazione della matrice FreqCHK1 FreqCHK1=[classi(2:end)' zeros(length(classi)-1,1)]; for j=1:length(classi)-1 % ciclo che scorre sugli elementi del vettore classi % Inserisco in posizione j,2 gli elementi di x che sono compresi tra % classi(j) e classi(j+1) FreqCHK1(j,2)=sum( x> classi(j) & x <= classi(j+1)); end