CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di...

75
CORSO INTRODUTTIVO A MATLAB® Marzo/Aprile 2014 - Andrea Freda

Transcript of CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di...

Page 1: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

CORSO INTRODUTTIVO A

MATLAB®

Marzo/Aprile 2014 - Andrea Freda

Page 2: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

1

Indice Generale

Indice delle Tabelle ....................................................................................................................................................................................................... 4

Indice delle Figure ........................................................................................................................................................................................................ 6

Sezione 1 - Primi passi in Matlab® .................................................................................................................................................................................... 7

1 Introduzione ........................................................................................................................................................................................................... 7

2 L’ambiente di lavoro .............................................................................................................................................................................................. 8

3 Tipi di dati – creazione di dati (strutture elementari) ......................................................................................................................................... 12

3.1 Creazione di dati numerici ............................................................................................................................................................................ 12

3.2 Formati numerici .......................................................................................................................................................................................... 16

3.3 Stringhe ......................................................................................................................................................................................................... 16

4 Manipolazione di array ........................................................................................................................................................................................ 17

4.1 Manipolare dati numerici ............................................................................................................................................................................. 17

4.2 Manipolare stringhe ..................................................................................................................................................................................... 19

5 Operatori .............................................................................................................................................................................................................. 20

5.1 Operatori elementari .................................................................................................................................................................................... 20

5.2 Operatori relazionali ..................................................................................................................................................................................... 24

5.3 Operatori logici ............................................................................................................................................................................................. 25

5.4 Precedenza tra gli operatori ......................................................................................................................................................................... 27

6 Calcolo scientifico ................................................................................................................................................................................................ 28

6.1 Funzioni matematiche .................................................................................................................................................................................. 28

Page 3: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

2

6.2 Numeri complessi ......................................................................................................................................................................................... 30

6.3 Costanti ......................................................................................................................................................................................................... 30

7 Matrici particolari ................................................................................................................................................................................................ 31

8 Salvataggio ed esecuzione di script - Funzioni ..................................................................................................................................................... 33

9 Utilizzo dei path ................................................................................................................................................................................................... 37

10 Utilizzo del Workspace – Salvataggio e richiamo dei dati ................................................................................................................................ 38

11 Classi di variabili ............................................................................................................................................................................................... 39

12 Gestione di file e cartelle .................................................................................................................................................................................. 40

Sezione 2 - Principi di grafica, programmazione e tecniche di Input/Output ................................................................................................................ 42

13 Creazione e Personalizzazione di diagrammi ................................................................................................................................................... 42

13.1 Diagrammi 2D ........................................................................................................................................................................................... 42

13.2 Diagrammi 3D ........................................................................................................................................................................................... 51

13.3 Diagrammi multipli.................................................................................................................................................................................... 55

13.4 Editing avanzato: funzioni accessorie, caratteri e simboli particolari ...................................................................................................... 55

13.5 Editing da GUI ........................................................................................................................................................................................... 59

13.6 Salvataggio di diagrammi .......................................................................................................................................................................... 59

14 Funzioni “Detect State” .................................................................................................................................................................................... 60

15 Principi di Programmazione ............................................................................................................................................................................. 62

15.1 Comandi if, else, elseif .............................................................................................................................................................................. 62

15.2 Comando for ............................................................................................................................................................................................. 63

15.3 Comando while ......................................................................................................................................................................................... 64

Page 4: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

3

15.4 Comandi break e return ............................................................................................................................................................................ 65

15.5 Comando switch ........................................................................................................................................................................................ 66

15.6 Errori di programmazione ......................................................................................................................................................................... 67

15.7 Efficienza ................................................................................................................................................................................................... 68

16 I/O ..................................................................................................................................................................................................................... 69

16.1 I/O su Video ............................................................................................................................................................................................... 69

16.2 I/O su file ................................................................................................................................................................................................... 69

17 Bibliografia essenziale ...................................................................................................................................................................................... 74

Page 5: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

4

INDICE DELLE TABELLE

Tabella 1 Comandi fondamentali per gestire una sessione di Matlab........................................................................................................................... 9

Tabella 2 Alcuni comandi per la manipolazione di dati numerici. ............................................................................................................................... 18

Tabella 3 Alcuni comandi per la manipolazione di stringhe. ....................................................................................................................................... 19

Tabella 4 Operatori relazionali. .................................................................................................................................................................................... 24

Tabella 5 Operatori logici. ............................................................................................................................................................................................ 26

Tabella 6 Funzioni matematiche di uso comune. ........................................................................................................................................................ 29

Tabella 7 Funzioni fondamentali per l’analisi dei numeri complessi. .......................................................................................................................... 30

Tabella 8 Comandi principali per la gestione dei file path. .......................................................................................................................................... 38

Tabella 9 Comandi per la gestione di files e cartelle. .................................................................................................................................................. 40

Tabella 10 Comandi elementari per l’annotazione dei diagrammi. ........................................................................................................................... 44

Tabella 11 Comandi per la caratterizzazione delle proprietà dei tratti delle linee. ................................................................................................... 44

Tabella 12 Opzioni per la caratterizzazione dei tratti dei diagrammi ........................................................................................................................ 45

Tabella 13 Tipologie di diagrammi 2D. ....................................................................................................................................................................... 46

Tabella 14 Tipologie di diagrammi 3D. ....................................................................................................................................................................... 52

Tabella 15 Lettere greche minuscole. ........................................................................................................................................................................ 57

Tabella 16 Lettere greche maiuscole. ......................................................................................................................................................................... 57

Tabella 17 Altri simboli. .............................................................................................................................................................................................. 58

Tabella 18 Funzioni “detect state”. ............................................................................................................................................................................ 60

Tabella 19 Opzioni di salvataggio dei dati tramite comando save. ............................................................................................................................ 70

Page 6: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

5

Tabella 20 Flags di formattazione............................................................................................................................................................................... 71

Tabella 21 Field width e precision della formattazione. ............................................................................................................................................ 71

Tabella 22 Conversion characters utilizzati in formattazione. ................................................................................................................................... 71

Tabella 23 Escape characters. .................................................................................................................................................................................... 73

Page 7: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

6

INDICE DELLE FIGURE

Figura 1 Aspetto di Matlab all’avvio. .......................................................................................................................................................................... 11

Figura 2 Path Browser. ............................................................................................................................................................................................... 37

Figura 3 Workspace Browser. ..................................................................................................................................................................................... 39

Figura 4 Diagramma di due funzioni (comando plot). ................................................................................................................................................ 43

Figura 5 Esempio di rappresentazione di una funzione a due variabili tramite curve di livello. ............................................................................... 50

Figura 6 Mappe di colore implementate in Matlab. .................................................................................................................................................. 51

Figura 7 Esempio di rappresentazione 3D di una funzione a 2 variabili. ................................................................................................................... 54

Figura 8 Annotazioni su un diagramma. ..................................................................................................................................................................... 56

Figura 9 Figure Toolbar. .............................................................................................................................................................................................. 59

Figura 10 Formato dei dati da specificare in lettura e scrittura: flags, field width, precision e conversion character. ........................................... 71

Page 8: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

7

SEZIONE 1 - PRIMI PASSI IN MATLAB®

Nella presente sezione si forniscono i primi strumenti necessari per iniziare ad utilizzare Matlab: accesso al software, creazione di strutture dati

elementari, manipolazione di variabili, operazioni elementari, salvataggio e richiamo di variabili, etc.

1 INTRODUZIONE

La primissima versione di Matlab – abbreviazione di MATrix LABoratory – risale alla fine degli anni '70, e fu creata da Cleve Moler – l’allora

presidente del dipartimento di scienze informatiche dell'Università del New Mexico – quale pacchetto software di supporto alle lezioni di algebra

lineare e analisi numerica.

Oggi Matlab non si limita più al solo calcolo matriciale e numerico, ma ha sviluppato tutta una serie di funzioni per le applicazioni più diverse nel

campo scientifico. La semplicità del linguaggio permette di risolvere problemi molto complessi senza dover sviluppare programmi in Fortran, C o

altri linguaggi di programmazione che richiedano di essere compilati.

Matlab gira su diversi sistemi, dal PC al Mac fino alle Workstation Unix (Sun, Alpha). Essendo le funzioni scritte nella maggior parte dei casi come

file testo, la portabilità da un sistema all'altro di funzioni specifiche scritte dall'utente è garantita praticamente al 100%.

Inoltre, Matlab comprende un vasto set di funzioni predefinite e numerose librerie (toolbox) per svariate applicazioni.

Prima di procedere con l’esplorazione delle funzionalità di Matlab, sono assolutamente necessarie alcune premesse relative al presente corso:

Un corso di circa 16 ore non può assolutamente essere considerato esaustivo, ma (sperabilmente!) propedeutico all’acquisizione delle

competenze necessarie per iniziare a lavorare autonomamente in Matlab;

In Matlab – così come in ogni linguaggio – esistono moltissimi diversi modi per “dire” la stessa cosa; alcuni sono indubbiamente più efficaci

di altri1, ma più che alla “dialettica” si cercherà di badare a fornire quel minimo indispensabile di mezzi operativi necessari a una scoperta

autonoma di un “universo” vastissimo.

1 Si veda in merito l’esempio riportato al §15.7.

Page 9: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

8

In Matlab è possibile lavorare interattivamente (ad esempio creando grafici da menu o operando attraverso i dialog box dei diversi

toolbox), tuttavia spesso – soprattutto a fini ingegneristici – è preferibile implementare codici che non richiedano l’intervento umano

durante la loro esecuzione; per questa ragione il corso è orientato prevalentemente all’acquisizione delle conoscenze necessarie alla

scrittura di codici, piuttosto che all’utilizzo dei menu interattivi.

I comandi di Matlab spesso consentono di inserire i valori da elaborare secondo diverse tipologie, a seconda delle opzioni possibili; è

pressoché impossibile spiegare in dettaglio tutte le possibilità offerte dei comandi e delle funzioni a disposizione dell’utente in un corso

della durata di poche ore; per questo motivo i comandi e le funzioni utilizzati nel corso saranno spiegati quanto basta a comprenderne

l’uso “elementare”. Per quanto riguarda la comprensione di comandi e funzioni, spesso se ne indicherà il nome, rimandando all’help in

linea (§2) per quanto riguarda la sintassi degli stessi.

2 L’AMBIENTE DI LAVORO

L'ambiente Matlab, all’avvio del software, generalmente2 si presenta come un'area di lavoro in cui si possono individuare quattro finestre come

mostrato in Figura 1:

1. Command Window. E’ l'area in cui vengono digitati i comandi.

2. Workspace. Vengono visualizzate tutte le variabili definite dall'utente, il tipo e la loro occupazione di memoria.

3. Command History. Riporta l'elenco in ordine cronologico dei comandi che sono stati digitati nella Command Window.

4. Current Directory. Mostra i file della cartella di lavoro corrente.

Nella Command Window è possibile digitare comandi e premere invio per avviare l'elaborazione e visualizzare l'eventuale risultato. È possibile

digitare direttamente sulla linea di comando le operazioni che vogliamo eseguire, sia che si tratti di operazioni sia che si tratti di funzioni

particolari.

Vi sono due tipi di istruzioni digitabili al prompt "»" che appare nella Command Window:

2 Esiste la possibilità di modificare il layout del programma per renderlo più consono alle proprie preferenze, accedendo alla voce desktop layout presente (a seconda della versione di MATLAB installata) alla voce View o Desktop nella barra del menu.

Page 10: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

9

assegnamenti “» variabile = espressione”

valutazione di espressioni “» espressione”

La valutazione di un'espressione genera una matrice che viene assegnata alla variabile indicata. Quando nell'istruzione non si specifica la variabile

a cui assegnare il risultato, la valutazione dell'espressione viene assegnata alla variabile di sistema ans (i.e. “answer”). Il risultato dell’assegnazione

viene allocato in memoria ed è esplorabile nel Workspace browser.

Per “pulire” la Command Window è sufficiente digitare il comando clc; i comandi precedentemente digitati rimarranno comunque a disposizione

all’interno della finestra Command History, e le variabili precedentemente assegnate rimangono in memoria. Per cancellare il contenuto del

Workspace si può utilizzare il comando clear. La Tabella 1 mostra alcuni comandi fondamentali per la gestione di una sessione di Matlab.

I comandi possono essere digitati direttamente sulla linea di comando o letti da file testo. Esiste la possibilità di scrivere applicazioni dotate di

interfaccia grafica, come pure di compilare funzioni scritte in un linguaggio tipo C o Fortran. Una grossa quantità di funzioni sono direttamente

leggibili, essendo programmate in script testo con estensione .m.

Tabella 1 Comandi fondamentali per gestire una sessione di Matlab.

Comando Descrizione

clc cancella il contenuto della Command Window

clear elimina tutte le variabili dalla memoria

clear nome elimina la variabile nome

exist nome determina se esiste in memoria la variabile nome (ans=1) oppure no (ans=0)

who elenca le variabili presenti in memoria

whos elenca le variabili presenti in memoria, la loro dimensione, lo spazio occupato e la classe

Page 11: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

10

Uno strumento comodo e veloce per imparare ad utilizzare le funzioni e le routine di Matlab è l'help in linea; a titolo di esempio, digitando help fft

nella Command Window:

>> help fft

FFT Discrete Fourier transform.

FFT(X) is the discrete Fourier transform (DFT) of vector X. For

matrices, the FFT operation is applied to each column. For N-D

arrays, the FFT operation operates on the first non-singleton

dimension.

FFT(X,N) is the N-point FFT, padded with zeros if X has less

than N points and truncated if it has more.

FFT(X,[],DIM) or FFT(X,N,DIM) applies the FFT operation across the

dimension DIM.

For length N input vector x, the DFT is a length N vector X,

with elements

N

X(k) = sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.

n=1

The inverse DFT (computed by IFFT) is given by

N

x(n) = (1/N) sum X(k)*exp( j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N.

k=1

See also fft2, fftn, fftshift, fftw, ifft, ifft2, ifftn.

Dall’esempio riguardante la funzione che calcola la Fast Fourier Transform, help è suddiviso in diverse parti:

1. Uso del comando con eventuali opzioni.

2. Cenni alla implementazione del comando (molto utile per essere sicuri che una data funzione con un nome a noi familiare svolga il compito

da noi richiesto).

3. Eventuale esempio di utilizzo.

4. Funzioni correlate.

Per una esplorazione completa e strutturata dell'help occorre accedere ad esso tramite la barra dei menu.

Page 12: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

11

L’Help in linea di Matlab – a causa della vastità e della complessità dell’ambiente di lavoro – è uno strumento fondamentale per la comprensione

del corretto utilizzo del software, e durante il corso se ne farà continuo riferimento.

Figura 1 Aspetto di Matlab all’avvio (release 2013a).

Page 13: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

12

3 TIPI DI DATI – CREAZIONE DI DATI (STRUTTURE ELEMENTARI)

Matlab lavora con alcuni tipi di dati elementari che sono:

La matrice n-dimensionale di numeri reali, complessi, caratteri o strutture più complesse.

La cella, un contenitore per svariati tipi di dati.

In Matlab non sono indispensabili dichiarazioni di tipi o di dimensioni. Matlab alloca direttamente la memoria necessaria ogni volta che si dichiara

o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni:

1. le variabili sono case sensitive;

2. i nomi di variabili possono contenere fino a 63 caratteri;

3. i nomi delle variabili devono iniziare con una lettera e possono contenere lettere, numeri e '_'.

I dati (e.g. una matrice) possono essere creati in svariati modi, ad esempio:

Digitando esplicitamente tutti gli elementi.

Utilizzando funzioni specifiche di Matlab.

Utilizzando valori creati in file .m (script).

Caricando i dati da file esterni.

3.1 CREAZIONE DI DATI NUMERICI

Come si è introdotto al paragrafo precedente, esistono diversi metodi per creare dei dati; utilizzando il primo possiamo dichiarare in modo

semplice piccole matrici. I valori devono essere racchiuse tra parentesi quadre. Tra un valore e l'altro può essere messa una virgola o uno spazio.

Per introdurre una nuova riga nella matrice, occorre terminare la precedente con un ; oppure andare a capo. Ad esempio:

>> S = [1 2 3

4 5 6

7 8 9]

S =

Page 14: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

13

1 2 3

4 5 6

7 8 9

Oppure:

>> S = [1 2 3; 4 5 6; 7 8 9]

S =

1 2 3

4 5 6

7 8 9

Per la definizione di matrici di dimensione più grande è spesso utile utilizzare alcuni metodi e alcune funzioni messe a disposizione da Matlab. Ad

esempio, per creare un vettore di elementi a incrementi unitari:

>> x = 0:5

x =

0 1 2 3 4 5

Oppure, nel caso si vogliano elementi con incrementi non unitari, è necessario definire l’incremento:

>> y = 0:.5:5

y =

Columns 1 through 9

0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000

Columns 10 through 11

4.5000 5.0000

In modo analogo, per creare un vettore uniformemente distribuito tra 0 e 5, utilizzando 11 elementi:

Page 15: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

14

>> z = linspace(0,5,11)

z =

Columns 1 through 9

0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000

Columns 10 through 11

4.5000 5.0000

Per creare vettori basati su strutture dati differenti esistono altri comandi, e.g.:

>> n = logspace(0,2,11)

n =

Columns 1 through 9

1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 25.1189 39.8107

Columns 10 through 11

63.0957 100.0000

Per quanto invece concerne la selezione di elementi di matrici o vettori, definita una matrice 3x4:

>> Q = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12]

Q =

1 2 3 4

5 6 7 8

9 10 11 12

Si supponga di volerne selezionare tutti gli elementi appartenenti alla prima riga:

>> Q(1,:)

ans =

Page 16: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

15

1 2 3 4

…o alla terza colonna:

>> Q(:,3)

ans =

3

7

11

Il simbolo :, utilizzato come indice, significa “tutti gli elementi”. Si supponga di voler selezionare gli elementi appartenenti contemporaneamente

alle prime due righe e alla seconda e la quarta colonna:

>> Q(1:2,[2 4])

ans =

2 4

6 8

È altresì possibile accedere ad un elemento di una matrice con un solo indice: in tal caso gli elementi sono visti come una colonna sotto l'altra,

e.g.:

>> Q(5)

ans =

6

Infine, il comando end da accesso all’ultimo elemento dell’indice:

>> Q(2,end)

ans =

8

Page 17: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

16

In Matlab, ogni istruzione deve essere terminata con uno dei seguenti caratteri:

; non viene visualizzato nulla sulla finestra principale di Matlab

, separatore per istruzioni sulla stessa riga

il risultato di ogni operazione viene visualizzato sulla finestra principale

ritorno a capo

Per spezzare una istruzione su più righe, si usa il simbolo speciale ...; per aggiungere dei commenti agli script, essi devono essere preceduti dal

simbolo %.

3.2 FORMATI NUMERICI

Attraverso il comando format, in Matlab è possibile visualizzare i dati numerici utilizzando diverse modalità di output. Ad esempio:

>> x= 34/13;

>> format long, x

x =

2.615384615384615

Si può scegliere tra notazione compatta o estesa (come quella sopra), esponenziale, razionale, bancaria, esadecimale….

Per una piena comprensione del comando format si rimanda all’help di Matlab, digitando help format nella Command Window o utilizzando

direttamente l’help browser.

3.3 STRINGHE

In Matlab un testo è rappresentato da un vettore di caratteri racchiusi tra apici. I dati testuali si possono manipolare, ed è anche possibile

costruire frasi concatenando tra di loro dei vettori (o delle matrici). Ad esempio:

>> a='La' ; b= 'vita'; c= 'è'; d = 'bella!';

Page 18: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

17

>> [ a ' ' b ' ' c ' ' d ]

ans =

La vita è bella!

4 MANIPOLAZIONE DI ARRAY

Nel presente paragrafo si illustrano i comandi principali preposti alla manipolazione delle due tipologie “base” di dati che compongono gli array in

Matlab: dati numerici e stringhe. Gli array possono essere composti da entrambe le tipologie (cell array).

4.1 MANIPOLARE DATI NUMERICI

La manipolazione di dati numerici in Matlab è particolarmente agevole grazie alla presenza di svariate funzioni giò implementate. Ad esempio,

considerando la matrice Q già vista al § 3.1:

>> Q = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12]

Q =

1 2 3 4

5 6 7 8

9 10 11 12

Per conoscerne la dimensione massima, il numero di elementi e il numero di righe e colonne si usano i comandi length, numel e size:

>> length(Q)

ans =

4

>> numel(Q)

ans =

Page 19: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

18

12

>> size(Q)

ans =

3 4

Altri utili comandi per la manipolazione delle matrici sono riportati in Tabella 2.

Tabella 2 Alcuni comandi per la manipolazione di dati numerici.

Comando Descrizione

flipud(A) scambia i valori della matrice A dall’alto in basso

fliplr(A) scambia i valori della matrice A da sinistra a destra

rot90(A) ruota la matrice A di 90 gradi in senso antiorario

tril(A) estrae la parte triangolare superiore della matrice A

triu(A) estrae la parte triangolare inferiore della matrice A

reshape(A,m,n) ridimensiona la matrice A a m x n. (A deve contenere m*n elementi)

Page 20: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

19

4.2 MANIPOLARE STRINGHE

La Tabella 3 riporta alcuni comandi essenziali per la manipolazione delle stringhe. Dalla Tabella 3 si evince che in Matlab è anche possibile

manipolare le stringhe di valori, sia editandole (ad esempio facendo diventare maiuscoli i caratteri) sia confrontando stringhe diverse. È altresì

possibile convertire una stringa in valore numerico (e viceversa).

Tabella 3 Alcuni comandi per la manipolazione di stringhe.

Comando Descrizione

abs converte una stringa nel corrispondente valore numerico

str2mat crea una matrice testo

setstr converte valore numerico in stringa

lower converte in minuscole

upper converte in maiuscole

strcmp confronta 2 stringhe

strncmp confronta n elementi di due stringhe

strrep trova tutte le occorrenze di una sottostringa e le sostituisce con un’altra sottostringa

num2str converte numero in stringa

str2num converte stringa in numero

Page 21: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

20

5 OPERATORI

All’interno di Matlab è possibile svolgere pressoché qualunque operazione matematica, relazionale e logica. Le prossime sezioni illustrano

brevemente i comandi principali.

5.1 OPERATORI ELEMENTARI

Al fine di agevolare la comprensione dei comandi descritti nel seguito, si considerino due matrici di uguale dimensione:

>> A= [ 16 18 6 ; 18 13 11 ; 3 2 19 ]

A =

16 18 6

18 13 11

3 2 19

>> B = [-4 3 12 ; -17 -11 0 ; 1 12 3]

B =

-4 3 12

-17 -11 0

1 12 3

Si possono allora utilizzare l’operatore +:

>> A+B

ans =

12 21 18

1 2 11

4 14 22

l’operatore -:

>> A-B

Page 22: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

21

ans =

20 15 -6

35 24 11

2 -10 16

l’operatore *:

>> A*B

ans =

-364 -78 210

-282 43 249

-27 215 93

l’operatore .* [ A.*B = A(i,j)*B(i,j) ]:

>> A.*B

ans =

-64 54 72

-306 -143 0

3 24 57

l’operatore / [ A/B=A · B-1 ]:

>> A/B

ans =

0.3781 -1.0015 0.4874

1.0113 -1.3191 -0.3786

1.8040 -0.6529 -0.8828

l’operatore ./ [ A./B=A(i,j) / B(i,j) ]:

Page 23: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

22

>> A./B

ans =

-4.0000 6.0000 0.5000

-1.0588 -1.1818 Inf

3.0000 0.1667 6.3333

l’operatore \ [ A\B=A-1 · B ]:

>> A\B

ans =

-2.4394 -2.9015 -1.5455

1.8657 2.4692 1.9758

0.2414 0.8298 0.1939

l’operatore .\ [ A.\B= B(i,j) /A(I,j) ]:

>> A.\B

ans =

-0.2500 0.1667 2.0000

-0.9444 -0.8462 0

0.3333 6.0000 0.1579

l’operatore ^:

>> A^4

ans =

711502 642486 653232

682575 615875 647800

206349 183382 272609

l’operatore .^n [ A(I,j)^n ]:

Page 24: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

23

>> A.^4

ans =

65536 104976 1296

104976 28561 14641

81 16 130321

l’operatore .^N [ A(I,j)^N(i,j) ]:

>> A.^B

ans =

1.5259e-005 5832 2.1768e+009

4.5748e-022 5.5799e-013 1

3 4096 6859

L’operazione di trasposizione delle matrici (e dei vettori) viene effettuata attraverso il comando ':

>> A'

ans =

16 18 3

18 13 2

6 11 19

Si osservi che tale trasposizione è una trasposizione matriciale (algebrica); nel caso di matrice complessa fornisce la matrice complessa trasposta

coniugata. Il comando di trasposizione .' fornisce invece la trasposizione dell’array (non involve la coniugata per matrici complesse).

Page 25: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

24

5.2 OPERATORI RELAZIONALI

Gli operatori relazionali definiti in Matlab sono riportati in Tabella 4; il loro utilizzo prevede, come risultato, un valore uguale a 0 (FALSE) o 1

(TRUE). Ad esempio:

>> A= [ 16 18 6 ; 18 13 11 ; 3 2 19 ]; B = [-4 3 12 ; -17 -11 0 ; 1 12 3];

>> A>B

ans =

1 1 0

1 1 1

1 0 1

Tabella 4 Operatori relazionali.

Comando Descrizione

> maggiore

< minore

>= maggiore o uguale

<= minore o uguale

== uguale

~= diverso

Le applicazioni dei comandi relazionali sono ovviamente innumerevoli… si supponga ad esempio di voler selezionare gli elementi di A maggiori di

10; in tal caso è sufficiente utilizzare l’operatore relazionare per selezionare gli elementi:

>> A(A>10)

ans =

16

18

Page 26: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

25

18

13

6

11

19

Nel caso fosse necessario conoscere la loro posizione all’interno di A, un comando molto comodo è find:

>> find(A>10)

ans =

1

2

4

5

8

9

Si osservi che il comando find restituisce un solo indice, poiché tratta la matrice come una serie di colonne (cfr. §3.1).

E’ spesso utile ridurre il risultato di comparazioni tra matrici ad una espressione scalare. Allo scopo sono ad esempio disponibili le funzioni:

all: fornisce risultato vero se nessuno degli elementi del vettore passato come parametro vale 0. Sulle matrici opera colonna per colonna.

any: fornisce risultato vero se almeno uno degli elementi del vettore passato come parametro è diverso da 0. Sulle matrici opera colonna

per colonna.

Altre utili funzioni in grado di operare in modo simile sono le cosiddette “detect state” (§14).

5.3 OPERATORI LOGICI

In Matlab esistono tre diverse classi di operatori logici:

Operatori logici element-wise: operano su elementi corrispondenti di array

Operatori logici short-circuit: operano all’interno di espressioni logiche contenenti valori scalari. Questi operatori sono detti “short circuit”

in quanto valutano il secondo operando solo se il risultato non è già definito dal primo operando.

Page 27: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

26

Operatori logici bit-wise: operano su bit corrispondenti di numeri interi

La Tabella 5 riporta gli operatori logici definiti in Matlab, suddivisi per classe.

Tabella 5 Operatori logici.

Comando N° operandi Classe Descrizione

& 2 element-wise and3

| 2 element-wise or4

~ 1 element-wise not5

xor 2 element-wise xor6

&& 2 short-circuit and

|| 2 short-circuit or

bitand 2 bit-wise and

bitor 2 bit-wise or

bitxor 2 bit-wise xor

Ad esempio per valutare quali elementi di 2 matrici sono contemporaneamente non nulli:

>> A = [0 1 1 0 1];B = [1 1 0 0 1]; A&B

ans =

3 and restituisce 1 se l’n-esimo valore di entrambi gli operandi non è nullo.

4 or restituisce 1 se almeno uno dei valori degli operandi non è nullo.

5 not restituisce 1 per l’n-esimo valore nullo dell’operando.

6 xor restituisce 1 se uno solo dei valori degli operandi è nullo.

Page 28: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

27

0 1 0 0 1

Per quanto riguarda l’utilizzo degli operatori short-circuit se ad esempio A è uguale a zero (cioè lo sono tutti gli elementi) allora l’espressione A&B

riporterà 0, indipendentemente dal valore di B. In tal caso non v’è alcuna necessita quindi di valutare B, e l’utilizzo degli short-cut velocizza

l’esecuzione dei codici. Infine, per quanto concerne gli operatori bit-wise, si considerino:

>> A = 28; % binary 11100

>> B = 21; % binary 10101

>> bitand(A,B)

ans =

20

>> dec2bin(ans)

ans =

10100

5.4 PRECEDENZA TRA GLI OPERATORI

Così come nell’ordinaria prassi del calcolo algebrico, in Matlab esiste una precisa gerarchia di precedenza tra gli operatori. La gerarchia

computazionale di Matlab è la seguente:

1. Parentesi ()

2. Trasposizione (.’), potenza (.^), trasposizione complessa coniugata (’), potenza di matrici (^)

3. Operatori aritmetici unari (+ e -), negazione logica (~)

4. Moltiplicazione (.*), divisione (./ e .\), moltiplicazione di matrici (*), divisione di matrici (/ e \)

5. Addizione (+) e sottrazione (-)

6. Operatore due punti (:)

7. Minore (<), minore o uguale (<=), maggiore (>), maggiore o uguale (>=), uguale (==), diverso (~=)

8. AND element-wise (&)

Page 29: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

28

9. OR element-wise (|)

10. AND short-circuit (&&)

11. OR short-circuit (||)

6 CALCOLO SCIENTIFICO

Nel presente capitolo si introducono le funzioni matematiche di uso più comune, la sintassi relativa ai numeri complessi e alcune funzioni utili alla

loro manipolazione e – per completezza – le costanti numeriche utilizzate dal software.

6.1 FUNZIONI MATEMATICHE

La chiamata di funzioni elementari (built in e costruite7), in Matlab, è estremamente semplice; le funzioni possono essere applicate a scalari e

matrici, e.g.:

>> x=1:5; y=log(x)

y =

0 0.69315 1.0986 1.3863 1.6094

Un metodo alternativo, che si rende utile nella creazione di script più complessi, è quella di scrivere un’espressione per poi eseguirla attraverso il

comando eval:

>> y='log(x)'; eval(y)

ans =

7 Alcune funzioni di uso comune o che richiedono notevole tempo di esecuzione sono implementate in Matlab come file eseguibili (built in). Il file m richiamabile digitandone il nome dopo i comandi open o edit restituisce il solo help della funzione, che non è pertanto modificabile. Un esempio di fuinzione built in è il seno (sin).

Page 30: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

29

0 0.69315 1.0986 1.3863 1.6094

La Tabella 6 riporta le funzioni matematiche di uso più comune implementate in Matlab, e una loro sintetica descrizione.

Tabella 6 Funzioni matematiche di uso comune.

funzione descrizione funzione descrizione

abs(x) valore assoluto di x acos(x) arco coseno di x

acosh(x) arco coseno iperbolico di x angle(x) angolo di un numero complesso

asin(x) arco seno di x asinh(x) arco seno iperbolico di x

atan(x) arco tangente di x atan2(x,y) arco tangente su 4 quadranti

atanh(x) arco tangente iperbolica di x ceil(x) arrotondamento verso +

conj(x) complesso coniugato di x cos(x) coseno di x

cosh(x) coseno iperbolico di x exp(x) esponenziale di x

fix(x) arrotondamento verso 0 floor(x) arrotondamento verso -

gcd(x,y) massimo comun divisore imag(x) parte immaginaria di x complesso

lcm(x,y) minimo comune multiplo log(x) logaritmo naturale di x

log2(x) logaritmo base 2 log10(x) logaritmo base 10 di x

mod(x,y) modulo del resto di x/y real(x) parte reale di x complesso

rem(x,y) resto di x/y round(x) arrotondamento al numero intero più prossimo

sign(x) segno di x (-1/0/1) sin(x) seno di x

sinh(x) seno iperbolico di x sqrt(x) radice quadrata di x

tan(x) tangente di x tanh(x) tangente iperbolica di x

Page 31: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

30

6.2 NUMERI COMPLESSI

Matlab opera sui numeri complessi senza accorgimenti particolari, e anche le operazioni vengono svolte esattamente nello stesso modo di quelle

con numeri reali. La parte complessa di un numero viene indicata aggiungendo la lettera i (o indifferentemente la j) al secondo elemento,

esattamente come nella matematica tradizionale, e.g.:

>> x=2+3i;y=4-5i;z=x*y

z =

23.0000 + 2.0000i

La Tabella 7 riporta alcune funzioni fondamentali per l’analisi dei numeri complessi; esse possono essere applicate a scalari, vettori e matrici.

Tabella 7 Funzioni fondamentali per l’analisi dei numeri complessi.

funzione descrizione

abs(x) modulo del numero complesso x

angle (x) fase del numero complesso x

conj(x) complesso coniugato di x

real (x) parte reale di x

imag(x) parte immaginaria di x

6.3 COSTANTI

Altre costanti predefinite in Matlab, oltre a i e j, sono:

pi pi greco

Inf infinito

NaN “Not a Number” (generata da 0/0, o Inf/Inf)

Page 32: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

31

7 MATRICI PARTICOLARI

All’interno di Matlab esistono funzioni ad hoc per la creazione di matrici particolari, ad esempio la matrice identità:

>> A = eye(5) % Identity matrix

A =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

La matrice diagonale8:

>> B = diag([1 2 3 4 5]) % Diagonal matrices and diagonals of matrix

B =

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

0 0 0 4 0

0 0 0 0 5

Una matrice di zeri:

>> C = zeros(5) % Create array of all zeros

C =

0 0 0 0 0

0 0 0 0 0

8 La funzione diag consente anche il collocamento degli elementi su diagonali non principali, aggiungendo un secondo indice che specifica su quale diagonale collocare gli elementi.

Page 33: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

32

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

Si osservi che l’immissione di un solo indice presuppone una matrice quadrata; se si desidera costruire una matrice avente dimensioni differenti è

sufficiente specificare anche il secondo indice:

>> C = zeros(2,5)

C =

0 0 0 0 0

0 0 0 0 0

Ad esempio, volendo costruire una matrice unitaria:

>> D=ones(3,7) % Create array of all ones

D =

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

O una con valori uniformemente distribuiti:

>> E= rand(4,8) % Uniformly distributed pseudorandom numbers

E =

0.2769 0.6948 0.4387 0.1869 0.7094 0.6551 0.9597 0.7513

0.0462 0.3171 0.3816 0.4898 0.7547 0.1626 0.3404 0.2551

0.0971 0.9502 0.7655 0.4456 0.2760 0.1190 0.5853 0.5060

0.8235 0.0344 0.7952 0.6463 0.6797 0.4984 0.2238 0.6991

È altresì possibile costruire una matrice di valori distribuiti normalmente:

>> F = randn(3,6) % Normally distributed random numbers

F =

Page 34: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

33

0.8156 0.6686 -0.0198 0.2573 -0.8051 -0.9219

0.7119 1.1908 -0.1567 -1.0565 0.5287 -2.1707

1.2902 -1.2025 -1.6041 1.4151 0.2193 -0.0592

Esiste poi una matrice un po’ particolare:

>> G = magic(8) % Magic square

G =

64 2 3 61 60 6 7 57

9 55 54 12 13 51 50 16

17 47 46 20 21 43 42 24

40 26 27 37 36 30 31 33

32 34 35 29 28 38 39 25

41 23 22 44 45 19 18 48

49 15 14 52 53 11 10 56

8 58 59 5 4 62 63 1

La funzione magic crea una matrice che contiene tutti i numeri interi da 1 a n2 con somma delle righe e delle colonne costante…e altre

interessanti proprietà (sic).

8 SALVATAGGIO ED ESECUZIONE DI SCRIPT - FUNZIONI

Nelle sezioni precedenti si è visto come sia possibile inserire dati ed eseguire operazioni in Matlab in modalità interattiva, digitando i comandi

direttamente nella Command Window. Nonostante tale modo di procedere sia molto comodo per svolgere semplici operazioni, non risulta

assolutamente conveniente quando un problema richiede svariati comandi o la gestione di array di grandi dimensioni.

È altresì possibile scrivere dei listati di comandi e dati e salvarli in cosiddetti M-file aventi estensione .m, i quali sono file di testo (pertanto

portabili da un sistema all'altro). Tali file, detti anche file script, possono essere eseguiti richiamandoli nella Command Window, digitandone il

nome senza estensione. Il corretto utilizzo e la gestione dei file script è fondamentale per un proficuo utilizzo di Matlab. A tal proposito è

opportuno segnalare che i nomi dei file script devono rispettare le stesse convenzioni valide per i nomi di variabili (§3).

Page 35: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

34

I comandi digitati nella Command Window vengono tenuti in memoria nella Command History, e possono essere riutilizzai successivamente. E’

però possibile memorizzare la sequenza di comandi Matlab usando la funzione diary. Tale funzione apre un file, dopodiché tutto ciò che appare

nell’ambiente Matlab viene memorizzato in tale file. Quando viene digitata nuovamente la primitiva diary, la memorizzazione viene terminata ed

il file viene chiuso. A questo punto selezionando open dal menu file è possibile aprire con l’editor di MatLab lo script composto per leggerlo o per

modificarlo.

Si osservi che attraverso il comando diary vengono registrati tutti i comandi immessi: se durante la digitazione viene commesso un errore, tale

errore verrà comunque memorizzato nello script. Lo script deve essere ripulito dalle sequenze di caratteri errate che in esso eventualmente

compariranno. Effettuate tutte le correzioni lo script potrà essere richiamato semplicemente digitandone il nome al prompt.

Nello stesso modo è possibile costruire delle nuove funzioni che possono poi essere richiamate a piacere. Anch’esse vanno salvate in file aventi

estensione m. Le funzioni vengono caricate e precompilate, e questo codice resta in memoria fino alla fine della sessione o fino ad un comando di

clear. Per questo motivo la prima esecuzione di un comando risulta normalmente più lenta, e la lentezza è dovuta alla compilazione del codice.

Una differenza fondamentale tra file script e funzioni è la gestione delle variabili. L’esecuzione di un file script comporta che all’interno del

Workspace vengano allocate tutte le variabili utilizzate, mentre l’esecuzione di una funziona alloca i soli valori dichiarati come output. Le variabili

utilizzate dai file script sono pertanto variabili globali, mentre quelle gestite dalle funzioni sono locali. In merito alle differenze tra le classi di

variabili, si rimanda al §11. Il nome del file contenente la funzione è anche il nome della funzione. La dichiarazione interna dovrebbe accordarsi al

nome dato, ma questo non è assolutamente necessario; è semplicemente scomodo fare il contrario9. Una funzione viene descritta inizialmente

dalla sua definizione nel modo seguente:

[output1,output2,...]=funzione(input1,input2,...)

Nel caso di una sola variabile di output si può evitare di mettere le [ ]. Un esempio di funzione di Matlab:

function y = logspace(d1, d2, n)

%LOGSPACE Logarithmically spaced vector.

% LOGSPACE(X1, X2) generates a row vector of 50 logarithmically

% equally spaced points between decades 10^X1 and 10^X2. If X2

% is pi, then the points are between 10^X1 and pi.

9 Nel senso che è possibile, ad esempio, dichiarare una funzione come output = nome(input) e salvarla come nome2.m, ma quando la si richiamerà sarà fatto attraverso nome2 (e non attraverso nome!).

Page 36: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

35

%

% LOGSPACE(X1, X2, N) generates N points.

% For N < 2, LOGSPACE returns 10^X2.

%

% Class support for inputs X1,X2:

% float: double, single

%

% See also LINSPACE, :.

% Copyright 1984-2005 The MathWorks, Inc.

% $Revision: 5.11.4.2 $ $Date: 2005/10/03 16:12:49 $

if nargin == 2

n = 50;

end

n = double(n);

if d2 == pi || d2 == single(pi)

d2 = log10(d2);

end

y = (10).^ [d1+(0:n-2)*(d2-d1)/(floor(n)-1), d2];

Le prime righe, commentate attraverso l’uso del simbolo %, solo le stesse che compaiono digitando nella Command Window il comando help

logspace. Alla fine delle righe commentate inizia la funzione vera e propria.

In Matlab esistono diversi tipi di funzioni:

Funzioni primarie (Primary M-file functions)

Sottofunzioni (Subfunctions)

Funzioni annidate (Nested functions)

Funzioni anonime (Anonymous functions)

Funzioni overloaded (Overloaded functions)

Funzioni private (Private functions)

Page 37: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

36

Tutte le funzioni che non siano anonime devono10 essere definite in un M-file avente lo stesso nome della funzione. La prima funzione che appare

in un M-file è detta funzione primaria (primary function). La funzione primaria di un M-file può essere chiamata dalla Command WIndow o da un

altro M-file. La funzione primaria può essere seguita da altre funzioni, dette sottofunzioni (subfunctions). Le sottofunzioni possono essere

chiamate dalla funzione primaria e da altre sottofunzioni all’interno di un M-file, ma non sono visibili all’esterno dell’M-file. Le sottofunzioni non

possono essere chiamate dalla Command WIndow o da altri M-file. E’ possibile definire funzioni all’interno del corpo di altre funzioni. In tal caso si

parla di funzioni annidate (nested functions). Una funzione annidata ha il proprio workspace per le variabili, ma può accedere anche ai workspace

di tutte le funzioni entro le quali è annidata. Se un M-file contiene funzioni annidate, tutte le funzioni devono essere terminate con la parola

chiave end. La funzioni anonime sono semplici forme di funzioni che non hanno nome e non richiedono un M-file. Costituiscono un modo

semplice e veloce per creare funzioni anche da Command Window. La sintassi delle funzioni anonime si avvale del cosiddetto function handle. Il

function handle di una specifica funzione si costruisce facendo precedere il nome della funzione dal simbolo @.La sintassi per la costruzione di una

funzione anonima è:

f = @(arglist)expression

Ad esempio:

>> sqr = @(x) x.^2;

>> a = sqr(5)

a = 25

Per determinare il percorso e la tipologia di una funzione, si può utilizzare il comando functions (sintassi: id = functions(@nomefunzione)). Molto

importante è anche comprendere come Matlab interpreta una linea di comando: quando su una linea viene dato un comando nome l'ordine di

esecuzione è il seguente: variabile nome, funzione interna di Matlab, funzione o script nel path attuale, funzione o script nel path definito in

matlabrc.m (file di startup di Matlab) attraverso la funzione pathdef. Il concetto di path verrà introdotto al prossimo paragrafo.

Si osservi infine che in Matlab esistono delle keyword riservate, che non possono essere utilizzate per nominare variabili, script o funzioni.

L’elenco delle keyword si ottiene digitando iskeyword nella Command Window.

10 Si veda la nota precedente.

Page 38: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

37

9 UTILIZZO DEI PATH

Per una corretta gestione del lavoro, è assolutamente indispensabile sapere dove sono registrati gli script e le funzioni che vengono utilizzati.

Come si è accennato al paragrafo precedente, ogni qualvolta si digiti il nome di uno script o si richiami una funzione dalla Command Window (o

dall’interno di un altro M-file), Matlab controlla che si tratti di una variabile presente nel Workspace; se non lo è, interpreta il comando come

invocazione di uno script, e prova ad eseguirlo. Per poterlo fare, vengono passate in rassegna alcune cartelle dove il file potrebbe trovarsi: la

Current Directory (la cartella corrente di lavoro) e altre directories specificate nel Search Path. Il Search Path viene modificato interattivamente

cliccando sulla voce di menu file e selezionando Set path. In tal modo si apre una finestra (Path Browser, Figura 2) da cui è possibile aggiungere

cartelle in cui sono presenti gli script e le funzioni che si vogliono eseguire. Una volta aggiunte le cartelle di interesse, sarà possibile lavorare in una

Current Directory diversa da quelle dove sono memorizzati script e funzioni. Si osservi che il Path Browser lavora gerarchicamente, cioè i file

contenuti nelle cartelle all’inizio della lista sono prioritari rispetto a quelli che si trovano in cartelle di seguito.

Figura 2 Path Browser.

Page 39: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

38

È altresì possibile modificare i path non interattivamente attraverso finestre di dialogo ma tramite comandi. La riporta i principali. È infine

possibile modificare manualmente la lista di cartelle appartenenti al Search Path modificando la funzione pathdef.

Tabella 8 Comandi principali per la gestione dei file path.

Comando Descrizione

addpath nome aggiunge la directory nome al path di ricerca

path visualizza il path di ricerca

pathtool apre il Path Browser

pwd visualizza la Current Directory

rmpath nome rimuove la directory nome dal path di ricerca

what elenca tutti i file specifici di Matlab presenti nella Current Directory

what nome elenca tutti i file specifici di Matlab presenti nella directory nome

10 UTILIZZO DEL WORKSPACE – SALVATAGGIO E RICHIAMO DEI DATI

Nel Workspace vengono allocati tutti i dati creati. E’ possibile esplorare il Workspace attraverso i comandi who e whos (Tabella 1, §2), o

direttamente dal Workspace Browser, il quale fornisce informazioni non solo sulla dimensione e la classe delle variabili allocate, ma anche

indicazioni statistiche (valori minimi e massimi, media, deviazione standard…Figura 3).

Le variabili presenti nel Workspace possono essere salvate attraverso il comando save; in questo modo tutte le variabili saranno salvate nel file

matlab.mat (mat è l’estensione dei database Matlab), mentre per salvare solo alcune delle variabili presenti nel Workspace (ad esempio var1 e

var2 nel file nome_file) una delle possibilità è digitare il comando nella forma save nome_file var1 var2. Il database viene salvato nella cartella

corrente, a meno che non venga specificato un percorso diverso. Il comando save viene utilizzato anche per salvare i dati in altri formati (§16.2).

Page 40: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

39

Figura 3 Workspace Browser.

11 CLASSI DI VARIABILI

In Matlab esistono tre diverse tipologie di variabili:

Variabili locali

Variabili globali

Variabili persistenti

Le variabili locali sono quelle utilizzate dalle funzioni; queste sono separate dalle variabili di altre funzioni (eccetto per funzioni annidate) e dalle

variabili del Workspace base. Le variabili locali di una funzione non vengono conservate dopo il termine della stessa, di conseguenza i valori

assegnati ad una variabile locale durante l’esecuzione di una funzione non saranno disponibili per un’esecuzione successiva. Si osservi che gli

script condividono il Workspace base con gli altri script e con la Command Window. Quando chiamati da una funzione gli script condividono il

Workspace della funzione.

Page 41: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

40

Se diverse funzioni ed eventualmente anche il Workspace base, dichiarano una variabile come globale, allora un’unica istanza di tale variabile

verrà condivisa da tutte le funzioni che la dichiarano. Modifiche ad una variabile globale da parte di una funzione sono immediatamente

disponibili a tutte le funzioni che la condividono. Le variabili globali si dichiarano per mezzo della parola chiave global, e si può ottenere l’elenco

delle variabili globali dichiarate in un Workspace digitando whos global. L’uso delle variabili globali se non in casi circostanziati e circoscritti non è

considerato una buona pratica di programmazione. Anziché usare variabili globali si può passare la variabile ad altre funzioni come argomento

aggiuntivo, oppure utilizzare una variabile persistente.

Le variabili persistenti possono essere usate solo all’interno di funzioni. Solo la funzione in cui la variabile è dichiarata può accedere alla variabile.

Matlab non elimina la variabile al termine dell’esecuzione della funzione. In questo modo, il valore della variabile resta disponibile per una

successiva esecuzione della funzione. Le variabili persistenti sono dichiarate per mezzo della parola chiave persistent.

Quando si dichiara una variabile persistente, Matlab inizializza il suo valore a una matrice vuota, []. Successivamente alla dichiarazione se ne può

assegnare il valore. Un esempio riguardante l’utilizzo delle variabili persistenti è riportato al §15.1.

12 GESTIONE DI FILE E CARTELLE

In Matlab è anche possibile creare, spostare, cancellare files e cartelle. Ciò velocizza enormemente la gestione del lavoro, specie dovendo gestire

grandi quantità di dati. La Tabella 9 riporta i comandi preposti alla gestione di files e cartelle.

Tabella 9 Comandi per la gestione di files e cartelle.

comando descrizione

cd cambia la cartella di lavoro

copyfile copia file o cartelle

delete rimuove files

dir elenca gli oggetti di una cartella

exist controlla se esiste una variabile (o un file, o una cartella)

Page 42: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

41

fileattrib determina e imposta gli attributi di file e cartelle

filebrowser browser della Current Directory

isdir Determina se l'input è una cartella

lookfor cerca una keyword nell'help

ls analogo a dir, anche per piattaforma UNIX®

matlabroot root directory di Matlab

mkdir crea una nuova cartella

movefile sposta file o cartelle

pwd identifica la cartella corrente

recycle imposta le opzioni riguardanti i file cancellati dal comando delete (cestino o eliminazione definitiva)

rehash riaggiorna la cache dei path di funzioni e file di sistema

rmdir cancella una cartella

type visualizza i contenuti di un file

what elenca i file Matlab della Current Directory

which trova la cartella contenente funzioni e files

Page 43: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

42

SEZIONE 2 - PRINCIPI DI GRAFICA, PROGRAMMAZIONE E TECNICHE DI INPUT/OUTPUT

Prima di procedere con la descrizione di caratteristiche più avanzate riguardanti la soluzione di problemi complessi, ci si soffermerà a fornire gli

strumenti necessari alla creazione di grafici bi- e tri-dimensionali.

13 CREAZIONE E PERSONALIZZAZIONE DI DIAGRAMMI

Matlab consente di creare e personalizzare diagrammi 2D e 3D grazie a moltissime funzioni. Il presente capitolo fornisce le informazioni

fondamentali per la creazione di diagrammi elementari e la loro personalizzazione.

13.1 DIAGRAMMI 2D

I diagrammi bidimensionali sono i più semplici da rappresentare, e probabilmente i più utilizzati. Il comando “base” per la creazione di grafici

bidimensionali è la funzione plot, che consente di rappresentare una o più funzioni:

>> x=0:.01:2*pi;

>> y1=x.*sin(x)+cos(x.^2);

>> y2=x.*-cos(x)+sin(x.^.5);

>> plot(x,y1,x,y2)

>> legend('y_1','y_2')

>> grid on

>> xlabel('x')

>> ylabel('y')

>> xlim([0 2*pi])

L’esempio riportato sopra, il cui risultato è rappresentato in Figura 4, crea contemporaneamente il diagramma di due funzioni; attraverso alcuni

comandi ausiliari (legend, grid, xlabel, ylabel, xlim) si inseriscono inoltre la legenda, la griglia, i titoli degli assi e i limiti dell’asse delle ascisse. La

Tabella 10 riporta i comandi elementari per l’annotazione dei diagrammi.

Page 44: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

43

Figura 4 Diagramma di due funzioni (comando plot).

Si osservi che il comando plot, quando utilizzato per rappresentare contemporaneamente uno o più funzioni, attribuisce automaticamente le

proprietà grafiche degli oggetti rappresentati (le funzioni diagrammate in Figura 4 hanno tratti verde e blu, che non sono stati specificati). È

tuttavia possibile specificare le caratteristiche che si vogliono attribuire alle linee all’interno della funzione; la Tabella 11 riporta le stringhe

letterali da assegnare per la caratterizzazione delle proprietà dei tratti delle linee; la Tabella 12 illustra alcune ulteriori opzioni da utilizzarsi nella

particolarizzazione dei diagrammi. Si osservi che – oltre ai colori base riportati in tabella ed espressi tramite identificativo letterale – è possibile

attribuire agli oggetti rappresentati dei diagrammi un qualunque colore RGB (combinazione di 3 valori numerici compresi tra 0 e 1 rappresentanti

il rosso, R, il verde, G, e il blu, B).

Un comando molto versatile, utilizzato da Matlab anche in altri ambiti per modificare le proprietà di svariate tipologie di oggetti, è set, la cui

sintassi è set(H, 'PropertyName', PropertyValue,...), in cui H è l’identificativo dell’oggetto da editare, PropertyName è la proprietà dell’oggetto da

modificare e PropertyValue è il valore che le si vuole assegnare. L’utilizzo di set in ambito di rappresentazione grafica avviene principalmente

modificando le proprietà degli assi (gca) e della figura (gcf).

Ad esempio, il comando:

0 1 2 3 4 5 6-6

-4

-2

0

2

4

6

x

y

y1

y2

Page 45: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

44

>> set(gca,'FontName','Times New Roman','Xtick',0:.5:6.5)

Comporta che le indicazioni degli assi siano scritte in font Times New Roman, e che la suddivisione dell’asse delle ascisse sia a passi di 0.5 tra 0 e

6.5.

Tabella 10 Comandi elementari per l’annotazione dei diagrammi.

funzione descrizione

xlim, ylim, zlim fissa i limiti degli assi

axis consente di operare sugli assi attraverso i loro limiti e l’aspetto (opzioni principali: square, equal)

xlabel, ylabel, zlabel inserisce il titolo degli assi

grid inserisce la griglia degli assi

legend inserisce la legenda

title inserisce il titolo del diagramma

text inserisce una stringa di testo a coordinate scelte

Tabella 11 Comandi per la caratterizzazione delle proprietà dei tratti delle linee.

categoria simbolo stile

linea

- linea continua (default)

-- linea tratteggiata

-. tratto punto-linea

: tratto a punti

forma del marker

+ segno più

* asterisco

o circolare

Page 46: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

45

s quadrato

. punto

x croce

d rombo

^ triangolo, punta in alto

v triangolo, punta in basso

> triangolo, punta a destra

< triangolo, punta a sinistra

p stella a 5 punte

h stella a 6 punte

colore

k nero

b blu

r rosso

w bianco

g verde

y giallo

m magenta

c ciano

Tabella 12 Opzioni per la caratterizzazione dei tratti dei diagrammi

opzione descrizione

LineWidth definizione spessore della linea

MarkerEdgeColor colore del contorno del marker

Page 47: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

46

MarkerFaceColor colore del riempimento del marker

MarkerSize dimensioni del marker

A seconda della tipologia di dati da rappresentare il diagramma base plot potrebbe rivelarsi inadatto, tuttavia in Matlab esiste una vastissima

classe di diagrammi già implementati, che permettono una efficace rappresentazione di pressoché qualunque tipo di struttura dati. La Tabella 13

riporta – suddivise per tipologia di rappresentazione – le funzioni Matlab che realizzano diagrammi 2D.

Tabella 13 Tipologie di diagrammi 2D.

tipologia funzione icona descrizione

diagrammi a linee

plot

diagramma elementare

plotyy

diagramma con doppio asse delle ordinate

loglog

diagramma con assi logaritmici

semilogx

diagramma con asse x logaritmico e y lineare

semilogy

diagramma con asse x lineare e y logaritmico

area

diagramma rappresentante l’area sottesa da una o più curve

errorbar

diagramma rappresentante una curva e l’errore ad essa associato

comet

diagramma animato

Page 48: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

47

stem

diagramma rappresentante una curva e i “gambi” relativi a ogni punto

stairs

diagramma a scalini

diagrammi a barre/istogrammi

bar

diagramma a barre (verticali)

barh

diagramma a barre (orizzontali)

hist

istogramma

pareto

istogramma in ordine decrescente con la cumulativa (95% dei valori)

rose

Istogramma polare

diagrammi di dispersione

scatter

diagramma di dispersione

spy

visualizzazione degli elementi non nulli di una matrice

diagrammi a “torta” pie

diagramma a torta

diagrammi polari

polar

diagramma in coordinate polari

compass

diagramma vettoriale (frecce uscenti dall’origine degli assi)

Page 49: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

48

diagrammi a curve di livello

contour

curve di livello di una matrice

contourf

curve di livello di una matrice e aree tra le isolinee

rappresentazione di immagini

image

rappresentazione dei valori di una matrice come valori RGB

imagesc

rappresentazione dei valori di una matrice come valori RGB e scalatura sul colormap11.

pcolor

rappresentazione dei valori di una matrice come celle colorate

volumetrie streamslice

rappresentazione di linee di flusso

campi vettoriali

feather

rappresentazione di vettori come frecce aventi origine equidistante

quiver

rappresentazione di vettori aventi origine predefinita

Si supponga di volere rappresentare una funzione del tipo z = f(x, y), con −5 ≤ x ≤ 5, −3 ≤ y ≤ 3. La creazione di una griglia di valori di ascisse e

ordinate semplifica notevolmente le cose; scegliendo ad esempio in entrambi i casi un incremento pari a 0.05, la griglia viene creata attraverso il

comando:

>> [x,y] = meshgrid(-5:0.05:5,-3:0.05:3);

La funzione da rappresentare sia z = cos(x)sin(y), e la rappresentazione avvenga attraverso curve di livello equidistanti a passo 0.1:

11 §13.4.

Page 50: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

49

>> z = cos(x).*sin(y);

>> v=floor(min(min(z))):.1:ceil(max(max(z)));

>> [C,h] = contour(x,y,z,v);

>> clabel(C,h,v(1:4:end))

In questo modo attraverso il comando clabel si sono anche indicati i valori delle curve di livello (una indicazione ogni 4 valori del vettore v). Il

risultato è mostrato in Figura 5.

Le etichette sulle curve di livello possono inoltre essere personalizzate a piacimento (consultare l’Help). Talvolta, in questo genere di

rappresentazione, è altresì utile collocare manualmente le etichette sulle curve di livello. Questo si può fare attraverso la sintassi:

>> clabel(C,h,’manual’)

SI osservi infine che senza che sia stato specificato il diagramma è stato rappresentato con linee i cui colori vanno dal rosso al blu. Questa è

l’impostazione base di Matlab (combinazione di colori Jet). È possibile rappresentare le curve di livello (così come le superfici) utilizzando altre

combinazioni cromatiche, attraverso il comando colormap nome combinazione. La Figura 6 mostra le mappe di colore implementate in Matlab. È

comunque possibile crearne di personalizzate attraverso combinazioni RGB.

Page 51: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

50

Figura 5 Esempio di rappresentazione di una funzione a due variabili tramite curve di livello.

-0.6

-0.6 -0.6

-0.6

-0.6

-0.6-0

.2-0

.2

-0.2

-0.2

-0.2

-0.2

-0.2-0

.2

-0.2

-0.2

-0.2

-0.2-0

.2-0.2

0.2

0.2

0.2

0.2

0.2

0.2 0

.2

0.2

0.2 0

.2

0.2

0.2

0.2

0.2

0.60

.6

0.6

0.6

0.6

0.6

-5 -4 -3 -2 -1 0 1 2 3 4 5-3

-2

-1

0

1

2

3

Page 52: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

51

Figura 6 Mappe di colore implementate in Matlab.

13.2 DIAGRAMMI 3D

La rappresentazione di diagrammi in un piano è probabilmente lo strumento grafico più soventemente utilizzato, tuttavia spesso si rivela

inefficace nella rappresentazione di strutture dati più complesse, o a un elevato numero di dimensioni. Matlab contiene molte funzioni per la

creazione di diagrammi 3D. La Tabella 14 riporta – suddivise per tipologia di rappresentazione – le funzioni Matlab che realizzano diagrammi 3D.

Page 53: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

52

Tabella 14 Tipologie di diagrammi 3D.

tipologia funzione icona descrizione

diagrammi a linee

plot3

rappresentazione di linee nello spazio

stem3

rappresentazione di una curva nello spazio e dei “gambi” relativi a ogni punto

comet3

diagramma animato 3D

diagrammi a barre

bar3

diagramma a barre 3D (orientamento verticale)

bar3h

diagramma a barre 3D (orientamento orizzontale)

diagrammi di dispersione

scatter3

diagramma di dispersione 3D

diagrammi a “torta”

pie3

diagramma a torta 3D

diagrammi a curve di livello

contour3

rappresentazione di curve di livello nello spazio

contourslice

rappresentazione di curve di livello corrispondenti a sezioni nello spazio

superfici surf

rappresentazione di una superficie 3D

Page 54: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

53

surfc

rappresentazione di una superficie 3D con proiezione delle curve di livello

surfl

rappresentazione di una superficie 3D con illuminazione

mesh

rappresentazione di una superficie 3D tramite griglia

meshc

rappresentazione di una superficie 3D tramite griglia con proiezione delle curve di livello

meshz

rappresentazione di una superficie 3D tramite griglia e piani di riferimento attorno alla superficie stessa

waterfall

rappresentazione di una matrice tramite linee corrispondenti alle righe, e piano di riferimento attorno alla superficie stessa

ribbon

rappresentazione di una matrice tramite linee corrispondenti alle colonne

volumetrie/campi vettoriali

slice

sezione di un volume effettuata con un piano avente orientamento stabilito

streamline

rappresentazione di linee di flusso (3D o 2D)

streamribbon

rappresentazione di linee di flusso tramite nastri

streamtube

rappresentazione di linee di flusso tramite tubi

coneplot

rappresentazione di linee di flusso tramite coni

Page 55: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

54

quiver3

rappresentazione di vettori con frecce aventi dimensione proporzionale al modulo

A titolo di esempio, si consideri di rappresentare tridimensionalmente la funzione z=cos(x)sin(y) definita al §13.1 attraverso curve di livello (25

curve) e una griglia a passi di 5 valori, di colore rosso.

I comandi per creare tale grafico, riportato in Figura 7, possono essere i seguenti:

>> mesh(x(1:5:end,1:5:end),y(1:5:end,1:5:end),z(1:5:end,1:5:end),'EdgeColor', 'r')

>> hold on

>> contour3(x,y,z,25)

>> colormap winter

>> set(gca,'FontName','Calibri','FontSize',11)

>> ylabel('y')

>> xlabel('x')

>> title('z=cos(x)sin(y)')

>> zlabel('z')

>> box on

Figura 7 Esempio di rappresentazione 3D di una funzione a 2 variabili.

Page 56: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

55

Il commando hold serve a bloccare gli assi, cosicché i successivi diagrammi vengano rappresentati sugli stessi assi precedentemente utilizzati. Il

comando box serve a creare la gabbia degli assi. La scelta cromatica delle curve di livello è effettuata dal comando colormap.

13.3 DIAGRAMMI MULTIPLI

Nel caso si desideri rappresentare grafici in finestre separate, è necessario, prima di invocare i comandi per la realizzazione dei diagrammi, il

comando figure. Il comando figure crea una nuova finestra su cui si possono andare a creare nuovi assi; è inoltre possibile stabilire le proprietà

della nuova finestra (ad esempio le dimensioni e la posizione). La chiusura della figura corrente avviene attraverso il comando close, mentre il

comando close all chiude tutte le figure aperte.

Inoltre, è possibile rappresentare nella stessa figura più diagrammi, attraverso il comando subplot, la cui sintassi è subplot(m, n, p, ‘options’). In

questo contesto m e n impongono a Matlab di generare un array di plot a m righe e n colonne; p indica in quale posizione inserire il diagramma

che si sta invocando. Ciascun diagramma creato col comando subplot ha caratteristiche indipendenti dagli altri diagrammi creati all’interno della

stessa figura. Le opzioni consentono di caratterizzare ciascun diagramma.

13.4 EDITING AVANZATO: FUNZIONI ACCESSORIE, CARATTERI E SIMBOLI PARTICOLARI

Talvolta si rende necessario caratterizzare i diagrammi con informazioni supplementari, così come spesso si deve far ricorso a caratteri tipografici

particolari (simboli matematici, lettere greche…).

Nel caso in cui si desideri inserire una stringa di testo in un grafico (ad esempio per visualizzare un valore) si può utilizzare il comando text

(sintassi: text(x,y,’stringa’, ‘opzioni’)).

Si considerino le seguenti righe di comando:

x=0:.1:10;

omega =pi*3/2; y=exp(-x.^.5).*sin(2*(x+omega));

plot(x,y)

[minimo pos_min]=min(y);

[massimo pos_max]=max(y);

hold on

plot([x(pos_min) x(pos_max)],[minimo massimo],'xr')

text(x(pos_max),massimo,[' \leftarrow \cong' num2str(massimo, '%5.2f')],'FontSize',10)

text(x(pos_min),minimo,[' \leftarrow \cong' num2str(minimo, '%5.2f')],'FontSize',10)

Page 57: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

56

title('\ity\rm = e^{-\itx\rm^{1/2}}sin( 2( \itx\rm+\omega ) ), \omega=3/2\pi, 0 \leq \itx\rm \leq 10')

Dapprima si è creato un vettore di ascisse, si è poi creata una funzione e la si è rappresentata. Si sono poi cercati gli estremi della funzione nel

dominio con i comandi min e max, e in corrispondenza di tali punti se ne è inserito il valore numerico con un certo arrotondamento. Si è infine

inserita la funzione assieme al dominio di integrazione come titolo del diagramma. Il risultato è mostrato in Figura 8.

Figura 8 Annotazioni su un diagramma.

Per annotare i valori degli estremi e il titolo si sono utilizzati alcuni caratteri speciali ( , , , lettere greche..), inseriti attraverso comandi specifici.

La Tabella 15 e la Tabella 16 riportano le stringhe letterali da utilizzare per inserire lettere greche minuscole e maiuscole. La Tabella 17 riporta le

stringhe preposte alla creazione di altri simboli speciali.

0 1 2 3 4 5 6 7 8 9 10-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.22

-0.43

y = e-x1/2

sin( 2( x+ ) ), =3/2 , 0 x 10

Page 58: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

57

Tabella 15 Lettere greche minuscole.

Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo

\alpha \theta \xi \tau

\beta \vartheta ϑ \phi \upsilon υ

\gamma \iota \pi \chi

\delta \kappa \varpi \psi

\epsilon \lambda \rho \omega

\zeta \mu \sigma

\eta \nu \varsigma ς

Tabella 16 Lettere greche maiuscole.

Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo

\Gamma \Lambda \Sigma \Psi

\Delta \Xi \Upsilon Υ \Omega Ω

\Theta \Pi \Phi Φ

Page 59: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

58

Tabella 17 Altri simboli.

Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo Sequenza Simbolo

\pm ± \leftrightarrow ⟷ \exists ∃ \oplus ⊕

\div ÷ \leftarrow ← \ni ϶ \otimes ⨂

\bullet • \uparrow ↑ \forall ∀ \oslash

\cdot · \rightarrow ⟶ \cap ∩ \lfloor ⌊

\times × \downarrow ↓ \cup ∪ \rfloor ⌋

\geq ≥ \prime ′ \subseteq ⊆ \lceil ⌈

\leq ≤ \partial ∂ \supseteq ⊇ \rceil ⌉

\equiv \int ∫ \subset ⊂ \perp ⊥

\approx ≈ \nabla ∇ \supset ⊃ \langle ⟨

\cong ≅ \Im ℑ \in ∈ \rangle ⟩

\propto ∝ \Re ℜ \0 ∅ \o ο

\neq ≠ \aleph ℵ \vee \clubsuit

\neg ¬ \wp ℘ \wedge \diamondsuit

\surd √ \ldots … \circ ° \heartsuit

\infty ∞ \copyright © \mid \spadesuit

Page 60: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

59

13.5 EDITING DA GUI

In alcuni contesti può risultare molto vantaggioso, per modificare i grafici che si sono realizzati, ricorrere agli strumenti che Matlab mette a

disposizione nella finestra che contiene la figura. Di default, nella parte superiore della finestra, compare la Figure Toolbar.

Attraverso la Figure Toolbar, rappresentata in Figura 9, è possibile eseguire degli zoom, tracciare le curve facendo comparire a video il valore

numerico, inserire la legenda, il colorbar, etc…

Figura 9 Figure Toolbar.

Dal menu a tendina “view” della finestra contenente la figura è possibile inoltre abilitare altre toolbar: la Camera Toolbar, che consente di

cambiare i settaggi relativi alla vista 3D, e la Plot Edit Toolbar, che permette di aggiungere elementi grafici.

Dalla Command Window è infine possibile richiamare un ulteriore strumento di editing attraverso il comando plottools.

La modifica interattiva dei diagrammi è estremamente pratica qualora non si abbia molta dimestichezza con la sintassi dei comandi o si debbano

modificare poche figure; qualora si abbia necessità di caratterizzare un elevato numero di diagrammi è però indispensabile utilizzare le functions.

13.6 SALVATAGGIO DI DIAGRAMMI

I diagrammi di Matlab possono essere salvati in formato “proprietario” (i.e. files che possono essere aperti da Matlab e conservano la

modificabilità) o esportati. Il comando principale per il salvataggio di diagrammi è saveas. Tale comando permette di salvare i diagrammi nel

Page 61: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

60

formato desiderato. È anche possibile stampare le immagini attraverso il comando print. Le funzionalità di saveas e print sono accessibili anche da

GUI.

14 FUNZIONI “DETECT STATE”

In Matlab esiste una classe di funzioni preposte a stabilire lo stato di svariate “entità”. Tali funzioni sono dette “detect state”, e spesso risultano

essere particolarmente utili in fase di programmazione e gestione delle variabili. Sono elencate, assieme a una sintetica spiegazione del loro

utilizzo, in Tabella 18.

Tabella 18 Funzioni “detect state”.

funzione scopo

isa Detect object of given Matlab class or Java™ class

isappdata Determine if object has specific application-defined data

iscell Determine if input is cell array

iscellstr Determine if input is cell array of strings

ischar Determine if input is character array

iscom Determine if input is Component Object Model (COM) object

isdir Determine if input is directory

isempty Determine if input is empty array

isequal Determine if arrays are numerically equal

isequalwithequalnans Determine if arrays are numerically equal, treating NaNs as equal

isevent Determine if input is object event

isfield Determine if input is Matlab structure array field

Page 62: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

61

isfinite Detect finite elements of array

isfloat Determine if input is floating-point array

isglobal Determine if input is global variable

ishandle Detect valid graphics object handles

ishold Determine if graphics hold state is on

isinf Detect infinite elements of array

isinteger Determine if input is integer array

isinterface Determine if input is Component Object Model (COM) interface

isjava Determine if input is Java object

iskeyword Determine if input is Matlab keyword

isletter Detect elements that are alphabetic letters

islogical Determine if input is logical array

ismac Determine if running Matlab for Macintosh® OS X platform

ismember Detect members of specific set

ismethod Determine if input is object method

isnan Detect elements of array that are not a number (NaN)

isnumeric Determine if input is numeric array

ispc Determine if running Matlab for PC (Windows®) platform

isprime Detect prime elements of array

isprop Determine if input is object property

isreal Determine if all array elements are real numbers

isscalar Determine if input is scalar

Page 63: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

62

issorted Determine if set elements are in sorted order

isspace Detect space characters in array

issparse Determine if input is sparse array

isstrprop Determine if string is of specified category

isstruct Determine if input is Matlab structure array

isstudent Determine if Student Version of Matlab

isunix Determine if running Matlab for UNIX® platform.

isvarname Determine if input is valid variable name

isvector Determine if input is vector

15 PRINCIPI DI PROGRAMMAZIONE

In generale l’efficienza di Matlab è migliore quando si ricorre a operazioni sugli array che non involvono loop, tuttavia spesso – specie operando su

oggetti multidimensionali – la creazione di cicli diventa una necessità inderogabile. La presente sezione illustra i comandi chiave per la

programmazione attraverso istruzioni logiche e loop.

15.1 COMANDI IF, ELSE, ELSEIF

L’istruzione if valuta un’espressione logica ed esegue una sequenza di istruzioni se l’espressione è vera. Nella sua forma più semplice, la sintassi è

la seguente:

if logical_expression

statements

end

La sequenza di istruzioni da eseguire è delimitata dalle parole chiave if e end. Si consideri il seguente esempio che ricorre a una variabile

persistente (§11) e al comando isempty:

Page 64: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

63

function findSum(inputvalue)

persistent SUM_X

if isempty(SUM_X)

SUM_X = 0;

end

SUM_X = SUM_X + inputvalue

Tale funzione inizializza a 0 il valore della variabile al primo utilizzo, dopodichè aggiorna il valore a ogni successive richiamo. Se l’espressione

valutata dall’istruzione if non è scalare, tutti gli elementi del risultato della valutazione dell’espressione devono essere diversi da 0, affinché le

istruzioni seguenti vengano eseguite. Ad esempio:

>> x = round(10 * rand(1,2));

>> y = 0;

>> if x ~= 0

y = 1./x;

end

>> x

x =

4 3

>> y

y =

0.2500 0.3333

L’istruzione else precede una sequenza di istruzioni che vengono eseguite se l’espressione calcolata dall’istruzione if a lei associata risulta falsa.

All’istruzione else non è associata alcuna espressione da valutare. L’istruzione elseif valuta l’espressione logica ad essa associata solo se

l’espressione logica associata all’istruzione if che la precede e quelle associate ad eventuali altre istruzioni elseif precedenti sono tutte false. La

sequenza di istruzioni associate ad una istruzione elseif viene eseguita solo se l’istruzione elseif valuta l’espressione logica a lei associata e il

risultato di tale valutazione è diverso da 0 (vero). Un blocco if può contenere più istruzioni elseif.

15.2 COMANDO FOR

Il comando for ripete un blocco di istruzioni un predeterminato numero di volte. La sintassi è la seguente:

Page 65: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

64

for index = start:increment:end

statements

end

L’incremento predefinito è 1. E’ tuttavia possibile specificare un incremento diverso, anche negativo. Per indici positivi, l’esecuzione termina

quando il valore dell’indice supera il valore finale. Per incrementi negativi, il ciclo si conclude quando il valore dell’indice scende al di sotto del

valore finale. Si consideri il seguente esempio (stupido e malsano…non vogliatemene!):

>> for i=1:10, x(i)=i; end

>> x

x =

1 2 3 4 5 6 7 8 9 10

Analogamente si possono annidare altri cicli all’interno di quello principale:

>> m=3;n=2;

>> for i=1:m

for j=1:n

a(i,j)=(i-1)+(j-1);

end

end

>> a

a =

0 1

1 2

2 3

15.3 COMANDO WHILE

L’istruzione while esegue un’istruzione o una sequenza di istruzioni ripetutamente finché l’espressione a lei associata risulta vera. La sintassi è la

seguente:

while expression

statements

end

Page 66: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

65

Se l’espressione valutata da while non è scalare, tutti gli elementi del risultato della valutazione dell’espressione devono essere diversi da 0,

affinché il ciclo continui ad essere eseguito.

15.4 COMANDI BREAK E RETURN

Si può uscire da un ciclo for o while in qualunque momento usando l’istruzione break.Ad esempio:

>> X = round(10 * rand(1,10) - 2);

>> k = 1;

Sum = 0;

while k <= 10

if X(1, k) == 0

break

end

Sum = Sum + X(1, k);

k = k + 1;

end

>> X

X =

1 6 -2 7 5 3 4 0 3 8

>> k

k =

8

>> Sum

Sum =

24

L’istruzione continue provoca l’esecuzione della successiva iterazione di un ciclo for o while, saltando l’esecuzione della restante parte del ciclo. SI

veda l’esempio seguente:

>> X = round(4 * rand(1,10) - 2);

>> k = 0;

Page 67: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

66

Count = 0;

while k <= 9

k = k + 1;

if X(1, k) == 0

continue

end

Count = Count + 1;

end

>> X

X =

1 0 1 1 2 2 -1 1 -1 -2

>> Count

Count =

9

15.5 COMANDO SWITCH

L’istruzione switch esegue una diversa sequenza di istruzioni in base al valore di una variabile o di un’espressione. Le parole chiave case e

otherwise delimitano le diverse sequenze da eseguire. La sintassi è la seguente:

switch expression (scalar or string)

case value1

statements % Executes if expression is value1

case value2

statements % Executes if expression is value2

...

otherwise

statements % Executes if expression does not match any case

end

L’istruzione switch può essere seguita da un qualunque numero di blocchi case. Il blocco otherwise è opzionale e si trova sempre dopo tutti i

blocchi case e prima di end. Se l’espressione da valutare è una stringa, la comparazione con i valori gestiti dai vari blocchi case è operata con la

funzione strcmp.

Page 68: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

67

15.6 ERRORI DI PROGRAMMAZIONE

Lo sviluppo di programmi è ovviamente soggetto ad errori da parte del programmatore. Gli errori sono generalmente di due tipi: di sintassi e di

esecuzione. Gli errori di sintassi (syntax errors) sono violazioni della sintassi del linguaggio, ad esempio omettere parentesi, digitare in modo

errato una parola chiave. Gli errori in fase di esecuzione (run-time errors) sono in genere errori nello sviluppo dell’algoritmo, ovvero l’algoritmo

non fa quello che dovrebbe fare. Ad esempio un calcolo errato, la modifica del valore di una variabile che non dovrebbe essere modificata. Gli

errori di sintassi vengono individuati e segnalati dall’interprete di Matlab, durante la fase di interpretazione del codice. Gli errori in fase di

esecuzione si manifestano di solito attraverso risultati inattesi restituiti da una funzione o attraverso anomalie nell’esecuzione di un programma

(ad esempio cicli infiniti, terminazioni anomale). Gli errori in fase di esecuzione sono pertanto più difficili da individuare e correggere. Un valido

strumento per l’individuazione e la correzone degli errori in fase di esecuzione è il debugging. Debugging è il processo attraverso il quale si

individuano e correggono errori in fase di esecuzione all’interno di un programma. L’ambiente di sviluppo Matlab fornisce uno strumento, il

debugger, che assiste il programmatore nell’individuazione e correzione degli errori in fase di esecuzione. Il debugger Matlab è integrato con

l’editor predefinito per gli M-file.

Il debugger consente di impostare punti in cui sospendere l’esecuzione di un M-file allo scopo di esaminare i valori correnti delle variabili. Tali

punti sono chiamati breakpoints. I breakpoints possono essere impostati solo in corrispondenza di linee di codice eseguibile contenute in file

salvati nella directory corrente o in una directory inclusa tra i path di Matlab. I breakpoint possono essere impostati nell’editor predefinito

cliccando a sinistra della linea di codice in corrispondenza della quale si desidera il breakpoint. E’ possibile eseguire un programma istruzione per

istruzione in modo da esaminarlo nel dettaglio. Nel menu Debug dell’editor predefinito:

Step: esegue la riga corrente di un M-file

Step In: esegue la riga corrente di un M-file e, se la linea è una chiamata ad un’altra funzione, entra all’interno della funzione chiamata.

Step Out: dopo uno Step In, esegue il resto del codice della funzione chiamata, lascia la funzione chiamata e sospende l’esecuzione del

programma.

Continue: continua l’esecuzione di un M-file fino al prossimo breakpoint o al completamento dell’esecuzione

Go until cursor: continua l’esecuzione di un M-file fino alla riga su cui è posizionato il cursore.

Si osservi che occorre salvare le modifiche apportate ad un M-file prima di iniziare il debug. Se si prova ad operare il debug di un file non salvato,

Matlab salva automaticamente il file prima di iniziare il debug.

Page 69: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

68

15.7 EFFICIENZA

Matlab è un linguaggio non strutturato, e in quanto tale non necessita di allocare variabili, vettori o matrici prima dell'uso. Questo semplifica la

programmazione, ma è potenzialmente fonte di inefficenza computazionale.

Ad esempio, volendo generare un vettore del tipo x = (1; 2; 3; 4; … ; 105), si potrebbe digitare (si potrebbe in questo contesto significa che è

possibile, non che è una possibilità auspicabile!):

>> for i=1:10^5, x(i)=i; end

Tuttavia, in questo modo la generazione del vettore x richiede molto tempo. Il motivo di tale inefficienza risiede nel fatto che Matlab non conosce

a priori la dimensione del vettore, perciò ad ogni ciclo alloca un nuovo elemento in coda al vettore generato ai cicli precedenti. È noto che

l'operazione di allocazione ha un costo elevato in quanto coinvolge primitive del sistema operativo che devono cercare una locazione di memoria

libera ecc.

In questo caso Matlab deve eseguire 105 allocazioni…Per ovviare a questo inconveniente si può forzare Matlab ad allocare (ed inizializzare) il

vettore x prima del suo utilizzo tramite la funzione zeros (§7):

>> x=zeros(1,10^5);

>> for i=1:10^5, x(i)=i; end;

In questo modo la generazione è immediata in quanto l'allocazione avviene in un colpo solo. Un’ulteriore possibilità, certamente più “elegante” e

computazionalmente preferibile, è poi quella di semplificare ulteriormente le cose:

>> x=1:10^5;

Su un comune PC con processore dual core e 2GB di RAM le tre diverse opzioni richidedono rispettivamente circa 59, 1.7*10-3 e 5*10-4 secondi di

CPU.

Un altro aspetto molto importante è l’occupare quanta meno memoria possibile, ad esempio cancellando le variabili inutilizzate, chiudendo le

figure non necessarie, etc…

Page 70: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

69

16 I/O

Con I/O si intendono tutte le operazioni di input e output. Esistono due principali categorie di operazioni I/O inerenti la gestione di dati

precedentemente salvati o generati all’interno di Matlab durante una sessione di lavoro: quelle a video e quelle su file.

Matlab fornisce inoltre la possibilità di eseguire operazioni I/O hardware (ad esempio acquisizione dati), ma tale tematica non può essere

affrontata durante il corso per ragioni di tempo.

16.1 I/O SU VIDEO

Per la stampa a video Matlab segue una sintassi del tipo:

>> fprintf('Il valore di P greco risulta %f \n',pi);

Il valore di P greco risulta 3.141593

Mentre se si devono immettere dati da input:

>> p=input('Immettere il valore della pressione di riferimento = ')

Immettere il valore della pressione di riferimento = 342

p =

342

Qualora l’input sia una stringa, la sintassi è: stringa=input(‘richiesta’,’s’).

16.2 I/O SU FILE

Spesso si rende necessario accedere da Matlab a dati raccolti o creati con altri programmi. Il metodo più semplice consiste nell'avere questi dati in

un file in formato ASCII, di modo che possano essere semplicemente caricati in Matlab attraverso il comando load.

Il salvataggio di dati viene eseguito specificando un formato con il comando save. Le opzioni del comando save sono riportate in Tabella 19.

Page 71: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

70

Tabella 19 Opzioni di salvataggio dei dati tramite comando save.

opzione effetto

-ascii Salva i dati in formato 8-digit ASCII.

-ascii -tabs Salva i dati in formato 8-digit ASCII delimitato da tabulazioni

-ascii -double Salva i dati in formato 16-digit ASCII.

-ascii -double -tabs Salva i dati in formato 16-digit ASCII delimitato da tabulazioni

-mat Salva i dati in formato binario Matlab (default)

Tale procedura funziona con dati numerici organizzati in matrici. Se la struttura dati è più complessa (dati alfanumerici, campi vuoti….), per

leggere e scrivere dati una procedura sufficientemente generale è la seguente:

1. Apertura del file attraverso il commando fopen, il quale restituisce un identificatore che poi verrà utilizzato in tutte le altre operazioni

di I/O.

2. Operazioni sul file; i comandi da utilizzare sono diversi a seconda dello scopo dell’accesso al file (lettura o scrittura) e della struttura

dati. In generale:

Lettura di dati binari: comando fread.

Scrittura di dati binari: comando fwrite.

Lettura di stringhe di testo linea per linea: comandi fgets o fgetl.

Lettura di dati formattati ASCII: comando fscanf.

Scrittura di dati formattati ASCII: comando fprintf.

3. Chiusura del file: comando fclose.

I dati formattati in lettura e in scrittura devono rispettare precise regole di formattazione. La Figura 10 mostra la formattazione che può essere

applicata; essa consta di 4 campi: un flag (ad esempio il segno, Tabella 20), la lunghezza (in caratteri) del campo e la precisione (numero di cifre

dopo la virgola, Tabella 21) e il carattere di conversione (Tabella 22).

Page 72: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

71

Figura 10 Formato dei dati da specificare in lettura e scrittura: flags, field width, precision e conversion character.

Tabella 20 Flags di formattazione.

Character Description Example

Minus sign (-) Left-justifies the converted argument in its field %-5.2d

Plus sign (+) Always prints a sign character (+ or – ) %+5.2d

Space character Inserts a space before the value % 5.2d

Zero (0) Pads with zeros rather than spaces %05.2d

Tabella 21 Field width e precision della formattazione.

Character Description Example

Field width A digit string specifying the minimum number of digits to be printed

%6f

Precision A digit string including a period (.) specifying the number of digits to be printed to the right of the decimal point

%6.2f

Tabella 22 Conversion characters utilizzati in formattazione.

Specifier Description

%c Single character

%d Decimal notation (signed)

Page 73: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

72

%e Exponential notation (using a lowercase e as in 3.1415e+00)

%E Exponential notation (using an uppercase E as in 3.1415E+00)

%f Fixed-point notation

%g The more compact of %e or %f. Insignificant zeros do not print.

%G Same as %g, but using an uppercase E

%i Decimal notation (signed)

%o Octal notation (unsigned)

%s String of characters

%u Decimal notation (unsigned)

%x Hexadecimal notation (using lowercase letters a – f )

%X Hexadecimal notation (using uppercase letters A – F )

Si consideri il seguente esempio esplicativo:

A = pi*100*ones(1,5);

sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

ans =

314.159265 % Display in fixed-point notation (%f)

314.16 % Display 2 decimal digits (%.2f)

+314.16 % Display + for positive numbers (%+.2f)

314.16 % Set width to 12 characters (%12.2f)

000000314.16 % Replace leading spaces with 0 (%012.2f)

In tale esempio si è fatto ricorso a un carattere particolare, \n, il quale ha il compito di mandare a capo. Altri simboli di terminazione linea o

tabulazione (escape characters) sono riportati in Tabella 23.

Page 74: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

73

Tabella 23 Escape characters.

Character Description

\b Backspace

\f Form feed

\n New line

\r Carriage return

\t Horizontal tab

\\ Backslash

\'' or '' Single quotation mark

%% Percent character

Infine, per scrivere su un file di testo i valori di una funzione, si consideri il prossimo esempio:

>> t=0 :pi/20 :2*pi;

>> y=2*sin(t).*cos(t);

>> funz=[t ;y] ;

>> fid=fopen('funzione.txt','w') ;

>> fprintf(fid,'Valori della funzione sin(t)*cos(t) tra 0 e 2*pi\n\n') ;

>> fprintf(fid,'%4.2f %10.6f\n',funz) ;

>> fclose(fid)

Malab dispone inoltre di alcuni comandi per leggere e scrivere file Excel. Il comando per importare dati da un file Excel è xlsread, che di default

importa i dati numerici del primo foglio di calcolo ma che può essere caratterizzato per selezionare i folgi di calcolo di interesse e il range dei dati.

Ad esempio, l’istruzione:

[dati header]=xlsread(nomefile,3);

importa i dati del terzo foglio di calcolo del file nomefile; i dati numerici sono salvati nella variabile dati, mentre i dati letterali sono salvati nella

variabile header.

La scrittura di file Excel avviene col comando xlswrite, che ha sintassi analoga a xlsread.

Page 75: CORSO INTRODUTTIVO A MATLAB® - unige.it · o si modifica una variabile. Per la creazione di variabili occorre però tenere presente alcune convenzioni: 1. le variabili sono case

74

17 BIBLIOGRAFIA ESSENZIALE

MATLAB online help Version 7.6, The Math Works Inc., Natick, Massachusetts, 2008.

William J. Palm, Introduction to MATLAB 7 For Engineers, 2d Ed., McGraw-Hill, New York, 2005.

David McMahon, 2007. Matlab Demystified – a self-teaching guide, McGraw-Hill, New York, 2007.