Professional Documents
Culture Documents
%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
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);