introduzione a matlab - home page | deigianni/elab_dati/intro_matlab.pdf · 1 università degli...

40
1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB INTRODUZIONE A MATLAB Prof. Giovanni Sparacino Dipartimento di Ingegneria dell’Informazione Università di Padova e-mail: [email protected] web: http: www.dei.unipd.it/~gianni 2 CHE COSA È MATLAB MATLAB= MATrix LABoratory. L’elemento base sono le matrici Al solito, matrice M X N significa matrice ad M righe ed N colonne. Casi particolari: M=1 (vettore riga); N=1 (vettore colonna); M=N=1 (scalare) Matlab sarà per noi: •un linguaggio di programmazione •un ambiente di calcolo scientifico con routines altamente specializzate

Upload: doanquynh

Post on 16-Feb-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

1

Università degli Studi di Padova - Facoltà di Ingegneria

A.A. 2006-2007

INTRODUZIONE A MATLABINTRODUZIONE A MATLAB

Prof. Giovanni SparacinoDipartimento di Ingegneria dell’Informazione

Università di Padovae-mail: [email protected]

web: http: www.dei.unipd.it/~gianni

2

CHE COSA È MATLAB

MATLAB= MATrix LABoratory.

L’elemento base sono le matrici

Al solito, matrice M X N significa matrice ad M righe ed N colonne.

Casi particolari: M=1 (vettore riga); N=1 (vettore colonna); M=N=1 (scalare)

Matlab sarà per noi:

•un linguaggio di programmazione

•un ambiente di calcolo scientifico con routines altamente specializzate

Page 2: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

3

Matlab ha in se' centinaia di funzioni che possono essere built-in (es. det,

inv, ...) o incluse in toolbox opzionali (es. funzione remez nel Signal

Processing Toolbox) la cui licenza si acquista a parte.

Nei programmi che scriviamo in Matlab di solito richiamiamo queste funzioni (o

altre scritte da noi !). Grazie a queste funzioni, scrivere un programma in

Matlab per risolvere un problema ingegneristico che coinvolge calcolo

scientifico risulta molto più semplice e veloce che usare linguaggi come

Fortran, Pascal, C, ...

Poichè il codice Matlab viene scritto in file di testo, è immediatamente

trasferibile ad altre piattaforme dove Matlab è installabile (UniX, Mac,

Windows, VAX, ...).

Un codice Matlab viene di fatto interpretato, ma è anche teoricamente

possibile compilarlo tramite il Matlab Compiler (che però in questo corso non

useremo mai) rendendo così al contempo “chiuso” il sorgente e più veloce

l’esecuzione.

PERCHE’ USEREMO MATLAB ?

4

Uso la command window per:

•lavorare in modalita' interattiva

•lanciare l’esecuzione di un M-file (= programma in Matlab)

Lanciato Matlab, appare la command window con un prompt

UTILIZZO DI MATLAB: LA COMMAND WINDOW

Page 3: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

5

Dalla command window posso ad es. fare operazioni come con una

calcolatrice e invocare comandi o funzioni (=programmi con argomenti).

All'enter Matlab fa le sue elaborazioni e mi fornisce i risultati.

UTILIZZO INTERATTIVO DELLA COMMAND WINDOW

L’uso interattivo della command window è spesso poco conveniente e noioso

(è difficile trovare gli errori, se voglio ripetere le operazioni più volte devo

riscrivere tutto ogni volta...), ma a volte può essere utile, specie per iniziare !

6

OPERAZIONI DI ASSEGNAZIONE

Osservazioni

•Se non metto il punto e virgola (“;”) dopo

l’assegnazione, Matlab fa un “eco”

•Matlab non richiede la dichiarazione delle variabili.

•Matlab è case-sensitive

•I nomi delle variabili sono a piacere (ma non

possono cominciare con un numero, includere

spazi e caratteri speciali, es. *, e non dovrebbero

coincidere con nomi riservati di comandi e funzioni,

es. pi)

•Il contenuto della memoria di lavoro si chiama

workspace

•Per vedere cosa ho nel workspace: who o whos

(who+size)

Dalla Command Window si possono assegnare valori a variabili in modo

intuitivo.

Page 4: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

7

Osservazione:

A = [1 2 3; 4 5 6; 7 8 9] e

A = [...

1 2 3

4 5 6

7 8 9 ]

creano la stessa matrice 3 X 3 di nome A

Osservazione:

A = [1 2;3 4] + i*[5 6;7 8] e

A = [1+5i 2+6i;3+7i 4+8i]

creano la stessa matrice 2 X 2 ad elementi complessi.

NB: In Matlab “i” e “j” sono le costanti che rappresentano l’unità immaginaria. Se

dobbiamo usare numeri complessi, è bene evitare nel codice l’uso di i e j

come variabili (anche se è consentito)

8

•Le matrici si inseriscono per righe

•In un’operazione di assegnazione, a destra

dell'uguale posso avere delle matrici

•Per accedere a porzioni di matrici/vettori, si

usano le parentesi tonde•Le parentesi quadre si usano solo per

delimitare inizio e fine di matrici/vettori

•Gli indici delle matrici sono interi strettamente positivi

•In generale, per vettori riga, v(1,#) e’ accorciabile in v(#), mentre, per

vettori, colonna z(#,1) coincide con z(#)

Page 5: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

9

Sia

A=[...

2 –2 10 3

7 1 -3 4

1 5 6 -4]

Per accedere ad un elemento:

x=A(3,4) assegnera’ –4

Per accedere ad un’intera riga, ad es. la 2

x=A(2,:) restituira’ [7 1 -3 4]

Per accedere ad un’intera colonna, ad es. la 3

x=A(:,3) restituira’ [10 -3 6]’

Per accedere ad una sottomatrice, ad es.la 2X2 in basso a destra

x=A(2:3,3:4) restituira’ [-3 4

6 -4]

ESTRAZIONE DI SOTTOMATRICI

10

Le matrici si possono costruire

“affiancando” matrici piu' piccole (purchè

le dimensioni siano compatibili)

Page 6: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

11

Una matrice molto grande come ad es. dati (40 X 4) nell’esempio sotto

può essere salvata in un file di testo es. dati.dat e richiamabile nel

workspace con il comando load dati.dat

12

Matlab non richiede la

predichiarazione delle variabili

e della loro dimensione.

Addirittura, fa un’allocazione dinamica delle variabili:

quando definisco un solo

elemento di una matrice o

quando definisco un nuovo

elemento in una posizione che

eccede la vecchia dimensione

della matrice, gli altri elementi

vengono definiti di imperio e

posti uguali a zero !

Page 7: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

13

Vettori

length(X) restituisce la lunghezza del vettore X

Matrici

[M,N]=size(X) righe e colonne della matrice X

size(X,1) numero di righe della matrice X

size(X,2) numero di colonne della matrice X

DIMENSIONE DELLE VARIABILI

14

COMANDO FORMAT

Internamente, Matlab usa sempre doppia precisione. Per l’esterno, si

possono usare vari formati:

format short virgola fissa, 5 cifre

format long virgola fissa, 15 cifre.

» format short

» pi

ans =

3.1416

» format long

» pi

ans =

3.14159265358979

format short e virgola mobile, 5 cifre.

format long e virgola mobile, 15 cifre.

» format short e

» pi

ans =

3.1416e+000

» format long e

» pi

ans =

3.141592653589793e+000

Page 8: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

15

GESTIONE DI STRINGHE

Definizione e concatenamento

di stringhe

A='pinco'

B='pallino'

C=[A ' ' B]

Conversione di numeri in

stringhe

E=67

ES=num2str(E)

P=[C ES]

16

VARIABILI DI TIPO RECORD

Page 9: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

17

18

GESTIONE DELLE VARIABILI NEL WORKSPACE

who produce la lista delle variabili nel workspace

whos la lista contiene anche informazioni su tipo e dimensioni

clear all elimina tutte le variabili nel workspace

clear <Variabile> cancella solo la variabile con nome Variabile

Ogni volta che Matlab viene chiuso il workspace viene perso. Comandi utili:

save <File> salva nel file File.mat tutte le variabili del workspace

load <File> carica nel workspace tutte le variabili presenti in File.mat

save <File> <Variabili> salva nel file File.mat le variabili in Variabili

load <File> <Variabili> carica nel workspace le variabili Variabili del file File.mat

Page 10: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

19

RIEPILOGO

20

GENERAZIONE DI VETTORI O MATRICI “SPECIALI”

E’ possibile generare con

semplicita’ vettori con elementi

equispaziati avvalendosi del

simbolo “:”

Page 11: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

21

Il comando

A=logspace(Min, Max, N)

genererebbe invece N valori equispaziati su scala logaritmica

Per generare un vettore A di N elementi equispaziati tra Min e Max,

posso anche usare il comando:

A = linspace(Min, Max, N)

22

A=rand(3,5) matrice 3x5 con elementi casuali distribuiti unif. in [0,1]

A=randn(3,5) matrice 3x5 con elementi casuali distribuiti gauss. come Ν(0, 1)

GENERAZIONE DI VETTORI CASUALI

Sfruttando le trasformazioni lineari riesco a estrarre da varie distribuzioni di

probabilita’

v=10+2*randn(50,1)

vettore colonna di lunghezza 50 con elementi tratti da una distribuzione

gaussiana media 10 e deviazione standard 2

u=15+5*rand(50,1)

vettore colonna di lunghezza 50 con elementi tratti da una distribuzione

uniforme tra 15 e 20

Page 12: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

23

RIEPILOGO

24

A=[] : matrice vuota

A=eye(10) matrice identità 10x10

A=zeros(3,5) matrice 3x5 con elementi tutti nulli

A=ones(3,5) matrice 3x5 con elementi tutti pari a 1

A=diag([3, 5, 6]) matrice 3x3, con elementi sulla diagonale specificati

ALTRI ESEMPI

Page 13: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

25

Per la trasposizione di matrice si usa come in algebra lineare l’apice

ESEMPI DI OPERAZIONI SULLE MATRICI

Trasposizione di matrice

26

Matlab esegue in modo intuitivo le operazioni algebriche sulle matrici

Esempio:>> a=2*eye(2)

a =

2 0

0 2

Esempio: >> a=ones(2,3);

>> b=ones(2,3);

>> a+b

ans =

2 2 2

2 2 2

Prodotto per uno scalare, somma, prodotto tra matrici

Page 14: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

27

Naturalmente, quando si richiede di eseguire somma, differenza e prodotto,

le dimensioni delle matrici coinvolte devono essere compatibili. Ad

esempio, se usassimo a e b della slide precedente:

>> a*b

??? Error using ==> *

Inner matrix dimensions must agree.

Infatti il prodotto fra queste specifiche matrici non è definibile. Posso

nell’esempio moltiplicare invece a per la trasposta di b, ottenendo:

>> a*b'

ans =

3 3

3 3

28

Elevamento a potenza

•X^2 indica il prodotto della matrice X con se stessa ed è definito solo

per matrice quadrate, cioè X^2 = X*X,

•X.^2 indica invece la matrice con elementi A i,j = ( X i,j ) 2

Per esempio:

>> x=ones(2,2);>> x^2ans =

2 22 2

>> x.^2ans =

1 11 1

Page 15: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

29

Altro esempio

>> x=[-1,2];

>> x^2

??? Error using ==> ^

Matrix must be square.

Posso invece sempre agire “elemento per elemento”

>> x.^2

ans =

1 4

30

Osservazione:Mettere il “.” prima

dell’operatore cambia

l’operazione drasticamente

perchè significa “elemento

per elemento”

Page 16: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

31

Divisione

divisione elemento per elemento

equivale a a*inv(b)

32

Altre operazioni sulle matrici

Ce ne sono un’infinità, ad es. inv, det, trace, mean, std, var, sort, max, min,

diag, ... Solo per elencarne alcune:

max(x), min(x): massimo e minimo del vettore x.

sort(x): ordinamento ascendente del vettore x.

mean(x),median(x),var(x),std(x): media, mediana, varianza e sd campionaria di x (per

colonne se x è una matrice !!!).

sum(x) : somma gli elementi di x (per colonne se x è matrice).

prod(x): esegue il prodotto degli elementi di x (per colonne se x è matrice).

diff(x): calcola le differenze [x(2)-x(1), x(3)-x(2), … , x(n)-x(n-1)].

det(X) : determinante di X.

rank(X) : rango di X.

trace(X): traccia di X.

inv(X) : matrice inversa di X.

eig(X) : autovalori di X.

poly(X) : polinomio caratteristico di X.

norm(X, p): norma p di X (matrice o vettore che sia)

Page 17: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

33

Esempi: min, max, sort

34

Esempi: poly, eig

coeff. polinomio caratteristico

colonne di V = autovettori di a

autovalori di a

Page 18: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

35

Esempi: lu

36

Manipolazione di matrici

Page 19: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

37

RIEPILOGO

38

Esistono innumerevoli funzioni, es.

cos, sin, cosh, sinh, tan, tanh, asin, asinh, acos, acosh, ...

log, log10, log2, exp,

abs, mod,

sqr, sqrt,

round, floor, ceil,

sign

che nei corsi di Matematica sono state definite su scalari e che, se

l'argomento e' una matrice, in Matlab lavorano elemento per elemento.

Funzioni matematiche

Page 20: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

39

Si possono così calcolare funzioni di matrici:>> a=zeros(1,2)

a =

0 0

>> b=cos(a)

b =

1 1

Altro esempio (NB: pi è una variabile predefinita che vale π):>> t=[0 pi/6 pi/3 pi/2];

>> x=cos(t)

x =

1.0000 0.8660 0.5000 0.0000

40

RIEPILOGO

Page 21: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

41

Valutazione:

polyval(p,x) : calcola il valore del polinomio in x

Radici:

roots(p) : radici del polinomio.

poly(r) : determina il polinomio le cui radici sono r.

GESTIONE DI POLINOMI

42

ALCUNI COMANDI PER SOPRAVVIVERE ...

Dalla Command Window

>> <FrecciaSu>,<FrecciaGiu> Richiama i comandi già dati dalla Command Window

>> help <NomeComando> Consulta l’help in linea per il comando NomeComando

>> lookfor <NomeComando> Ricerca nel manuale la parola chiave NomeComando

>> demos Dimostrazioni

>> exit Chiude Matlab

Page 22: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

43

Nell’help, per soli motivi grafici, la funzione viene scritta in maiuscolo,

ma va usata comunque in minuscolo !!!

Utili le funzioni correlate !

44

Lookfor ci aiuta a trovare comandi di cui non conosciamo l’esistenza ...

Page 23: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

45

COMANDO diary (=big brother …)

46

ESECUZIONE DI M-FILES DALLA COMMAND WINDOWUna sequenza ordinata di

comandi può essere scritta in

un M-file (=file testo con

estensione m).

Per scrivere M-files ci si può

servire di un comune text-editor (es. notepad) o del

potente editor interno di Matlab

Per far eseguire un M-file dalla

Command Window, è

sufficiente scrivere il nomedell’M-file e battere “Invio”.

Nella esecuzione di un M-file,

Matlab si comporta come un

interprete.

Page 24: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

47

La scrittura di un M-file rispetto all’esecuzione di comandi dalla

Command Window permette di:

•Sperimentare un algoritmo, senza dover reintrodurre da tastiera, ad

ogni variazione dello stesso, una lunga lista di comandi

•Ottenere programmi che possono essere riutilizzati, per esempio

cambiando solo i dati

•Scambiare programmi con altri utenti

•Ottenere una documentazione permanente per un lavoro

M-FILES

48

TIPI DI M-FILESScripts: sono files di comandi. Non hanno variabili in entrata e in uscita e

operano sulle variabili del workspace

% Questo file calcola la radice degli elementi di % una matrice a, se a>0, altrimenti stampa un messa ggio di erroreif a>=0

a=sqrt(a)else

disp('errore')end

Attenzione: nel workspace deve essere stata definita una variabile a

Attenzione: Questo file deve essere salvato comeradfunz.m

Functions: sono files di comandi con argomenti in entrata e in uscita. Le

variabili interne a questi programmi non influenzano le variabili del workspace

function a=radfunz(x)% RADFUNZ(X) calcola la radice degli elementi di X% se X>=0, altrimenti stampa un messaggi o di errore%if x>=0

a=sqrt(x)else

disp('errore')end

Per cominciare ci concentreremo sugli scripts

Page 25: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

49

DA RICORDARE

Quando dalla command window digitiamo “pippo” + Enter, Matlab:

1. Controlla nel workspace se pippo è una variabile ed eventualmente ce ne

restituisce il valore

2. Controlla se esiste una function built-in di nome pippo ed eventualmente

cerca di eseguirla

3. Controlla se esiste nella current directory un M-file di nome pippo.m ed ed

eventualmente cerca di eseguirlo

4. Controlla se nell’insieme delle cartelle presenti nel matlabpath (toolbox +

quello che abbiamo inserito noi) esiste una function di nome pippo ed

eventualmente cerca di eseguirla

50

•E’ buona abitudine sia negli scripts che nelle functions inserire dei commenti

•I commenti sono segnalati da %: Matlab ignora tutti i caratteri dell’intera rigadopo il %

•Le prime righe di commento di uno script o di una function diventano parte dell’ help online

USO DEL % (COMMENTI)

Page 26: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

51

GESTIONE DELLA WORKING DIRECTORY

Dalla Command Window

>> dir contenuto della directory corrente

>> ls idem

>> pwd percorso della directory corrente

>> cd idem

>> cd <Percorso> cambia la directory corrente

>> chdir <Percorso> come sopra

>> what analogo a dir, ma mostra solo i file .m, .mat, .mdl

52

Si usano nelle strutture if… o while … oppure per in operazioni di verifica (vd

esempi sotto)

Esempi:>> x=2;

>> x==0 (questa relazione e’ falsa:)

ans =

0

>> x==2 (questa relazione è vera)

ans =

1

OPERATORI RELAZIONALI

Gli operatori relazionali più comuni sono:

== uguale

~= diverso da

< minore di

<= minore o uguale

Page 27: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

53

Gli operatori relazionali possono essere applicati anche alle matrici:

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

>> a>0 (qui i primi due elementi sono veri)

ans =

1 1

0 0

>> a>=0 (qui i primi tre elementi sono veri)

ans =

1 1

1 0

54

USO DEGLI OPERATORI RELAZIONALI COME FUNZIONI BINARIE

eq - Equal ==

ne - Not equal ~=

lt - Less than <

gt - Greater than >

le - Less than or equal <=

ge - Greater than or equal >=

Page 28: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

55

OPERATORI LOGICI

Gli operatori logici più comuni sono:

& and logico

| or logico

~ not logico

Si usano nelle strutture if… o while … oppure per in operazioni di verifica (vd

esempi sotto)

Esempi:>> x=1; y= -1;

>> x>0 & y>0 (questa relazione è falsa)

ans =

0

>> x>0 | y>0 (questa relazione è vera)

ans =

1

56

USO DEGLI OPERATORI LOGICI SU MATRICI

and - Logical AND &

or - Logical OR |

not - Logical NOT ~

xor - Logical EXCLUSIVE OR

any - True if any element of vector is nonzero

all - True if all elements of vector are nonzero

Page 29: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

57

USO DEGLI OPERATORI LOGICI SU MATRICI

any - True if any element of vector is nonzero

all - True if all elements of vector are nonzero

58

STRUTTURE DI PROGRAMMAZIONE

Page 30: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

59

STRUTTURA IF … ELSE…END

Struttura:

if espressione

istruzioni

elseistruzioni

end

Esempio:

if mod(x,2)==0

disp(‘numero est pari’)

else

disp(‘numero dispari’)

end

60

STRUTTURA IF … ELSEIF …END

Struttura:

if espressione

istruzioni

elseif espressione

istruzioni

elseistruzioni

end

Esempio:

if a>0

disp(‘a positivo’);

elseif a == 0

disp(‘a nullo’);

else

disp(‘a negativo’);

end

Page 31: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

61

Il ciclo for ha la struttura:

for variabile = espressione

istruzioni

end

In genere espressione è del tipo IndMin:Incremento:IndMax.

CICLO FOR … END

s=0;

for i=1:2:10

s=s+i;

endcalcola la somma dei numeri interi dispari

minori di 10 (25)

Esempio

s=0;

for i=1:10

s=s+i;

end

calcola la somma dei primi 10 numeri interi (55)

62

Il ciclo while ha la seguente struttura

while espressione

istruzioni

end

Esempioi=1;

while i<5

i=i+1;

end

i

>> i

i =

5

CICLO WHILE … END

Esempio 2x=input( 'voto esame (0 per finire)' );sommavoti=0;n=0;while x~= 0

sommavoti=sommavoti+x;n=n+1;x=input( 'voto esame (0 per finire)' );

endmedia=sommavoti/n;disp([ 'la media calcolata est=' num2str(media)])

Page 32: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

63

I cicli possono essere uno dentro l’altro.

Esempio (per il ciclo for)

Crea una matrice triangolare inferiore:

>> aa =

1 0 0 01 1 0 01 1 1 01 1 1 1

n=4;for i=1:n

for j=1:ia(i,j) = 1;

end % jend %i

64

Oss. trucchi per migliorare la velocita’

a=zeros(4,4)n=4;for i=1:n

for j=1:ia(i,j) = 1;

end % jend %i

Fa la stessa cosa del codice prima, ma è più veloce, perché Matlab non

deve ad ogni nuova riga/colonna riallocare lo spazio in memoria per la

matrice a

Meglio preallocare lo spazio per le variabili

Page 33: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

65

Oss. trucchi per migliorare la velocita’

T=0.05;for i=0:100

t(i+1)=i*T+1;y(i+1)=log(t(i+1));

end %i

Fa la stessa cosa di

ma e’ decine di volte più lento. Meglio vettorizzare il codice.

t=(0:1:100)

y=log(t+1)

66

Page 34: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

67

GRAFICI

Per ottenere il grafico di una funzione, devo:

•Preparare un vettore di ascisse

•Preparare un vettore di ordinate

•Scegliere la figura (opzionale) (Istruzione figure)

•Preparare il riquadro (opzionale) (istruzione subplot)

•Fare il grafico (istruzione plot)

•Settare gli assi (opzionale) (istruzione axis)

•Inserire titoli ed etichette (istruzioni title, xlabel, ylabel, ...)

68

Esempio: grafico di ex cos4x, su [0,2]

>> x=[0:0.01:2];

>> f=cos(4*x).*exp(x);

>> plot(x,f)

Esempio: grafico di una circonferenza sulla figura 3>> t=0:0.01:2*pi;

>> x=cos(t);

>> y=sin(t);

>> figure(3)

>> plot(x,y,'g+')

>> axis equal

Page 35: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

69

Una serie temporale (senza asse ascisse)

plot(y)

Una funzione

plot(t,y) (di default vengono uniti i punti)

Con i circoletti

plot(t,y,'o')

Circoletti + linea

plot(t,y,'o',t,y)

Circoletti + linea rossa

plot(t,y,'o',t,y,'r')

Circoletti+linea rossa tratteggiata

plot(t,y,'o',t,y,'r--')

ISTRUZIONE PLOT

70

GESTIONE DI PIU’ GRAFICI

Oppure (comando hold on ... hold off)plot(t1,y1)

hold on

plot(t2,y2)

….

plot(t3,y3)

hold off

Due funzioni sovrapposte

plot(t1,y1,t2,y2) Due spezzate

plot(t1,y1,'o',t2,y2,'*') Una serie di circoletti ed una serie di asterischi

Piu' figure

figure(1)

plot(t1,y1)

figure(2)

plot(t2,y2)

Page 36: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

71

L’istruzione subplot(M,N,K) crea una figura contenente M*N riquadri, distribuiti

su M righe ed N colonne. L’indice K indica che il plot che segue, con annessi

title, xlabel, etc.., si riferisce al K-esimo riquadro (con K che può assumere

valori fra 1 e M*N)

ISTRUZIONE SUBPLOT

prima del plot, subplot(2,2,4) prima del plot, subplot(6,3,5) prima del plot, subplot(6,1,6)

72

figure(n) : apre la figura n. Se la figura n è gia esistente, la rende la figura “attiva”, ovvero

quella su cui i plot avranno effetto.

close: chiusura finestra grafica corrente

close all: chiusura di tutte le finestre grafiche

close (n) : chiude la figura n

clf: cancellazione grafici, riquadri etc dalla figura corrente

title(stringa) : Inserisce il titolo nella figura attiva. stringa può contenere sequenze LaTeX.

ylabel(stringa) : aggiunge del testo all’asse delle ordinate.

xlabel(stringa) : aggiunge del testo all’asse delle ascisse.

grid on/off : attiva/disattiva la griglia nella figura attiva.

axis([xmin, xmax, ymin, ymax]) : specifica i range per ascisse e ordinate

axis tight : gli assi finiscono al valore massimo/minimo dei dati (non rimane contorno)

axis equal : fa in modo che incrementi unitari sui due assi abbiano la stessa lunghezza

effettiva su schermo.

axis square : si impostano gli stessi minimo e massimo per entrambi gli assi (

visualizzazione quadrata)

axis normal : si ritorna alla configurazione originale degli assi

Page 37: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

73

ylabel('concentration c_{a}(t)')

Apici e Pedici nei titoli/label

xlabel('concentration c^{b}(t)')

Lettere greche nei titoli/label

title(‘ Risultati per \beta = 3')

74

GRAFICI A BARRE (in alternativa a plot)

hist(y,m): suddivide l’intervallo dei valori

compresi tra il minimo e il massimo di y in

m “bin” (=sottointervalli) di egual larghezza

e calcola (e poi disegna) il numero di

elementi di y compresi in ogni bin

-0.2 0 0.2 0.4 0.6 0.8 1 1.20

5

10

15

20

25

30

35

40

45

50

bar(x,y) : produce un diagramma a barre.

bar([0:.25:1],[10:10:50])

30 35 40 45 50 55 60 650

50

100

150

200

250

300

350

hist(50+4*randn(1,5000),50)

Page 38: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

75

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

» x=[0:0.1:2*pi];

» y=sin(x);

» stem(x,y)

stem(x,y): adatto quando si

vuole mettere in evidenza il

fatto che il segnale è a tempo

discreto

semilogx(x,y) : come plot ma l’asse x viene rappresentato in scala log10

semilogy(x,y) : come plot ma l’asse y viene rappresentato in scala log10

loglog(x,y) : come plot ma con entrambi gli assi in scala log10.

76

Page 39: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

77

Esempi semplici di M-file

Esempio 1

% qui posso mettere tutti i commenti che mi pare

t=(0:1:100)';y=5*exp(-0.05*t);

ts=(0:5:100)';ys=5*exp(-0.05*ts);

% aggiungo il rumore con varianza 0.8ns=length(ts);vn=randn(ns,1);v=sqrt(0.8)*vn;zs=ys+v;

plot(t,y, 'r--' ,ts,zs, 'bo' )gridtitle( 'curva e campioni rumorosi' )xlabel( 'tempo' )ylabel( 'concentrazione' )

78

Esempio 2

% esempio di programma che disegna% 5 decay esponenziali sovrapposti% nb: comando hold on, hold off, pause

t=(0:0.01:10)';tau0=0.5;figure(1)hold onfor k=1:5

tau=k*tau0;y=exp(-t/tau);plot(t,y)pause

endhold off

Page 40: INTRODUZIONE A MATLAB - home page | DEIgianni/elab_dati/intro_matlab.pdf · 1 Università degli Studi di Padova - Facoltà di Ingegneria A.A. 2006-2007 INTRODUZIONE A MATLAB Prof

79

Esempio 3% esempio di programma che disegna% decay esponenziali, uno dopo l'altro e a volontà, s ulla stessa figura% NB comandi while ed input

t=(0:0.01:10)';tau0=0.5;ancora= 's'k=1;figure(1)clfhold on

while ancora== 's'tau=k*tau0;y=exp(-t/tau);plot(t,y)ancora=input( 'Vuoi continuare (s/n) ? ' )k=k+1

endhold off

80

Esempio 4

% esempio di programma che disegna% 5 decay esponenziali su 5 subplot% comandi eval, num2str, e subplot

t=(0:0.01:10)';tau0=0.5;figure(1)for k=1:5

tau=k*tau0;y=exp(-t/tau);stringa1=[ 'subplot(5,1,' num2str(k) ')' ];eval(stringa1)plot(t,y)

end