You are on page 1of 35

Corso di Grafica Computazionale

Corso di Grafica Computazionale Docente: Prof. Monica Carfagni

Matlab

Matlab I

Corso di Grafica Computazionale

Indice
INTRODUZIONE .....................................................................................................................1 1. Le finestre di Matlab ....................................................................................................................... 2 1.1 La Command Window .............................................................................................................. 3 1.2 La finestra Command History .................................................................................................. 4 1.3 La finestra Launch Pad ............................................................................................................ 4 1.4 La finestra Current Directory .................................................................................................. 4 1.5 La finestra Workspace ............................................................................................................. 5 1.6 LArray Editor.......................................................................................................................... 6 1.7 LHelp ...................................................................................................................................... 6 Gli m-file e la finestra Editor/Debugger ........................................................................................ 8 I commenti ..................................................................................................................................... 10 La gestione delle variabili ............................................................................................................. 10 4.1 Alcuni tipi di variabili ............................................................................................................ 10 4.2 Vettori e matrici ..................................................................................................................... 11 4.3 Alcune convenzioni particolari e comandi utili ..................................................................... 14 4.4 Il tipo STRUCT....................................................................................................................... 15 4.5 Salvataggio del workspace..................................................................................................... 15 4.6 Caricamento di un workspace salvato ................................................................................... 15 Principali operatori ....................................................................................................................... 16 5.1 Operatori aritmetici ............................................................................................................... 16 5.2 Operatori matematici ............................................................................................................. 16 5.3 Principali operatori su matrici e vettori ................................................................................ 18 5.4 Operatori relazionali e logici ................................................................................................ 20 Comandi di Programmazione ....................................................................................................... 22 6.1 Il comando if .......................................................................................................................... 22 6.2 I cicli ...................................................................................................................................... 23 6.3 Invio di testo formattato a schermo ....................................................................................... 25 6.4 Inserimento di dati da tastiera ............................................................................................... 25 6.5 Alcuni comandi utili ............................................................................................................... 26 Grafica ........................................................................................................................................... 27 7.1 La funzione Plot ..................................................................................................................... 27 7.2 Alcuni comandi utili ............................................................................................................... 28

2. 3. 4.

5.

6.

7.

Matlab II

Corso di Grafica Computazionale

Introduzione
MATLAB (MATrix LABoratory) un programma interattivo di calcolo scientifico e ingegneristico. un linguaggio di programmazione ad alto livello per la soluzione numerica di problemi ed il tracciamento di grafici, ed basato sullutilizzo di dati di tipo matriciale (scalari, vettori, matrici a due o pi dimensioni). Include diversi toolbox, ossia una collezione di file speciali detti m-file o file con estensione .m, che estendono le funzionalit del programma di base o nucleo. Matlab comunemente usato per: Calcoli matematici Sviluppo di algoritmi Modellazione e simulazione Analisi e visualizzazione di dati Grafici scientifici e ingegneristici Sviluppo di applicazioni incluso costruzione di interfacce grafiche. Matlab un programma case sensitive, cio sensibile alla differenza tra caratteri minuscoli e maiuscoli sia nei comandi che nel nome delle variabili.

Per iniziare doppio click sullicona :

Matlab 1

Corso di Grafica Computazionale

1. Le finestre di Matlab
Allavvio del programma appare la finestra mostrata in figura 1.
Launch Pad: tool disponibili Workspace: elenco delle variabili del workspace

Current Directory:Directory di lavoro

Command Window

Current Directory: per visualizzare e modificare la directory corrente Command History: per visualizzare e riutilizzare i comandi gi inseriti figura 1 Finestra di default di Matlab

Linterfaccia grafica mostrata in figura 1 disponibile dalla versione 6 di Matlab. Nella release precedente (Mtalab 5.3) visualizzata soltanto la Command Window (figura 2).

Matlab 2

Corso di Grafica Computazionale

figura 2 Finestra di default di Matlab 5.3

1.1

La Command Window

Utilizzare la finestra Command Window (figura 3) per inserire nuove variabili, eseguire operazioni di assegnazione a variabili esistenti, eseguire comandi e programmi (m-file). Il simbolo >> indica il prompt dei comandi dove possibile digitare listruzione da eseguire. Per esempio il comando ones(n) crea una matrice nxn composta da numeri 1. Se voglio eseguirlo devo digitare ones(numero) al prompt dei comandi digitare ones(4) per creare una matrice 4x4 composta da 1 >> ones(4) premere invio nella Command Window appare il risultato del comando; il programma visualizza la variabile ans (vedi cap.4 ) a cui stata assegnata una matrice 4x4 composta da numeri uno automaticamente appare nuovamente il prompt dei comandi pronto per un nuovo comando
figura 3 Finestra della Command Window

Per eseguire unoperazione di assegnazione digitare al prompt: >> a=3 la finestra visualizzer il valore della variabile a a= 3 >> la variabile a stata memorizzata nel workspace o spazio di lavoro. E possibile richiamare un comando precedentemente digitato ed eseguito semplicemente utilizzando i tasti freccia . Al prompt dei comandi appariranno i comandi eseguiti fino a quel momento che potranno quindi essere modificati e rilanciati premendo Invio. Matlab 3

Corso di Grafica Computazionale

Mettendo le prime lettere di un comando e premendo il tasto freccia , Matlab richiama al prompt tutti i comandi precedentemente utilizzati che cominciano con le lettere introdotte. 1.2 La finestra Command History

La Command History (storia dei comandi) (figura 4) contiene la sequenza di tutti i comandi eseguiti nella Command Window . E possibile rieseguire un comando semplicemente cliccandoci sopra due volte nella Command History, oppure cliccandoci sopra con il tasto destro e poi selezionando Evaluate Selection (valuta selezione).
Inizio sessione

Menu che appare con il tasto dx

figura 4 Finestra della Command History

1.3

La finestra Launch Pad

Dalla finestra Launch Pad (tavoletta di lancio) (figura 5) possibile visualizzare delle demo, accedere alle finestre di help, e lanciare gli strumenti interattivi di tutti i prodotti Mathworks installati sul computer.

Accede direttamente alla documentazione del prodotto a cui lhelp collegato Visualizza una demo del prodotto a cui la demo collegata

Doppio clic per aprire i tool Collegamento alla pagina Web

figura 5 Finestra Launch Pad

1.4

La finestra Current Directory

La finestra Current Directory (figura 6) contiene gli strumenti per la gestione della directory di lavoro. E possibile selezionare la directory e visualizzarne il contenuto, effettuare ricerche con lapposito tasto tra i file presenti nella directory.

Matlab 4

Corso di Grafica Computazionale

figura 6 Finestra Current Directory

I file visualizzati nella finestra possono essere aperti cliccandoci direttamente per due volte oppure cliccandoci con il tasto destro e selezionando una delle voci del menu che appare. Nella release anteriore alla 6, la directory di lavoro pu essere visualizzata e modificata attraverso il path browser (la directory di lavoro si trova nella casella in alto alla voce current directory), a cui si accede dal pulsante della finestra di comando.

Il contenuto della cartella di lavoro visualizzabile utilizzando il consueto pulsante oppure tramite il comando dir digitato nella Command Window. 1.5 La finestra Workspace

La finestra Workspace (spazio di lavoro) (figura 7) contiene linsieme delle variabili definite nella sessione di lavoro utilizzando i comandi, gli m-file o importando dati.

figura 7 Finestra Workspace e menu che appare con il tasto destro

Cliccando due volte sul nome di un variabile possibile visualizzarne e modificarne il contenuto con lArray Editor. Nella versione anteriore alla release 6 la finestra Workspace si chiama Workspace Browser ed visualizzabile tramite il tasto nella barra degli strumenti.

Matlab 5

Corso di Grafica Computazionale

Le variabili contenute nel Workspace possono essere visualizzate anche direttamente nella Command Window tramite i comandi who e whos. Le istruzioni who, whos generano una lista delle variabili, semplice senza dettagli (who) o dettagliata specificando dimensione e tipo (whos). 1.6 LArray Editor

La finestra dellArray Editor (figura 8) pu essere utilizzata per visualizzare e modificare array mono e bidimensionali in formato numerico, stringa e vettori di celle contenenti dati tipo differente. E possibile modificare il valore di una cella cliccando direttamente al suo interno e inserendo il nuovo valore.

figura 8 La variabile a (matrice 4x5) visualizzata nella finestra dellArray Editor

Nella versione 5.3 il contenuto della variabili visualizzato nella finestra Editor/Debugger che sar descritta nel seguito. 1.7 LHelp

La finestra di Help pu essere attivata dal Menu Help oppure premendo il pulsante

Ricerca di argomenti

comandi

Ricerca di testo

figura 9 Finestra dellHelp di Matlab 6

Matlab 6

Corso di Grafica Computazionale

E possibile ricercare comandi di Matlab o argomenti dal menu index. Dal menu search possibile ricercare del testo allinterno di tutte le pagine della guida.

Nella release precedente alla 6 la guida consultabile come pagina web (figura 10). Si accede alla guida dal menu Help, selezionando Help Desk (HTML).

Ricerca di argomenti

comandi

Ricerca di testo

figura 10 LHelp Desk della Release 5.3

E possibile consultare il contenuto della guida inerente un qualsiasi comando direttamente nella Command Window con listruzione help :
>> help nome_comando

Matlab 7

Corso di Grafica Computazionale

2. Gli m-file e la finestra Editor/Debugger


I comandi di Matlab possono essere eseguiti sia in modo interattivo nella Command Window oppure creando un m-file. Un m-file un file di testo in formato ascii con lestensione .m ed semplicemente una lista di comandi che vengono eseguiti in sequenza. Per creare un nuovo m-file premere il tasto e automaticamente il programma creer un nuovo file. E possibile eseguire la stessa operazione dal menu File, successivamente New e quindi mfile. Viene aperta la finestra Editor/Debugger (figura 11) nella quale possibile creare il file e successivamente modificarlo, salvarlo, ricercare e correggere gli errori (debugging).

figura 11 Visualizzazione dell m-file baricentro.m nella finestra Editor/Debugger.

La finestra contiene alcuni pulsanti comuni a molti programmi che lavorano sotto il sistema operativo Windows. Il loro funzionamento uguale agli analoghi tasti presenti negli altri programmi. Per aprire un m-file esistente cliccare sul tasto quindi m-file. oppure scegliere Open dal menu File e

Anche in questo caso il file aperto nella finestra Editor/Debugger E possibile eseguire l m-file visualizzato nella finestra Editor/Debugger in pi modi: selezionando il comando Run dal menu Debug (oppure nel menu Tools per le versioni precedenti alla 6) premendo il tasto funzione della tastiera F5 premendo il pulsante sulla barra degli strumenti digitando il nome del m-file nella Command Window (ammesso che la cartella di lavoro sia quella in cui contenuto lm-file).

Si fa notare che in tutti i casi precedenti lm-file deve essere salvato, con tutte le modifiche eventualmente apportate, nella cartella in cui Matlab sta lavorando. Nella fase di debugging pu essere utile utilizzare i breakpoint, cio punti di interruzione che stoppano lesecuzione del programma al punto in cui stato posizionato il breakpoint stesso. Questo pu essere utile se vogliamo controllare il funzionamento del programma in Matlab 8

Corso di Grafica Computazionale

un determinato punto e non ci interessa controllare il funzionamento di tutte le istruzioni precedenti. Per inserire o togliere un breakpoint ci sono pi possibilit: Cliccare sulla linea di programma dopo il numero (solo a partire dalla versione 6) Utilizzare il tasto F12 Dal menu Breakpoints (oppure dal menu Debug per la versione 5.3) selezionare Set/Clear Breakpoint Posizionare il cursore sulla linea di programma e premere il pulsante

Breakpoint

figura 12 Lesecuzione del programma si interrompe prima dellesecuzione della riga 5

Per eliminare tutti i breakpoint: Dal menu Breakpoints (oppure dal menu Debug per la versione 5.3) selezionare Clear All Breakpoint Premere il pulsante (solo a partire dalla versione 6)

Per scovare eventuali errori possibile eseguire lm-file riga per riga controllando il valore delle variabili durante lesecuzione di ogni riga di programma. Nel menu Debug ci sono a disposizione del programmatore alcuni strumenti molto utili per scovare eventuali errori. I tasti, le voci del menu Debug, i comandi equivalenti da digitare nella Command Window e la descrizione di questi strumenti sono riportati nella Tabella 1.
Tabella 1 Strumenti per il Debugging Pulsante Voce del menu Debug Descrizione Tasto funzione

Continue Go until cursor Step Step in

Continua lesecuzione di un m-file fino alla fine o fino al prossimo Breakpoint. Il menu visualizza Run o Save and Run se il file non in esecuzione. Continua lesecuzione del file fino alla riga dove posizionato il cursore Esegue la riga corrente del file Esegue la riga corrente del file, se la riga una chiamata ad unaltra funzione passa ad eseguire riga per riga i comandi della funzione chiamata. Dopo lutilizzo dello Step in, esegue le rimanenti istruzioni della funzione e si arresta alla riga successiva alla chiamata della funzione.

F5

F10 F11

Step out

Shift + F11

Linterruzione dellesecuzione dellm-file segnalata dalla freccia. Matlab 9

Corso di Grafica Computazionale

Nellesempio di figura 13 lesecuzione si fermata alla riga 3 che deve essere ancora eseguita.

figura 13 La freccia indica listruzione da eseguire

Per visualizzare il valore di una variabile sufficiente spostare il cursore sopra la variabile e automaticamente il programma ne visualizza il valore oppure si possono utilizzare i sistemi gi descritti nel capitolo 1.

3. I commenti
Il carattere % precede le linee di commento negli m-file. Tutto quello che in una riga segue il simbolo % viene ignorato dal programma e non viene eseguito. Le linee di commento cominciano con il segno %. Le linee di commento possono apparire ovunque in un m-file e possono essere attaccate alla fine di una riga del codice.

figura 14 Esempio di linee di commento

4. La gestione delle variabili


4.1 Alcuni tipi di variabili A differenza di altri programmi Matlab non richiede la dichiarazione di tipo per ogni variabile definita. Il tipo assegnato automaticamente durante loperazione di assegnazione. Il tipo di una variabile pu essere visualizzato direttamente nella finestra Workspace oppure nella Command Window utilizzando il comando whos. I tipi di variabili di pi comune utilizzo sono: UINT 8 UINT 32 intero senza segno di 8 bit intero senza segno di 32 bit Matlab 10

Corso di Grafica Computazionale

DOUBLE DOUBLE ARRAY CHAR CHAR ARRAY STRUCT

numero decimale di 64 bit (reale) vettore o matrice (array) composto da numeri di tipo DOUBLE carattere singolo vettore o matrice (array) composto da caratteri dato composto da pi campi di tipo eterogeneo( vedi Par. 4.4)

Una variabile pu essere creata semplicemente eseguendo un assegnazione direttamente nella Command Window oppure allinterno di un m-file Ad ogni assegnazione di un valore ad una variabile segue la visualizzazione del valore del risultato dellassegnazione: >> p=10 p= 10 >> Se loperazione di assegnazione seguita dal punto e virgola (;) non viene visualizzato il risultato delloperazione: >> p=10; >> Il carattere (;) posto dopo un qualsiasi comando sopprime linvio a schermo del risultato del comando stesso. Per assegnare una variabile di tipo Char (carattere) si devono utilizzare gli apici: >> c=h; c= h 4.2 Vettori e matrici

Per assegnare una nuova matrice : [ ] per racchiudere gli elementi della matrice spazio o virgola per separare gli elementi di una riga >>A=[1 2 3;4 5 6;7 8 9]; >>A=[1,2,3;4,5,6;7,8,9]; >> Invio o punto e virgola (;) per separare le colonne

>>A=[1 2 3 4,5,6 7,8 9]; >> Allo stesso modo pu essere creato un vettore. Un vettore infatti una matrice monodimensionale. >> vet=[1 2 3 4 5,6,7] vet = 1 2 3 4 5 >>

Matlab 11

Corso di Grafica Computazionale

Gli elementi di una matrice possono essere assegnati anche uno alla volta utilizzando gli indici che definiscono la posizione dellelemento allinterno della matrice e impiegando le parentesi tonde () al posto delle parentesi quadre []. Nel caso di vettori sufficiente utilizzare un solo indice per identificare la posizione allinterno del vettore. Gli elementi di una matrice possono essere utilizzati anche come variabili. Ad es. A(1,2) si riferisce allelemento posizionato sulla prima riga e seconda colonna della matrice A. vet(3) si riferisce al terzo elemento del vettore vet. Le dimensioni della matrice si adattano di volta in volta per accogliere il nuovo elemento. Seguono alcuni esempi delladattamento alle dimensioni, dellassegnazione di valori e del riferimento a elementi per vettori e matrici: >>a=[1 6 11 -6 8] a= 1 6 11 -6 8 >>a(4) ans = -6 >>a=3 a= 3 >> >> A(1,2)=10 A= 0 10 >> A(3,5)=21 A= 0 10 0 0 0 0 0 0 0 >>

0 0 0 0 0 21

>> A(3,4)=-2 A= 0 10 0 0 0 0 0 0 0 0 0 0 0 -2 21 >> >> A(3,4)+A(1,2) ans = 8 >> Lapice () loperatore per ottenere il trasposto di una matrice o vettore (vengono scambiate le righe con le colonne): >> a=[1 2 3 4] a= 1234 >>b=a Matlab 12

Corso di Grafica Computazionale

b= 1 2 3 4 >> Unione di matrici e vettori: >> A=[1 2 3;4 5 6;7 8 9]; >> V=[10 11 12]; >> A=[A;V] A= 1 2 3 4 5 6 7 8 9 10 11 12 >> Il carattere due punti (:) uno degli operatori pi utili. Ad es. pu essere utilizzato per creare vettori, selezionare elementi o definire intervalli. Loperatore due punti pu essere utilizzato per creare vettori equispaziati. j:k j:i:k per creare un vettore equispaziato; lo stesso di [j,j+1,...,k] per creare un vettore equispaziato con passo i ; lo stesso di [j,j+i,j+2i, ...,k]

Di seguito sono riportati alcuni esempi di utilizzo delloperatore : per la selezione di righe, colonne ed elementi di vettori o matrici. A(:,j) A(i,:) A(:,:) A(:,j:k) per estrarre la j-esima colonna della matrice A per estrarre la i-esima riga della matrice A equivalente ad A (tutta la matrice) equivalente a [A(:,j), A(:,j+1),...,A(:,k)]

Ad esempio: >>a=1:4; >>b=5:8; >>c=9:12; >>A=[a;b;c] A= 1 2 3 4 5 6 7 8 9 10 11 12 >>A(:,1) ans= 1 5 9 >>A(2,:) ans= 5678 >>A(1:2,2:3) ans= Matlab 13

Corso di Grafica Computazionale

23 67 >> Il carattere due punti (:) usato in generale per indicare una sequenza (creare un vettore) nella forma: inizio:passo:fine, oppure inizio:fine; in questultimo caso Matlab assume un passo unitario. >>a=1:4 a= 1234 >>a=1:0.5:4 a= 1 1.5 2 2.5 3 3.5 4 >> >>a=4:-0.5:2 a= 4 3.5.3 2.5 2 >> 4.3 Alcune convenzioni particolari e comandi utili

Alla variabile ans (answer=risposta) viene attribuito il risultato di una operazione se questo non espressamente assegnato ad una variabile: >>a=1; >>b=3; >>a*b ans= 3 >>ans ans=3 >> La variabile pi predefinita e vale >>d=4; >>circ=d*pi circ= 12.5664 >> I comandi who, whos generano una lista delle variabili del workspace, semplice senza dettagli (who) o specificando dimensione e tipo (whos). Se un comando genera pi di un risultato possibile assegnare direttamente i risultati del comando a diverse variabili. Ad esempio il comando max(vettore) restituisce il valore massimo di un vettore e la sua posizione allinterno del vettore stesso: >>c=[3 2 6 9 7 8]; >>[m,ind]=max(c) m= 9 ind= 4 >> Matlab 14

Corso di Grafica Computazionale

Per eliminare tutte le variabili dal workspace utilizzare il comando clear >>clear >> Per eliminare soltanto alcune variabili dal workspace utilizzare clear seguito dal nome della variabile da cancellare: >>clear X Y Z >> 4.4 Il tipo STRUCT

I dati di tipo STRUCT possono contenere dati di tipo differente. I campi del dato sono definiti con una assegnazione con la seguente sintassi: nome_variabile_struct.nome_campo=valore_del_campo Nellesempio definito il dato Utente_1 che contiene come campi i dati relativi al nome, cognome, telefono e indirizzo di una persona. >> Utente_1.nome='Leonardo'; >> Utente_1.cognome='Rossi'; >> Utente_1.telefono=0551234567; >> Utente_1.indirizzo='Via Pisana 10'; >> >> Utente_1 Utente_1 = nome: 'Leonardo' cognome: 'Rossi' telefono: 0551234567 indirizzo: 'Via Pisana 10' in questo caso i campi 1,2 e 4 sono vettori di caratteri (Char Array); mentre il campo 3 un numero (double) 4.5 Salvataggio del workspace

Per memorizzare lintero contenuto del workspace in un file con estensione .mat: save nomefile save save nomefile X Y Z per salvare tutto il workspace nel file nomefile.mat per salvare tutto il workspace nel file matlab.mat per salvare le variabili X, Y e Z nel file nomefile.mat

4.6

Caricamento di un workspace salvato

Le variabili precedentemente salvate in un file .mat possono essere lette da file con il comando load. load load filename load filename X Y Z legge il contenuto del file matlab.mat legge il contenuto del file filename o filename.mat legge soltanto le variabili specificate Matlab 15

Corso di Grafica Computazionale

5. Principali operatori
5.1 Operatori aritmetici
Tabella 2 Principali operatori aritmetici Simbolo Operatore

Gli operatori aritmetici pi importanti sono riportati nella Tabella 2

+ * / ^ .* .^ ./

Somma Sottrazione Moltiplicazione Divisione Elevamento a potenza Moltiplicazione elemento per elemento Elevamento a potenza elemento per elemento Divisione elemento per elemento

Il funzionamento delloperatore .* (e in generale di tutti gli operatori elemento per elemento) esemplificato dallesempio seguente: >>a=[1 2 3 4]; >>b=[2 3 4 5]; >>a*b (nota: prodotto righe per colonne secondo le convenzioni del calcolo matriciale) ans= 40 >>a.*b (nota: prodotto elemento per elemento) ans= 2 6 12 20 >> 5.2 Operatori matematici

Oltre ai basilari operatori aritmetici Matlab ha predefinite molte funzioni matematiche di uso comune. Le principali sono riportate di seguito.

abs(A) >>A=[1 1 2 2] A= 1 1 2 2 >>B=abs(A) B= 1122 >>

calcola il valore assoluto di ogni elemento di A

cos(A) sen(A) tan(A)

calcola il coseno di ogni elemento di A calcola il seno di ogni elemento di A calcola la tangente di ogni elemento di A

Matlab 16

Corso di Grafica Computazionale

exp(A) log(A) log10(A) sqrt(A) round(A) fix(A)

calcola lesponenziale di ogni elemento di A calcola il logaritmo naturale in (base e) di ogni elemento di A calcola il logaritmo in base 10 di ogni elemento di A calcola la radice quadrata di ogni elemento di A approssima ogni elemento di A allintero pi vicino troncamento di ogni elemento di A alla parte intera

>> A=[9.5013 6.0684 8.9130; 2.3114 4.8598 7.6210]; >> B=round(A) B= 10 6 9 2 5 8 >>B=fix(A) B= 9 6 8 2 4 7 >>

max(A)

se A un vettore, il risultato il valore massimo se A una matrice, il risultato un vettore contenente il massimo di ogni colonna

>> A=[4 8 -1 3 6 9 3]; >> max(A) ans = 9 >>A=[2 6 -1 7 3;2 6 9 3 6;3 7 9 8 2] A= 2 6 -1 7 3 2 6 9 3 6 3 7 9 8 2 >> max(A) ans = 3 7 9 8 6 >>

[b,ind]=max(A) calcola i valori massimi ed i relativi indici >> A=[4 8 -1 3 6 9 3]; >> [b,ind]=max(A) b= 9 ind = 6 >>

min(A) real(A) imag(A)

calcola il valore minimo, analogo al comando max calcola la parte reale di ogni elemento complesso della matrice A calcola la parte immaginaria di ogni elemento complesso della matrice A Matlab 17

Corso di Grafica Computazionale

>> z=[2+3*i 4-5*i] z= 2.0000 + 3.0000i 4.0000 - 5.0000i >> rz=real(z),iz=imag(z) rz = 2 4 iz = 3 -5 >>

conj(A)

calcola il complesso coniugato di ogni elemento complesso della matrice A

>> z=[2+3*i 4-5*i] z= 2.0000 + 3.0000i 4.0000 - 5.0000i >> cz=conj(z) cz = 2.0000 - 3.0000i 4.0000 + 5.0000i >>

prod(A)

se A un vettore, il risultato il prodotto degli elementi, se A una matrice, il risultato un vettore contenente il prodotto degli elementi di ogni colonna

>> A=[4 8 -1 3 6 9 3]; >> prod(A) ans = -15552 >> sum(A) ans = 32 >>

sum(A)

se A un vettore, il risultato la somma degli elementi, se A una matrice, il risultato un vettore contenente la somma degli elementi di ogni colonna

5.3

Principali operatori su matrici e vettori

Matlab mette a disposizione una serie di funzioni predefinite per la gestione delle matrici.

eye(N,M), eye(N) >> C=eye(3,4) C= 1 0 0 0 0 1 0 0 0 0 1 0 >>

creano una matrice NxM o NxN con 1 sulla diagonale e 0 altrove

ones(N,M), ones(N) >>a=ones(2,3)

creano una matrice NxM o NxN con tutti gli elementi uguali a 1

Matlab 18

Corso di Grafica Computazionale

a= 111 111 >>

zeros(N,M), zeros(N)

creano una matrice NxM o NxN con tutti gli elementi uguali a 0 calcola lesponenziale di ogni elemento di A

>> B=zeros(3,4) B= 0 0 0 0 0 0 0 0 0 0 0 0 >>

rand(N,M)

genera una matrice NxM di numeri casuali compresi tra 0 e 1 con distribuzione uniforme

>> A=rand(2,3) A= 0.4565 0.8214 0.0185 0.4447 >>

0.6154 0.7919

det(A) >> A=[1 2 3 4] A= 1 2 3 4 >> det(A) ans = -2 eig(A)

calcola il determinante della matrice A

calcola gli autovalori della matrice A. Se si desidera calcolare anche gli autovettori assegnare il risultato delloperazione precedente a due matrici, la prima conterr gli autovettori , la seconda gli autovalori.

>> [avt,avl]=eig(A) avt = -0.8246 -0.4160 0.5658 -0.9094

avl = -0.3723 0 0 5.3723 >>

size(A)

valuta le dimensioni della matrice A Matlab 19

Corso di Grafica Computazionale

>> A=[2 6 -1 7 3;2 6 9 3 6;3 7 9 8 2] A= 2 6 -1 7 3 2 6 9 3 6 3 7 9 8 2 >> [N,M]=size(A) N= 3 M= 5 >>

length(V) >> V=[2 6 43 7 78 8]; >> length(V) ans = 6 >>

valuta la dimensione del vettore V

sort(V)

ordina, in ordine decrescente, gli elementi di un vettore o ogni colonna di una matrice

>> A=[8 6 -1 9 3;2 6 9 3 6;3 7 -1 -3 2] A= 8 6 -1 9 3 2 6 9 3 6 3 7 -1 -3 2 >> sort(A) ans = 2 6 -1 -3 2 3 6 -1 3 3 8 7 9 9 6 >>

[W,ind]=sort(V)

genera il vettore ordinato W e memorizza gli indici utilizzati per il riordino nella variabile ind

>> V=[3 6 1 0 5]; >> [W,H]=sort(V) W= 0 1 3 5 6 H= 4 3 1 5 2 >> V1=[-1 6 7 2 9]; >> V1(H) ans = 2 7 -1 9 6 >> 5.4 Operatori relazionali e logici

Un operatore relazionale, come dice la definizione stessa, un operatore che esegue unanalisi su gli operandi passati per argomento e restituisce come risultato uno dei due Matlab 20

Corso di Grafica Computazionale

valori booleani vero (1) o falso (0). Un operatore logico, invece, consente la combinazione di uno o pi valori booleani per darne uno nuovo. Gli operatori relazionali e logici sono riportati nella Tabella 3.
Tabella 3 Operatori relazionali e logici Simbolo Operatore

== < <= > >= = & | Ad esempio: >> a=1 a= 1 >> b=2 b= 2 >> risp=(a==b) risp = 0 >> risp=(a==a) risp = 1

Uguale Minore Minore o uguale Maggiore Maggiore o uguale Diverso And (e) Or (oppure) Not (non)

I valori restituiti dagli operatori logici, per le diverse combinazioni dei parametri in ingresso, sono mostrati nella Tabella 4.
Tabella 4 Definizioni degli operatori logici AND, OR e NOT

AND
VERO

VERO

FALSO

OR
VERO

VERO

FALSO

NOT

VERO

FALSO

VERO

FALSO

VERO

VERO

FALSO

VERO

FALSO

FALSO

FALSO

FALSO

VERO

FALSO

Alcuni esempi di istruzioni che coinvolgono operatori relazionali e logici: >> a=((2==2)&(3==3)) a= 1 >> b=((2==5)&(3>2)) b= 0 vero and vero

falso and vero

Matlab 21

Corso di Grafica Computazionale

>> c=(a&b) c= 0 >> d=(a|b) d= 1 >> e=(~d) e= 0 >>

vero and falso

vero or falso

not vero

6. Comandi di Programmazione
Matlab un eccellente ambiente di programmazione per lo sviluppo delle pi svariate applicazioni matematiche e non. Matlab ha predefiniti molti comandi utili alla realizzazione di programmi di ogni livello di complessit. I principali comandi necessari per la realizzazione anche del pi semplice programma sono riportati in questo capitolo. Difficilmente i comandi di programmazione vengono utilizzati direttamente la Command Window, in generale fanno parte di programmi scritti direttamente nelleditor di Matlab. 6.1 Il comando if

Listruzione per il controllo di flusso if consente allapplicazione di decidere, in base ad una condizione (tipicamente una operazione relazionale), se eseguire o no una certa istruzione. La sintassi di questa istruzione la seguente: if condizione, istruzioni1, end oppure (pi comunemente) if condizione istruzioni1 end Se la condizione vera vengono eseguite le operazioni contenute in istruzioni1, altrimenti si procede con listruzione che segue lend. Lesecuzione dellesempio di figura 15 produce come risultato la schermata: b= 4 a= 7 >>

Matlab 22

Corso di Grafica Computazionale

figura 15 esempio di utilizzo del comando if

E possibile utilizzare anche due gruppi di istruzioni su condizione: if condizione istruzioni1 else istruzioni2 end Se la condizione vera vengono eseguite le istruzioni1, altrimenti vengono eseguite le istruzioni2. Dopo aver eseguito uno dei due gruppi di istruzioni, in entrambi i casi si procede alle istruzioni dopo lend. Nel caso di tre istruzioni utilizzare elseif: if condizione1 istruzioni1 elseif condizione2 istruzioni2 else istruzioni3 end Se la condizione1 vera vengono eseguite le istruzioni1. Se falsa ma la condizione2 vera vengono eseguite le istruzioni2. Se entrambe le condizioni sono false vengono eseguite le istruzioni3. In tutti i tre casi i casi si procede quindi alle istruzioni dopo lend. 6.2 I cicli

Per eseguire ripetutamente delle istruzioni per un numero determinato di volte possibile utilizzare un ciclo for. La sintassi la seguente: for variabile=inizio:passo:fine, istruzioni, end

oppure
for variabile=inizio:passo:fine istruzioni end Lesecuzione dellesempio di figura 16 produce come risultato la schermata: Matlab 23

Corso di Grafica Computazionale

a= 2 >>

figura 16 esempio di utilizzo del ciclo for

mentre lesempio di figura 17 produce la schermata: a= 1.0000 0.5000 0.3333 0.2500 >>

0.5000 0.3333 0.2500 0.2000

0.3333 0.2500 0.2000 0.1667

0.2500 0.2000 0.1667 0.1429

0.2000 0.1667 0.1429 0.1250

figura 17 esempio di utilizzo del ciclo for

Il ciclo while, invece, esegue un gruppo di istruzioni fino a quando una certa condizione vera: while condizione, istruzioni, end

oppure
while condizione istruzioni Matlab 24

Corso di Grafica Computazionale

end I comandi contenuti in istruzioni saranno eseguiti finch la condizione non diventer falsa. Lesempio di figura 18 produce la schermata: somma = 21 >>

figura 18 esempio di utilizzo del ciclo while

6.3

Invio di testo formattato a schermo

Per inviare a schermo del testo formattato esiste un comando mutuato direttamente dal linguaggio di programmazione C. Il comando fprintf e consente vari tipi di output sia a schermo che su file. Per una descrizione del comando si rimanda allhelp di Matlab (oppure help fprintf dal prompt di comandi). Per gli scopi di questo corso sufficiente lutilizzo del comando per inviare a schermo del testo formattato. >> fprintf(' esempio \n di testo \n formattato \n con a capo ') esempio di testo formattato con a capo >> Nellesempio sopra riportato il simbolo \n rappresenta il ritorno a capo. 6.4 Inserimento di dati da tastiera

Per inserire dati da tastiera durante lesecuzione di un m-file utilizzare il comando input. Se i dati che verranno inseriti devono essere considerati come numeri: variabile=input(messaggio) Se i dati devono essere considerati come caratteri (stringa): variabile=input(messaggio,s) messaggio (tra i due apici) corrisponde al testo che verr visualizzato al Prompt per la richiesta dati la sua formattazione viene indicata analogamente al comando fprintf (si pu usare, ad esempio, il simbolo \n). >> a=input('Inserire il valore di a: ') Inserire il valore di a: 3 (in rosso rappresentato ci che viene inserito dallutente) Matlab 25

Corso di Grafica Computazionale

a= 3 >> 6.5

Alcuni comandi utili break interrompe un ciclo, se ci sono pi cicli annidati termina quello pi interno in cui si trova il comando. sospende lesecuzione di un m-file, lesecuzione riprende quando viene premuto un tasto della tastiera. Per sospendere lesecuzione per n secondi: pause(n). valuta una funzione precedentemente memorizzata come variabile stringa; eval produce lo stesso risultato che otterrei digitando nella Command Window il contenuto della variabile che passo al comando eval stesso.

pause

eval

>>f=x^2-x+1; >>x=5; >>y=eval(f) y= 21 >>

Matlab 26

Corso di Grafica Computazionale

7. Grafica
Matlab uno strumento molto potente anche per la realizzazione di grafici. 7.1 La funzione Plot

Per riportare in un grafico un vettore o una matrice plot(y) visualizza il vettore y rispetto allindice dei suoi dati (figura 19) ploy(x,y) visualizza il vettore y rispetto al valore dei dati del vettore x (figura 20) >> clear >> x=0:pi/20:2*pi; >> y=sin(x); >> plot(y) >> plot(x,y)

figura 19 Visualizzazione rispetto allindice

figura 20 Visualizzazione rispetto agli elementi del vettore

plot(A)

se A una matrice viene visualizzata una curva per ciascuna colonna

>>A=rand(6) ; >>plot(A)

figura 21 Funzione plot applicata ad una matrice

Sempre con il comando plot possibile modificare lo stile della curva: plot(x,y,stile) Matlab 27

Corso di Grafica Computazionale

nella tabella 5 sono riportate alcune opzioni per modificare il colore della curva e nella tabella 6 alcune opzioni per modificare la visualizzazione della curva:
tabella 5 Opzioni per impostare il colore Simbolo Colore

y m c r g b w k

yellow magenta cyan red green blue white black

tabella 6 Opzioni per il tipo di linea Simbolo Tipo di grafico

-: -. . + * o x

linea continua (deafault) linea tratteggiata linea punteggiata linea tratto/punto soltanto punti segni pi segni asterisco cerchietti croci

Ad esempio:

>> x=0:pi/20:2*pi; >> f='sin(x)'; >> plot(x,eval(f),'r*') >> hold on >> plot(x,eval(f)*.8,'g*') >> plot(x,eval(f)*.6,'c--') >>

figura 22 Risultati delle differenti opzioni di plot

7.2

Alcuni comandi utili figure(N) clf hold apre la finestra grafica N o la attiva se gi esistente ripulisce la pagina grafica attiva

attiva e disattiva il mantenimento del grafico nella finestra grafica attiva hold on, hold off attiva (on) e disattiva (off) il mantenimento del grafico nella finestra grafica attiva axis([xmin xmax ymin ymax]) per modificare i limiti degli assi cartesiani title(titolo) xlabel(testo) specifica il testo da porre sopra il grafico specifica il testo da porre sullasse x Matlab 28

Corso di Grafica Computazionale

ylabel(testo) text(x,y,testo)

specifica il testo da porre sullasse y specifica il testo da porre nella posizione x,y del grafico

un esempio dellimpiego dei comandi appena descritti il seguente: >> emp=[30 31 38 49 59 68 74 72 65 55 45 34]; >>precip=[4.0 3.7 4.1 3.7 3.5 2.9 2.7 3.7 3.4 3.4 4.2 4.9]; >>month=['Jan';'Feb';'Mar';'Apr';'May';'Jun';'Jul';'Aug';'Sep';'Oct';'Nov';'dec']; >>plot(temp,precip,'ro') >>axis([28 80 2.5 5.2]) >>text(temp,precip,month) >>xlabel('temp') >>ylabel('precip') >>title('Boston') >>

figura 23 Esempio

subplot(n,m,p)

divide la pagina grafica in nxm sottopagine, attivando la p-esima per il grafico successivo

>> subplot(2,1,1) >> plot(temp,'r') >> xlabel('Month Number') >> ylabel('Temperature') >> title('Weather Data') >> subplot(2,1,2) >> plot(precip,'g') >> xlabel('Month Number') >> ylabel('Precipitation') >>

figura 24 Esempio di utilizzo della funzione subplot

Matlab 29

Corso di Grafica Computazionale

grid on, grid off bar(x,y)

aggiunge e toglie la griglia di riferimento al grafico corrente crea un diagramma a barre della variabile y nelle posizioni indicate dalla variabile x

Matlab 30

Corso di Grafica Computazionale

>> temp=[30 31 38 49 59 68 74 72 65 55 45 34]; >> x=1:12; >> bar(x,temp,'g') >>

figura 25 Esempio di diagramma a barre

stairs(x,y)

crea un diagramma a barre senza le linee interne

>> temp=[30 31 38 49 59 68 74 72 65 55 45 34]; >> x=1:12; >> stairs(x,temp,'g')

figura 26 Esempio della funzione stairs

Matlab 31

Corso di Grafica Computazionale

hist(y)

crea un istrogramma dividendo in 10 parti il campo tra il valore massimo e quello minimo di y

>> y=fix(10*rand (1,400000)); >> max(y),min(y) ans = 46 ans = -48 >> hist(y) >>

figura 27 Esempio di utilizzo della funzione hist

plot3(x,y,z)

visualizza un grafico tridimensionale per punti

>> t=0:pi/50:10*pi; >> plot3(sin(t),cos(t),t,'r') >>

figura 28 Esempio di utilizzo della funzione plot3

mesh(x,y,A) surf(x,y,A)

rappresentazione mediante rete poligonale della matrice A. I vettori x ed y definiscono la rete. rappresentazione mediante patch della matrice A

>> A=rand(4,5); >> x=1:5; >> y=1:4; >> mesh(x,y,A) >> surf(x,y,A) >> Matlab 32

Corso di Grafica Computazionale

figura 29 Esempi di utilizzo della funzione surf

Matlab 33