script in matlab - informatica b-c 2014-15 · si può aprire l’editor utilizzando il comando edit...

29
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOIGNEGNERIA INFORMATICA B Ingegneria Elettrica Script in Matlab

Upload: others

Post on 25-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOIGNEGNERIA

INFORMATICA BIngegneria Elettrica

Script in Matlab

Page 2: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Gli script

• Uno script è un file di testo contenente una sequenza di comandi MATLAB (è un “programma”)

• Lo script viene salvato con estensione .m

• I comandi contenuti in uno script sono eseguiti in modo sequenziale, come se fossero scritti nella finestra dei comandi

• Uno script può essere ri-eseguito

essere facilmente modificato

essere distribuito e condiviso con altre persone

2

Page 3: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Eseguire uno script

• Per eseguire il file Ci si sposta nella cartella che contiene lo script con il comando cd

Si digita il suo nome (senza .m)

• I risultati appaiono nella finestra dei comandi (se non usiamo il ; )

• Uno script opera nello spazio di lavoro (o workspace) principale della linea di comando Può accedere alle variabili dello spazio di lavoro

Può aggiungere nuove variabili allo spazio di lavoro

• Il comando clear permette di cancellare il contenuto dello spazio di lavoro

3

Page 4: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Creare uno script

• Può essere creato utilizzando un qualsiasi editor di testo

• Matlab include un editor dove creare o modificare script Si può aprire l’editor utilizzando il comando edit <nomefile>

• Ricordarsi di salvare il file come “solo testo” e di dare l’estensione .m

• Il file di script deve essere presente nella directory corrente o comunque in uno dei percorsi standard di Matlab Utilizzando il comando cd <percorso> ci si può spostare tra le

cartelle

Il comando pwd restituisce il percorso della cartella corrente

4

Page 5: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Creare uno script

• Il nome del file deve essere lungo al massimo 31 caratteri, deve cominciare con una lettera e può contenere cifre e il carattere _

• Si consiglia di specificare un nome univoco. Quindi diverso da Nome di un altro file o variabile

Nome di un comando, variabile o funzione Matlab

• Per verificare un nome è già utilizzato si può utilizzare il comando exist nome (restituisce 0, cioè falso, se il simbolo nome non è in uso, un altro valore altrimenti) Sintassi alternativa: exist('nome')

5

Page 6: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Struttura di uno script

È consigliabile organizzare uno script nel seguente modo:

• Commento di intestazione Specifica cosa fa lo script

I commenti iniziano con il carattere %

• Sezione di input Contiene i comandi per l’acquisizione dei dati da tastiera o da file

• Sezione di elaborazione Contiene i comandi che eseguono il compito dello script

• Sezione di output Mostrano i risultati a video (testo e/o grafici) o li salvano su file

6

Page 7: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Acquisizione di dati da tastiera

• La funzione input permette di acquisire dati da tastiera

valore=input('inserisci un valore: ');

• Matlab stampa a video la stringa ‘inserisci un valore:’ ed aspetta i dati che possono essere: Un valore scalare

Un array o una matrice racchiuso tra [], i cui dati sono separati da , e ;

Una stringa racchiusa tra ''

• Il dato inserito viene memorizzato nella variabile valore

• Per acquisire una stringa si può utilizzare anche il comando

valore=input('inserisci un valore ', 's');

In tal caso non c’è bisogno di racchiudere la stringa tra ' '

7

Page 8: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Stampa a video dei risultati

• Il risultato di un’operazione viene mostrato immediatamente se non viene specificato il carattere ;

• La funzione disp mostra un array a video

disp(pi)

• La funzione num2str può essere utilizzata per fare il cast da numero a stringa

str=['il valore di pi è ' num2str(pi)];

disp(str);

OUTPUT: il valore di pi è 3.1416

8

Page 9: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Stampa a video dei risultati

• Si può utilizzare anche la funzione fprintf

fprintf('il valore di pi è %f\n', pi);

• Stringhe di formato: %d (formato intero)

%e (formato esponenziale)

%f (formato in virgola mobile)

%g (il più corto tra il formato esponenziale e quello in virgola mobile

• disp è in grado di stampare anche numeri complessi, mentre fprintf ne stampa solo la parte reale

9

Page 10: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Lettura e scrittura di file

• Matlab è in grado di gestire File di testo (ascii)

File binari (hanno estensione .mat)

• Comandi per leggere e scrivere dati in un file load

save

10

Page 11: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Salvataggio su file

• save <nomefile>

salva nel file nomefile.mat tutte le variabili contenute nello spazio di lavoro

• save <nomefile> array1 array2

salva nel file solo le variabili array1 ed array2

• I file .mat contengono

Il nome, il tipo, la dimensione ed il valore di ciascuna variabile nello spazio di lavoro

Possono essere trasferiti da un computer ad un altro, anche con sistemi operativi diversi ma possono essere aperti solo da Matlab

11

Page 12: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Salvataggio su file

• È possibile anche salvare i dati in formato ascii (file di testo)

• Il comando

x= [3, 5.5; 4,5]

save –ascii nomefile.dat x;

Produce un file nomefile.dat con il seguente contenuto:

3.0000000e+00 5.5000000e+00

4.0000000e+00 5.0000000e+00

• Nota: si può utilizzare qualsiasi estensione per i file di testo ma è consigliato evitare di utilizzare l’estensione .mat

12

Page 13: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Lettura da file

• load <nomefile.mat>

carica nello spazio di lavoro tutte le variabili contenute nel file binario .mat

• load <nomefile.mat> x y

carica nello spazio di lavoro solo le variabili specificate

• load <nomefile.dat>

crea una variabile nomefile che conterrà in una matrice tutti i dati letti dal file di testo Il testo nel file deve contenere i dati separati da virgole e spazi ed a-

capo ed deve essere formattato come un’unica matrice

13

Page 14: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Lettura da file

• a=xlsread('nomefile')

importa il contenuto del file MS Excel nomefile.xls nella matrice a

• Alcuni fogli di calcolo utilizzano il formato .wk1

a=wk1read('nomefile')

14

Page 15: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Tipo di dato logico

• Il tipo di dato logico è composto da solo due valori true (rappresentato con un numero diverso da 0)

false (rappresentato con il valore 0)

• Un valore logico è restituito da Operatori relazionali

Operatori logici

Funzioni e comandi (come per esempio exist)

15

Page 16: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori relazionali

• Gli operatori relazionali possono operare su tipi numerici e stringhe

• Forma generale: a OP b Dove a e b possono essere espressioni aritmetiche, variabili o costanti

(stringhe e numeri)

• Operatori disponibili: == ~= > >= < <=

• È possibile confrontare Due valori di egual dimensione (dimensione dell’array)

• Il confronto è eseguito tra valori in posizione equivalente

• Il risultato è un array di ugual dimensione

Un valore scalare ed un array di qualsiasi dimensione

• Il valore scalare è confrontato con ciascuna posizione dell’array

• Il risultato è un array di dimensione uguale all’array ricevuto come parametro

• Il confronto tra i singoli caratteri di una stringa è eseguito in base alla codifica dei caratteri

16

Page 17: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori relazionali

• Attenzione a non confondere i seguenti operatori == (confronto)

= (assegnamento)

• La precisione finita della rappresentazione in virgola mobile può farci commettere degli errori sin(0)==0 restituisce 1

sin(pi)==0 restituisce 0

• I confronti di uguaglianza/diseguaglianza tra numeri in virgola mobile vanno eseguiti nel seguente modo

abs(sin(pi))<=eps

17

Page 18: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori relazionali

• Esempi:

18

Espressione Risultato

3<4 1

'a'>'b' 0

[1 0; -2 1]<0 [0 0; 1 0]

[1 0; -2 1]>[2 -1; 0 0] [0 1; 0 1]

'pippo'=='pluto' [1 0 0 0 1]

Page 19: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori logici

• Gli operatori logici sono simili a quelli del C e funzionano solocon operandi scalari && (AND)

|| (OR)

~ (NOT)

xor(a,b)

19

Page 20: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori logici

• Nell’esecuzione dell’operazione logica viene valutato prima l’operando a sinistra Se è possibile stabilire già il risultato dell’operazione, l’operando a

destra non viene valutato

Altrimenti viene valutato anche l’operando a destra

• Questo meccanismo funziona allo stesso modo anche il C

• Esempio: a/b>10 Se b è uguale a 0 la divisione non va fatta

(b~=0)&&(a/b>10) è la soluzione corretta: se b è uguale a 0 restituisce 0 senza valutare la seconda espressione

20

Page 21: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operatori logici

• Gli operatori & e | operano sui singoli elementi della matrice

• È possibile applicare gli operatori & e | su

Due valori di egual dimensione (dimensione dell’array)

• L’operazione è eseguito tra valori in posizione equivalente

• Il risultato è un array di ugual dimensione

Un valore scalare ed un array di qualsiasi dimensione

• L’operazione è eseguita su ciascuna posizione dell’array ed utilizzando lo scalare come secondo parametro

• Il risultato è un array di dimensione uguale all’array ricevuto come parametro

21

Page 22: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Accesso ad un array mediante un array logico

• È possibile eseguire un accesso contemporaneo ad un array mediante un array logico di egual dimensione

• Esempio: x = [3 7 5 1 9]

y = [true false true true false]

z = x(y);

• Risultato: y = [3 5 1]

22

Page 23: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Accesso ad un array mediante un array logico

• La funzione find restituisce gli indici degli elementi diversi da 0 ( o false)

• Esempio: x = [0 0 1; 1 0 0]

y = find(x)

[r c] = find(x)

• Risultato: y = [2; 5]

r = [2; 1]

c = [1; 3]

23

y contiene l’indice della matrice linearizzata

R e c contengono rispettivamente gli indici di riga e colonna

Page 24: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Operazioni vettorizzate

• È possibile combinare operazioni aritmetiche, logiche e relazionali ed eseguirle direttamente su array Tale operazione semplifica molto l’algoritmo dello script

• Esempio: contare quanti studenti hanno superato un esame con un voto inferiore a 25

voto = [ 12, 15, 8, 29, 23, 24, 27 ]

conta_mediocri = sum(voto>=18 & voto<25)

• Esempio: assegnare un punto extra agli studenti che hanno ottenuto almeno 27

voto = [ 12, 15, 8, 29, 23, 24, 27 ]

voto(voto>=27) = voto(voto>=27) + 1

24

Page 25: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Ordinamento tra gli operatori

• Le operazioni vengono valutate nel seguente ordine Operatori aritmetici di moltiplicazione e divisione ed elevamento a

potenza

Operatori aritmetici di somma e sottrazione

Operatori relazionali

Operatore logico NOT

Operatori logici AND (&& e &)

Operatori logici OR (|| e|) e XOR

• A parità di livello, la priorità va da sinistra verso destra

25

Page 26: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Funzioni logiche

• Matlab fornisce le seguenti funzioni logiche

• all ed any funzionano come min e max: operano su vettori restituendo un singolo valore, o su matrici analizzando singolarmente le colonne e restituendo un vettore riga

26

Page 27: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Strutture di controllo

• Matlab offre le classiche strutture di controllo Per la selezione (if e switch)

Per l’iterazione (while e for)

• Costrutto if:if a==b

c=1;

elseif a<b

c=2;

else

c=3;

end

• Le clausole elseif ed else sono facoltative

27

Page 28: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Strutture di controllo

• Costrutto switch:switch(x)

case -1

display('meno uno');

case 0

display('zero');

case 1,2

display('uno o due');

otherwise

display('altro valore');

end

28

Page 29: Script in Matlab - Informatica B-C 2014-15 · Si può aprire l’editor utilizzando il comando edit  • Ricordarsi di salvare il file come “solo testo” e di dare

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA

Strutture di controllo

• Costrutto for:for n=2:1:10

x(n)=2*x(n-1);

end

• A differenza del C, il costrutto for forza alla specifica di un intervallo di valori del parametro di controllo su cui interare

• Costrutto while:n=1;

while n^2 < 100

disp(n);

n=n+1;

end

29