Esercitazione Info B - Luca Cassanocassano.faculty.polimi.it/ESE8.pdf · • MATLAB è uno...

40
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esercitazione Info B Luca. Cassano [email protected] Mohammad Sadegh Astaneh[email protected] Giovedi 16 Novembre 2017

Transcript of Esercitazione Info B - Luca Cassanocassano.faculty.polimi.it/ESE8.pdf · • MATLAB è uno...

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

GUI di Octave

6

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

Accesso ai dati - Soluzione

13

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

18

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione

19

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

Curiosità: cosa succede con il .

24

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

Sottoarray - Soluzione

26

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Cambio base - Soluzione

40

v=input('Vector: ');

esp=[length(v)-1:-1:0];

basi=2.^esp;

disp(sum(v.*basi));