Matlab
Esercitazione 2 – Generazione di variabili
Esercizio


Creare una funzione che dati due vettori con le coordinate di
due punti nel piano cartesiano, ne calcoli la distanza euclidea.
Lanciare la funzione con i seguenti dati
p1=[1 1]


p2=[4,10]
Date le coordinate dei vertici di un triangolo, calcolarne il
perimetro.
p1=[1 1]
p2=[4,10]
p3=[8 2]
(inserire le coordinate dei punti in una matrice 3x2)
Calcolare il perimetro di un pentagono con vertici
p1=[2 7] p2=[3 2] p3=[6 1] p4=[8 4] p5=[5 9]
Matrici “notevoli”
0 0 0
0 0 0
0 0 0
zeros (3)
ones (1,3)
linspace(a, b, n)
n
a
rand (1,3)
randn(1,3)
0.8147
0.9134
[1 1 1]
0.2785
distribuzione uniforme [0 1]
distribuzione gaussiana a media nulla
Esempio 2a: costruire una matrice con diverse distribuzioni sulle righe:
X=zeros(3,100) %inizializzazione
X(1, :) = rand(1,100);
X(2, :) = rand(1, 100);
X(3, :) = randn(1, 100)
n=100;
X=zeros(3,n) %inizializzazione
X(1, :) = rand(1, n);
X(2, :) = rand(1, n);
X(3, :) = randn(1, n)
b
Distribuzione uniforme
m
rand
0
1
ab

m


2

ba
 
12

a
b
rand  (b  a)  a
Esempio 3:
rand   12  m   3
m=1;
sigma=10;
M=10000
X=rand(1,M)*(sigma*sqrt(12))+m-sigma*sqrt(3)
Esempio 2b
Costruire una matrice con distribuzioni uniformi con diverse medie e
varianze:
• riga 1: media = 1, varianza = 10;
• riga 2: media = 0, varianza = 10;
• riga 3: media = 2, varianza = 1;
m=[1 0 2];
sigma=[10 10 1];
M=100000
X(1,:)=rand(1,M)*(sigma(1)*sqrt(12))+m(1)-sigma(1)*sqrt(3)
X(2,:)=rand(1,M)*(sigma(2)*sqrt(12))+m(2)-sigma(2)*sqrt(3)
X(3,:)=rand(1,M)*(sigma(3)*sqrt(12))+m(3)-sigma(3)*sqrt(3)
Esempio 2c
Ottimizzare il codice dell’Esercizio 2b utilizzando un ciclo for:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
X(1,:)=rand(1,M)*(sigma(1)*sqrt(12))+m(1)-sigma(1)*sqrt(3);
X(2,:)=rand(1,M)*(sigma(2)*sqrt(12))+m(2)-sigma(2)*sqrt(3);
X(3,:)=rand(1,M)*(sigma(3)*sqrt(12))+m(3)-sigma(3)*sqrt(3);
m=[100 0 2];
sigma=[10 10 1];
M=100000;
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
end
Distribuzione gaussiana
0
m
Esempio:
m=40;
sigma=10;
M=10000;
X=randn(1,M)*sigma+m;
randn   m
Segnale rumoroso
Esempio:
Plot
close all
x=1:0.1:20;
y=sin(x);
plot(x,y);
figure();
x=rand(1,100)
plot(x, ’.’);
y=sort(x);
figure(); plot(y);
figure(); plot(y, ’.’);
figure(); plot(y);
hold on
plot(y, ’.’)
subplot(1,3,1);plot(y);subplot(1,3,2);plot(y, ’.’);subplot(1,3,3); stairs(y)
subplot
1
2
3
4
5
6
1
2
subplot(2,3,1);plot(a)
subplot(2,3,2);plot(b)
...
subplot(2,3,6);plot(f)
subplot(1, 2, 1); plot(a);
subplot(1, 2, 2); plot(b);
hist
a=rand(1,100000);
hist(a,100)
b=rand(1,10000);
hist(a)
hist(b,100)
hist(a,100)
a=randn(1,100000);
hist(b)
hist(a)
Esempio 2d
Visualizzare gli istogrammi delle righe della matrice dell’esempio 2c:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
end
figure(); hist(X(1,:));
figure(); hist(X(2,:));
figure(); hist(X(3,:));
figure();
subplot(1,3,1); hist(X(1,:)); subplot(1,3,2); hist(X(2,:)); subplot(1,3,3);hist(X(3,:));
Esempio 2e
Ottimizzare il codice dell’Esercizio 2d utilizzando un ciclo for:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
end
figure();
subplot(1,3,1); hist(X(1,:)); subplot(1,3,2); hist(X(2,:)); subplot(1,3,3);hist(X(3,:));
m=[100 0 2];
sigma=[10 10 1];
M=100000;
figure();
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
subplot(1,3,i); hist(X(i,:));
end
Esempio 2d
Visualizzare gli istogrammi delle righe della matrice dell’esempio 2c:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
end
figure(); hist(X(1,:));
figure(); hist(X(2,:));
figure(); hist(X(3,:));
figure();
subplot(1,3,1); hist(X(1,:)); subplot(1,3,2); hist(X(2,:)); subplot(1,3,3);hist(X(3,:));
Esempio 2e
Ottimizzare il codice dell’Esercizio 2d utilizzando un ciclo for:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
end
figure(); hist(X(1,:)); figure(); hist(X(2,:)); figure();hist(X(3,:));
m=[100 0 2];
sigma=[10 10 1];
M=100000;
figure();
for i = 1 : length(m)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
figure(); hist(X(i,:));
end
Istruzione if
Esempio 5: cambiare media e varianza
delle distribuzioni di MATLAB:
m=[100 0 2];
sigma=[10 10 1];
M=100000;
distribuzione = [‘g’ ‘g’ ‘u’];
if expression1 % is true
% execute these commands
elseif expression2 % is true
% execute these commands
else
% the default
% execute these commands
end
for i = 1 : length(m)
if strcmp(distribuzione(i),‘u’)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
elseif strcmp(distribuzione(i),‘g’)
X(i,:)= randn(1,M)*sigma+m;
else
disp(‘errore’);
end
figure(); hist(X(i,:));
end
Esercizio
Funzione per la generazione di variabili
Esercizio
Trasformare il codice dell’esercizio 2e in una funzione che abbia come ingressi il numero
di colonne della matrice X, il vettore delle medie, il vettore delle varianze e il tipo di
distribuzione.
L’uscita della funzione deve essere la matrice X.
Una volta creata la funzione, questa deve essere richiamata in un file esterno e deve
avere come ingressi i seguenti dati:
media=[15 15 100];
sigma=[1 10 10];
M=100000;
distribuzione = [‘g’ ‘g’ ‘u’];
Devono poi essere visualizzati gli istogrammi delle sue righe e calcolate la media e la
varianza.
Definizione della funzione
Vogliamo creare una funzione che abbia come ingressi:
• il numero di osservazioni;
• il vettore delle medie
• il vettore delle deviazioni standard
• il tipo di distribuzione
E che abbia come unica uscita la matrice X.
function [X] = generazione (M, media, sigma, distribuzione)
Il codice
for i = 1 : length(m)
if strcmp(distribuzione(i),‘u’)
X(i,:)=rand(1,M)*(sigma(i)*sqrt(12))+m(i)-sigma(i)*sqrt(3);
elseif strcmp(distribuzione(i),‘g’)
X(i,:)= randn(1,M)*sigma+m;
else
disp(‘errore’);
end
end
Utilizzo della funzione
media=[15 15 100];
sigma=[1 10 10];
M=100000;
distribuzione = [‘g’ ‘g’ ‘u’];
X=generazione(M, media, sigma, distribuzione);
for i = 1 : length(media)
figure(); hist(X(:,i));
m_e(i) = mean(X(:,i));
s_e (i) = std(X(:,i));
end
Un altro esempio (da conservare)
media=[0 0 0 0];
sigma=[1 1 1 10];
M=1000000;
distribuzione = [‘u’ ‘u’ ‘u’ ‘u’];
Esercizio
Dato il vettore:
[3 4 2 0 5 3 5 5 2 4 3 2 6 1 4 4 4 1 2 5 100]
calcolarne media e mediano.
Escludere l’ultimo elemento del vettore e ripetere nuovamente l’operazione.
Costruire l’istogramma manualmente. (Utilizzare la funzione bar per graficarlo)
Scarica

Matlab_-_Esercitazione_2_-_generazione_di_variabili