introduzione a matlab - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 università degli studi di...

47
1 Università degli Studi di Padova Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria Corso di Laurea Specialistica in Bioingegneria A.A. 2005 A.A. 2005- 2006 2006 INTRODUZIONE A MATLAB INTRODUZIONE A MATLAB Giovanni Sparacino Dipartimento di Ingegneria dell’Informazione Università degli Studi di Padova Via Gradenigo 6/B, 35131 Padova Tel. 049 827 7741; 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: lamquynh

Post on 17-Feb-2019

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

1

Università degli Studi di Padova Università degli Studi di Padova Corso di Laurea Specialistica in BioingegneriaCorso di Laurea Specialistica in Bioingegneria

A.A. 2005A.A. 2005--20062006

INTRODUZIONE A MATLABINTRODUZIONE A MATLAB

Giovanni SparacinoDipartimento di Ingegneria dell’Informazione

Università degli Studi di PadovaVia Gradenigo 6/B, 35131 Padova

Tel. 049 827 7741; e-mail: [email protected]: 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 SignalProcessing 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 inMatlab 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 chiamaworkspace

•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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

7

Osservazione: A = [1 2 3; 4 5 6; 7 8 9] e A = [...1 2 34 5 67 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

9

Sia

A=[...2 –2 10 37 1 -3 41 5 6 -4]

Per accedere ad un elemento:x=A(3,4) assegnera’ –4

Per accedere ad un’intera riga, ad es. la 2x=A(2,:) restituira’ [7 1 -3 4]

Per accedere ad un’intera colonna, ad es. la 3x=A(:,3) restituira’ [10 -3 6]’

Per accedere ad una sottomatrice, ad es.la 2X2 in basso a destrax=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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 nelworkspace con il comando load dati.dat

12

Matlab non richiede lapredichiarazione 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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» pians =

3.1416

» format long» pians =

3.14159265358979

format short e virgola mobile, 5 cifre.

format long e virgola mobile, 15 cifre.

» format short e» pians =3.1416e+000

» format long e» pians =

3.141592653589793e+000

Page 8: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

15

GESTIONE DI STRINGHE

Definizione e concatenamento di stringheA='pinco'B='pallino'C=[A ' ' B]

Conversione di numeri in stringhe

E=67ES=num2str(E)P=[C ES]

16

VARIABILI DI TIPO RECORD

Page 9: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

19

RIEPILOGO

20

GENERAZIONE DI VETTORI O MATRICI “SPECIALI”

E’ possibile generare consemplicita’ vettori con elementiequispaziati avvalendosi del simbolo “:”

Page 11: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 diprobabilita’

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

vettore colonna di lunghezza 50 con elementi tratti da una distribuzionegaussiana 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

23

RIEPILOGO

24

A=[] : matrice vuota

A=eye(10) matrice identità 10x10A=zeros(3,5) matrice 3x5 con elementi tutti nulliA=ones(3,5) matrice 3x5 con elementi tutti pari a 1A=diag([3, 5, 6]) matrice 3x3, con elementi sulla diagonale specificati

ALTRI ESEMPI

Page 13: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 00 2

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

2 2 22 2 2

Prodotto per uno scalare, somma, prodotto tra matrici

Page 14: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 33 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

29

Altro esempio

>> x=[-1,2];>> x^2??? Error using ==> ^Matrix must be square.

Posso invece sempre agire “elemento per elemento”

>> x.^2ans =

1 4

30

Osservazione:Mettere il “.” prima dell’operatore cambia l’operazione drasticamenteperchè significa “elemento per elemento”

Page 16: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

35

Esempi: lu

36

Manipolazione di matrici

Page 19: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 dallaCommand 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

47

La scrittura di un M-file rispetto all’esecuzione di comandi dallaCommand 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

Scripts: 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 messaggio di erroreif a>=0

a=sqrt(a)else

disp('errore')end

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 messaggio di errore%if x>=0

a=sqrt(x)else

disp('errore')end

Per cominciare ci concentreremo sugli scripts

TIPI DI M-FILES

Attenzione: nel workspace deve essere stata definita una variabile a

Attenzione: Questo file deve essere salvato comeradfunz.m

Page 25: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 riga dopo il %

•Le prime righe di commento di uno script o di una functiondiventano parte dello help online

USO DEL % (COMMENTI)

Page 26: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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

Gli operatori relazionali più comuni sono:== uguale~= diverso da< minore di<= minore o uguale etc.

Esempi:>> x=2;>> x==0 (questa relazione e’ falsa:)ans =

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

1

OPERATORI RELAZIONALI

Page 27: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 10 0

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

1 11 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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

55

OPERATORI LOGICI

Gli operatori logici più comuni sono:& and logico| or logico~ not logico

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 ORany - True if any element of vector is nonzeroall - True if all elements of vector are nonzero

Page 29: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

57

USO DEGLI OPERATORI LOGICI SU MATRICI

any - True if any element of vector is nonzeroall - True if all elements of vector are nonzero

58

STRUTTURE DI PROGRAMMAZIONE

Page 30: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

59

STRUTTURA IF … ELSE…END

Struttura:

if espressioneistruzioni

elseistruzioni

end

Esempio:

if mod(x,2)==0

disp(‘numero est pari’)

else

disp(‘numero dispari’)

end

60

STRUTTURA IF … ELSEIF …END

Struttura:

if espressioneistruzioni

elseif espressioneistruzioni

elseistruzioni

end

Esempio:

if canestro==false

punti = 0;

elseif tirodalontano == true

punti = 3;

else

punti = 2;

end

Page 31: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

61

Il ciclo for ha la struttura:

for variabile = espressioneistruzioni

end

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

Esempio

s=0;for i=1:10

s=s+i;end

calcola la somma dei primi 10 numeri interi (55)

CICLO FOR … END

62

Il ciclo while ha la seguente struttura

while espressioneistruzioniend

Esempioi=1;while i<5i=i+1;

endi

>> ii =

5

CICLO WHILE … END

Page 32: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

69

Una serie temporale (senza asse ascisse)

plot(y)

Una funzione

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

Con i circolettiplot(t,y,'o')

Circoletti + lineaplot(t,y,'o',t,y)

Circoletti + linea rossaplot(t,y,'o',t,y,'r')

Circoletti+linea rossa tratteggiataplot(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)

Circoletti e asterischi

plot(t1,y1,'o',t2,y2,'*')

Piu' figure

figure(1)

plot(t1,y1)

figure(2)

plot(t2,y2)

Page 36: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 annessititle, 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 correnteclose all: chiusura di tutte le finestre graficheclose (n) : chiude la figura nclf: 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 ordinateaxis tight : gli assi finiscono al valore massimo/minimo dei dati (non rimane contorno)axis auto : la scala di visualizzazione è scelta da Matlabaxis off/on : elimina/ripristina la visualizzazione di assi, etichette e tick.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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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

50bar(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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

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 - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

79

Esempio 3% esempio di programma che disegna% decay esponenziali, uno dopo l'altro e a volontà, sulla 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

Page 41: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

81

CREAZIONE DI FUNCTION

82

La function inizia con una riga che ne specifica il nome (nell’esempio radfunz), le variabili di input e le variabili di output.

La function deve essere salvata in un file con lo stesso nome (nell’esempio radfunz.m)

I commenti dopo la prima riga faranno parte dello help on-line

Seguono le istruzioni con eventuali altri commenti

STRUTTURA DI UNA FUNCTIONfunction a=radfunz(x)% RADFUNZ(X) calcola la radice degli elementi di X% se X>=0, altrimenti stampa un messaggio di errore%if x>=0

a=sqrt(x)else

display('errore')end

Page 42: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

83

Un altro esempio

function [xmin,xmax]=minmax(a)

%MINMAX(A) calcola l'elemento minimo, XMIN, e l’elemento % massimo, XMAX della matrice A.

xmin=Inf; xmax=-Inf;

% ricava le dimensioni della matrice A:[m,n] = size(a);for i=1:m

for j=1:nif a(i,j) > xmax

xmax = a(i,j);endif a(i,j) < xmin

xmin = a(i,j);end

endend

84

Un altro esempio

function [mean, stdev] = stat(x)% STAT è una funzione che calcola media e standard deviation per un vettore

[m n] = size(x);

if (m ~= 1) | (n ~=1)error(‘errore: si accettano solo vettori’)

end

mean = sum(x)/m;stdev = sqrt(sum(x.^ 2)/m - mean.^2);

Page 43: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

85

function [out1,out2,…]=funz(in1,in2,….)

In generale, le function hanno la seguente struttura

Gli argomenti in output vanno a sinistra dell’ uguale, fra parentesi quadre

Gli argomenti in input vanno a destra dell’ uguale , fra parentesi tonde

Le function vengono richiamate dal programma main passando le variabili di ingresso (anche con nome diverso !)

86

function y=ddpgaussiana(x,m,s);

% questa function restituisce i valori della% ddp nei punti x per una v.a. gaussiana% a media m e deviazione standard s

y= ((1/sqrt(2*pi)*s))*exp((-(x-m).^2)/(2*s^2));

% programma main che fa uso di una% function da me creata per calcolare% il valore della ddp gaussiana a partire da % media e dev.standard

a=[-20:0.1:20];f_a=ddpgaussiana(a,0,4); plot(a,f_a)

Programma “main”

ESEMPIO

Page 44: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

87

function y=mia_funz1(x)%function y=mia_funz1(x)% questa e' una function che restituisce il% valore di una_funzione y=mia_funz1(x),% scalare di variabile scalare,% che definisco sotto

if length(x)==1contributo1=exp(-2*x);contributo2=exp(-5*x);y=contributo1+contributo2;

elseerror('la funzione mia funz1 accetta solo argomenti scalari')

end

% esempio di programma main che richiama% una function da me costruita di nome mia_funz1t=(0:0.1:10)';for k=1:length(t)

h(k,1)=mia_funz1(t(k));endplot(t,h)

Programma “main”

ESEMPIO

88

function yv=mia_funz2(xv)% function yv=mia_funz(xv)% questa funzione restituisce un vettore yv% le cui componenti sono l'immagine delle% componenti del vettore xv secondo la % funzione scalare di variabile scalare % da me costruita sotton=length(xv);for k=1:n

xscalare=xv(k);if xscalare<0yscalare=-0.2*xscalare+5;elseyscalare=5*exp(-0.2*xscalare);

endyv(k)=yscalare;

end

ESEMPIO

Page 45: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

89

% esempio di programma main che richiama% una function da me costruita di nome mia_funz2% sfrutta la natura vettoriale della funzione

t=(-10:0.1:10)';h=mia_funz2(t);plot(t,h)

Programma “main”

% esempio di programma main che % richiama una function, quad,% che ha come argomento anche una function da me costruita di nome mia_funz2

t=(-10:0.1:10)';h=mia_funz2(t);plot(t,h)

a=-2;b=2;area = quad('mia_funz2',a,b)

Programma “main”

90

% esempio di programma main che % richiama una function, quad,% che ha come argomento anche una function da me costruita di nome mia_funz2

t=(-10:0.1:10)';h=mia_funz2(t);plot(t,h)

a=-2;b=2;area = quad('mia_funz2',a,b)

Programma “main”

FUNZIONI CHE OPERANO SU FUNZIONI

Page 46: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

91

Integrale definito della funzione sin

Esempi: funzioni di funzioni

92

Integrale definito della funzione 5*sin

Esempi: funzioni di funzioni composte

INLINE Construct INLINE object.INLINE(EXPR) constructs an inline function object from theMATLAB expression contained in the string EXPR. The inputarguments are automatically determined by searching EXPRfor variable names (see SYMVAR). If no variable exists, 'x'is used.

Examples:g = inline('t^2')

Page 47: INTRODUZIONE A MATLAB - dei.unipd.itgianni/infosan/intro_matlab.pdf · 1 Università degli Studi di Padova Corso di Laurea Specialistica in Bioingegneria A.A. 2005-2006 INTRODUZIONE

93

Cerca zeri della funzione sin(x) vicino a 3

Cerca zeri della funzione sin(2*x) vicino a 1

Esempi: funzioni di funzioni e funzioni di funzioni composte

94

ALCUNE FUNZIONI CHE POTRANNO ESSERE UTILI