You are on page 1of 5

Sessione 1.

%1. Esercizio
-Generare una matrice magica di ordine 5;
a = magic (5)
-Effettuare la somma per riga; [matrice trasposta]
b = sum(a)'
-Effettuare la somma per colonna;
c = sum(a)
-Effettuare la somma degli elementi sulla diagonale principale.
d = sum(diag(a))
-somma elementi sulla diagonale
e = sum(diag(fliplr(a)))
%2. Esercizio
-Generare una matrice magica di ordine 4, ed eseguire le seguenti operazioni:
n=4
a= magic (n)
-Sostituire agli elementi maggiori di 10 il valore 10;
i=a>10 %trovami se esistono elementi di a pi grandi di 10
a(i)=10 %se esistono li sostituisci con 10
-Sostituire all'elemento minimo il valore 0.
x=min(min(a)) %min del min perch altrimenti solo con min(a) mi darebbe il
vettore
y= a==x
%trovami in a dove vera x
a(y)=0
%sostituisce in a il valore di y
%3. Esercizio
-Generare un vettore di 1000 rendimenti distribuiti secondo una distribuzione
normale standard;
V = randn (1000,1) % rand 1000 righe, 1 colonna
-Costruire un nuovo vettore di 100 elementi campionati a caso dal vettore generato
al passo precedente
1)
c=randperm(1000)
V ([c(1:100)])
2)

F= [1:100]; %vettore
V= V*100; %metto in percentuale
Indice= ceil(V); % arrotondo
Indice(F) %ho fatto il campionamento
%4. Esercizio
-Aprire il file Excel DatiPrezzo.xls [data prezzo];
dati = xlsread('DatiPrezzi.xlsx');
date= dati(:,1);
prezzi= dati(:,2); %colonna
date= x2mdate(date); %converto formato excel in matlab
-Individuare la data corrispondente al prezzo massimo;
maxprice= max(prezzi);
indice= maxprice == prezzi; sarebbe: indice= maxprice==dati(:,2) %(dammi un vettore
che mi dia 1 quando vera)vettore di tutti zeri tranne per il prezzi max
datemax= date(indice); %trovo la corrispondente al prezzo massimo
f= x2mdate (datemax) %converto formato excel in matlab
g= datestr (f)%converto il numero in data
-Calcolare la media utilizzando:
.Una funzione nativa: media1= mean(prezzi)
.Unaltra istruzione vettoriale:
z= size(prezzi);
vettoreriga= ones(1, z(1,1));
media2= vettoreriga*prezzi/ z(1,1)
.Un ciclo for
somma=0

for i=1:z(1,1)
somma=somma+prezzi(i,1)
end
media3=somma/z(1,1)
%5. Esercizio
-Generare due serie (1000 osservazioni) di rendimenti distribuiti normalmente;
serie= randn (1000,2);
-Calcolare il vettore delle medie e la matrice varianza-covarianza;
media= mean(serie)
matriceVarCov= cov(serie)
-Imporre le seguenti statistiche:
mu1=0.02;mu2=0.03;sigma1=0.20;sigma2=0.30;ro12=0.75
mu= [0.02 0.03];
s1= 0.20;
s2= 0.3;
rho=0.75;
s12= rho*s1*s2;
matricesigmaVarCov=[s1 s12; s12 s2]
Sessione 4.
%1. Esercizio
-Caricare la serie dei prezzi dellazione Enel dal file DatiPrezzi.xlsx,
verificando il corretto ordinamento (ascending)
dati = xlsread ('DatiPrezzi.xlsx');
date= dati(:,1);
Prezzi= dati(:,2);
[date idx]= sort(date); %il comando sort ordine le date. qui date il nome del
file e idx sta per la location.
Prezi = Prezzi(idx); %quindi ordino il vettore prezzi in modo ascendente
Ordinato = [date Prezi];
-Passare ai rendimenti logaritmici, calcolando rendimento medio e volatilit annua.
rendimentoLog = diff (log(Prezzi));% (prezzo oggi-prezzo ieri)/ prezzo ieri
rendimentoMedio= mean(rendimentoLog)
volatility= var(rendimentoLog)*sqrt(252)
-Utilizzando la funzione xlsread scrivere nello stesso file i rendimenti (dalla
cella C2).
xlswrite('DatiPrezzi.xlsx',rendimentoLog,1,'C3')
%2. Esercizio(252 sono i giorni lavorativi)
-Noto un processo di stocastico Wt, tale per cui deltaWt ~ N (mu, deltat?sigma
quadro), con mu = 0 e sigma=0.2 (su base annua)
Simulare 1000 sentieri possibili di evoluzione di Wt con 250 step giornalieri
(deltat = 1), sapendo che W0 = 0.
mu=0
sigma=0.2;
dt=1;
paths=1000; %sentieri da generare
N=250; %giorni
dw = (0.2/sqrt (252)* randn(paths,N)); %moto .. normale con media zero e scarto
quadratico medio/ giorni lavorativi (252)
T= [0:dt:N] %vettore dei tempi
W_0= zeros(paths,1); %partenza moto brow (vettore)
W= cumsum([W_0 dw],1); %cumsum = somma cumulata
-Generare il grafico a linea dei 1000 scenari cos ottenuti.
plot (W)
xlabel('T') %serve per scrivere il nome nel grafico ..sulle ascisse
ylabel('w')
Sessione 5.
%1. Esercizio
-Creare una funzione che generi una sequenza di date (schedule) utilizzando la

funzione datemnth (studiandola sulla guida), che riceva come input le date di
inizio e fine e la frequenza.
-Modificare la funzione per trattare la frequenza come input opzionale.
datainizio= datenum ('31/12/2012');
dataFine= datenum ('31/12/2014');
frequenza=1; %mensili, trimestrali=4
schedule= esercizio(datainizio,dataFine,frequenza); %prendo esercizio e apro la
funzione tramite "open esercizio"
FUNZIONE:
function schedule= esercizio(datainizio,dataFine,frequenza);
periodo= yearfrac (datainizio, dataFine); %frazioni di anni tra date
mesi= [0: 12/frequenza :periodo*12]; %vettore che va da 0 con passo
12/1 per periodo *12,,,,,conta gli anni (inizio fine)
schedule=datemnth (datainizio, mesi) %contai mesi dalla data di inizio
alla fine

datestr (schedule) %lo metto per ultimo


%2. Esercizio
-c. Creare una funzione (scrumble) che, dato un vettore di input restituisca un
vettore con gli stessi elementi del vettore di partenza ma in ordine casuale.
(suggerimento: utilizzare la funzione randperm)
n=30;
x= [1:n]; %vettore creato
scrumble= originale (x,n);
FUNZIONE:
function scrumble= originale (x,n)
K= length (x); %max(x) sarebbe stata la stessa cosa
Y= randperm(K); %numeri in maniera invertita
scrumble= x(Y)

Sessione Ultima.

%1. Esercizio
-Creare una funzione utente GenNormRandVariables con argomenti di input e con
argomento di output la matrice X contenente le serie generate:
1. matrice varianza-covarianza (Sigma)
2. vettore delle medie (Media)
3. numero di estrazioni da campionare (NRepl)
-Inizializzare nella funzione il generatore di numeri casuali alle impostazioni di
default
-Utilizzare la funzione creata per generare due vettori (x1 e x2) di lunghezza 100
di estrazioni casuali normali con matrice varianza-covarianza e media
-Popolare la matrice X di output concatenando orizzontalmente i due vettori
verticali x1 e x2.
-Includere nella funzione il controllo della consistenza delle dimensioni della
matrice di var-cov [] e del vettore delle medie, prevedendo un messaggio di errore
nella command window in caso di inconsistenza.
%tic e toc calcolano il tempo di svolgimento della funzione
tic
serie=randn(1000,2); %genero normale di due vettori di 1000 componenti
media= mean(serie);
matriceVarCov= cov(serie);

sigma1= 0.20; %dati


sigma2=0.30; %dati
var1= sigma1^2;
var2=sigma2^2;
ro= 0.75; %correlazione
cov12=sigma1*sigma2*ro; %calcolo covarianza
SIGMAquadro= [var1 cov12; cov12 var2] %matrice VarCov
SIGMA = chol(SIGMAquadro); %dev standard
vetMEDIA= [0.02 0.03]; %dato
vetMEDIAreplicate= repmat(vetMEDIA, 1000,1); %la cambio per poter fare i calcoli
X= serie*SIGMA+vetMEDIAreplicate %serie 1000*2, sigma 2*1000 e vet 2*1000
t=toc
%2. Esercizio
-Partendo dallarray X generato nella funzione precedente, generare un vettore Y il
cui elemento generico yi tale che:yi = 0.5 * x1i + 0.5 * x2i + ei dove ei uno
shock normalmente distribuito con standard deviation pari a 0.01.
x1= X(:,1)
x2= X(:,2)
epsilon= 0.01*randn(1000,1)
Y= 0.5*x1 + 0.5*x2 + epsilon
-Effettuare una regressione lineare di Y rispetto alla matrice X per determinare la
matrice dei parametri A tale per cui:Y = X*A
A=X\Y
-Generare un vettore colonna D della stessa lunghezza di Y, contenente una sequenza
di date con frequenza mensile e partenza oggi (suggerimento: today)
D= datemnth(today,1:1000);
datestr (D) %converte il formato numerico delle date
-Se Y un vettore di rendimenti di un indice e D rappresenta le date di
osservazione, identificare le date corrispondenti alle osservazioni di Y pi grandi
in valore assoluto di 2 standard deviations di Y (suggerimento: abs, std) e
restituire la lista delle date in formato stringa sul command window;
SDrend = std(Y)%deviazione standard di y
indice= abs(Y)>2*SDrend %valore assoluto Y
datenuove= D(indice)
datenuovissime= datestr (datenuove)
-Eliminare dal vettore D e Y tutte le osservazioni in cui gli elementi di Y sono
maggiori in valore assoluto di 2 standard deviations.
D(indice)= []
Y(indice)=[]
%3. Esercizio
-Generare un grafico 2x2, da riempire come segue:
1. Elemento (1,1): scatter plot di x1 e x2
2. Elemento (1,2): line plot della somma cumulata di x1 e x2
3. Elemento (2,1): line plot della somma cumulata di Y
4. Elemento (2,2): istogramma di Y con fitting della distribuzione normale
subplot(2,2,1), scatter(x(:,1),x(:,2)) %grafico 2,2 = 4 quadranti, scrivendo l'1
significa che voglio utilizzare il quadrante 1 , inserisco ci che voglio trovare
subplot(2,2,2), plot(cumsum(x(:,1))) %parte 2 del grafico
hold on %metto due linee nello stesso grafico
subplot(2,2,2), plot(cumsum(x(:,2)), '-r')
hold off %chiudo il grafico e continuo in un altra griglia
subplot (2,2,3), plot(cumsum(y))
%hist=istogramma
subplot (2,2,4), histfit(y)

You might also like