Upload
buidien
View
212
Download
0
Embed Size (px)
Citation preview
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Esercitazione – Info B
Luca. Cassano – [email protected]
Mohammad Sadegh Astaneh– [email protected]
Giovedi 16 Novembre 2017
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Obiettivi
Introduzione a Matlab/Octave
array e matrici
inserimento dati
costrutti condizionali
stampa a video
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Matlab
• Cos’è Matlab:
• strumento (e corrispondente linguaggio) per elaborazioni di calcolo numerico
• NB: sta per MATrix LABoratory» centrato sulle matrici (ma include generiche funzionalità matematiche)
• usato nei successivi corsi di calcolo numerico
• MATLAB è uno strumento commerciale
distribuito, su licenza NON gratuita, da “The MathWorks Inc”
• Student edition disponibile quando si è al Politecnico (http://www.asi.polimi.it/software/matlab.html)
Esiste un altro strumento di nome Octave
• identico nella concezione, molto simile per gli aspetti operativi
• disponibile gratuitamente, vedi www.gnu.org/software/octave/
3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
- 4 -
Screenshot interfaccia MATLAB
- 4 -
Contenuto della
directory corrente
Storia dei
comandi
Finestra dei
comandi
Lancia i tool di MATLAB ed
altro…
Mostra le variabili
nel workspace
4
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Screenshot dell’interfaccia OCTAVE
Linea di comando
dell’interprete
5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Agenda
• Esercizi • Crea matrici Accesso ai dati di un array Scalari Vs Array Sottoarray
Qualche cosa un pò più divertente Tabelline Funzione interne
Altri Stampa a video Cambio base
7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Alcuni
• HELP comando: mostra a video il manuale di utilizzo di uno specifico comando.
• X': traspone la vettore (da vettore riga a vettore colonna e viceversa)
• LENGTH(X): ritorna la lunghezza di un vettore
• SUM(X): calcola la somma di tutti gli elementi di un vettore
• MEAN(X): calcola il valore media dei valore contenuti in un vettore
• MEDIAN(X): ritorna il mediano tra i valore contenuti in un vettore
• ABS(X): valore assoluto
• EVAL(stringa): esegue il contenuto della stringa come fossero comandi di uno script (potete utilizzarlo nell'esercizio 6 per ricevere anche la funzione che volete integrale)
8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Prima parte
• Esercizi
Warm Up Crea matrici
Accesso ai dati di un array
Scalari Vs Array
Sottoarray
Qualche cosa un pò più divertente
Altri
9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: crea matrici
• Si crei una matrice di dimensione 3x3 di
valori non necessariemente tutti nulli
10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Crea matrici - Soluzione
matrix = [1 2 3 ; 4 5 6; 7 8 9]
11
E se fosse stata 100 x 100???
matrix = magic (100)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: accesso ai dati
• Si crei una matrice 4x4 di valori non
necessariamente nulli
• Si indichi il valore nella posizione (2,2)
12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Curiosità…
• Si può accedere a un array a più dimensioni come se ne avesse una sola
• Usando un unico indice si segue l’ordine della memorizzazione
• Da NON usare nella programmazione
ma aiuta a capire certi costrutti....
14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Array: memorizzazione
• Matrici memorizzate per colonna: colonna 1, poi colonna 2, 3, etc.
ogni colonna memorizzata per indici di riga crescenti
• Array memorizzati in forma lineare nella RAM variando più velocemente i primi indici
più lentamente quelli successivi
• NB: opposto a quanto avviene in C
1 2
3 4
5 6
...
1
3
5
2
4
6
...
15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Operazioni con scalari e array
• Operazioni per gli scalari: + - * / ^
• Operazioni per gli array Array operation: eseguita sugli elementi corrispondenti degli
array coinvolti (devono avere lo stesso numero di righe e colonne); si indica aggiungendo un punto prima dell’operatore aritmetico
a= b= a .* b=
Matrix operation: segue le regole dell’algebra lineare
(esempio: prodotto righe per colonne)
a= b= a*b =
1 2
3 4
2 3
5 7
2 6
15 28
1 2
3 4
2 3
5 7
12 17
26 37 k kjikij baba **
Elevamento a
potenza
16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Esercizio
• Dato un vettore contenente una serie di
voti, contare quante sono le sufficienze
(cioè i voti maggiori o uguali a 18)
• Per ogni voto del vettore devo verificare se
è verificata la condizione di sufficienza
• Nel caso in cui il voto sia sufficiente, dovrò
incrementare un contatore
Il controllo deve essere ripetuto per tutti i
voti del vettore
17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Soluzione
Il programma completo diventa quindi:
voti = [13 19 17 24 30 11 16];
sufficienze = 0;
for ii = voti
if (ii >= 18)
sufficienze = sufficienze + 1;
end;
end;
Disp(sufficienze)
20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Soluzione 2
• Gli operatori relazionali possono essere usati
per generare direttamente un vettore logico
(cioè un vettore di valori logici), che poi si può
usare a sua volta per selezionare gli elementi di
un vettore
espressioni vengono quindi usate come una sorta
di “filtro”
Il programma con vettore logico:
voti = [13 19 17 24 30 11 16];
sufficienze = sum(voti >= 18);
disp(sufficienze)21
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: Scalari Vs Array
• Dato un vettore di 3 elementi
• vet = [1 2 3]
• Si calcoli l’elevamento a potenza di ogni
elemento (risp: 1 4 9)
22
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Scalari Vs Array - Soluzione
vet = [1 2 3];
vet = vet.^2
23
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: Sottoarray
• Dato una matrice temp
• Si sostituisca la seconda riga con:
-1 -2 -3
• E la quarta riga con:
-4 -5 -6
25
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Nota sui sottoarray
27
Perchè: temp(2:2:4, :)…
e non temp(2:4, :)?
Perchè temp(2:4, :) sono
le righe 2, 3 e 4!!!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Altri esempi…
m = 9 8 7
6 5 4
3 2 1
0 11 12
0 0 0
>> m([1 4], [2 3])
ans = 8 7
11 12
>> m(1:2:5, 1:end)
ans = 9 8 7
3 2 1
0 0 0
>>>> m(1:2:5, :)
ans = 9 8 7
3 2 1
0 0 0
>> m(2:2:4, :) = [-1 -2 -3; -4 -5 -6];
>> m
m = 9 8 7
-1 -2 -3
3 2 1
-4 -5 -6
0 0 0
>>
tutti gli elementi sulle righe 1 e 4 e sulle
colonne 2 e 3
tutti gli elementi delle righe 1, 3 e 5
notazione ‘:’ abbreviata per 1:end, cioè tutti i
valori di quell’indice
uso della notazione dei sottoarray per
individuare elementi oggetto di
assegnamento
28
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 4: Agenda
• Esercizi
Warm Up
Qualche cosa un pò più divertente Tabelline
Funzione interne
Altri
29
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: Tabelline
• Stampare a video la tabellina della
moltiplicazione (da 1 a 10) per un
numero inserito dall'utente
30
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Tabelline - Soluzione
vet=[1:10];
c=3;
c*vet
E le tabelline da 1 a 10?
31
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Tabelline - Soluzione
E le tabelline da 1 a 10?
vet=[1:10];
vet2=vet’; vet2*vet
32
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Funzioni interne - Soluzione
Come funziona disp?
Disp(x)
visualizza il valore della variabile x
Esempio
a = [1 2];
disp(a)
s = 'hello world. '
disp(s)
33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Funzioni interne - Soluzione
• Tutte le operazioni di MATLAB sono orientate alle
matrici. Ogni variabile è vista come un array.
• Gli operatori quindi prevedono di essere applicati a
matrici e restituiscono matrici.
Esempio2
nome = 'Alice';
eta = 12;
X = [nome,' ha ',num2str(eta),' questo anno.'];
disp(X)
34
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: funzioni interne
• Ricevere un vettore è calcolare la somma, la
media e il mediano usando per media e
mediano sia i comandi integrati (MEAN e
MEDIAN) che non.
• MEAN è la media aritmetica. Ad esempio, la
media di 2, 3, 3, 5, 7 e 10 è 30 diviso per 6,
ovvero 5.
• MEDIAN è il numero che occupa la posizione
centrale di un insieme di numeri ordinato. Ad
esempio, la mediana di 2, 3, 3, 5, 7 e 10 è 4.
35
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Funzioni interne - Soluzione
v=input('Vector ');
%Con MEAN
disp(['Mean = ',num2str(mean(v))]);
%Senza MEAN
disp(['Somma = ',num2str(sum(v)) ' Len =
',num2str(length(v))]);
disp(['Mean = ',num2str(sum(v)/length(v))]);
36
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Funzioni interne - Soluzione
v=input('Vector ');
%Con MEDIAN
disp(['Median = ',num2str(median(v))]);
%Senza MEDIAN
diff=abs(v-(sum(v)/length(v))); [w, p]=min(diff);
disp(['Median = ',num2str(v(p)]);
37
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Terza Parte
• Esercizi
Warm Up
Qualche cosa un pò più divertente
Altri Stampa a video
Cambio base
38
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Problema: Cambio base
• Ricevere un vettore che rappresenti le
singole cifre di un numero in base 2
stampare a video il valore in base 10
39