Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Matlab
Matlab
programmazione scientifica in
ambiente MATLAB
Capitolo 1
Panoramica dellambiente MatLab
1. Che cos MatLab
Per comprendere lutilit ed il funzionamento di MatLab bisogna innanzi tutto spiegare lorigine del
termine MatLab, che deriva da Matrix Laboratory. MatLab infatti fu inizialmente scritto per fornire
un accesso pi immediato ed intuitivo ai software sviluppati nellambito dei progetti LINPACK e
ESIPAC, che si rivolgevano allutilizzo ed alla programmazione di matrici. Ancora oggi, uno degli
aspetti pi importanti di MatLab quello di presentare una serie di strumenti per lo studio e la
risoluzione di problemi che coinvolgono matrici e vettori, permettendo di scrivere programmi pi
facilmente e pi velocemente rispetto ai comuni linguaggi di programmazione, come ad esempio il
C o il Fortran.
Nel corso degli anni, tuttavia, MatLab ha ricevuto un notevole sviluppo. Le routine numeriche sono
state perfezionate e la loro capacit stata notevolmente ampliata; sono state aggiunte numerose
funzioni al programma, e le capacit grafiche sono aumentate per rendere linterfaccia sempre pi
facile da usare.
Oggi MatLab un ambiente di sviluppo che integra calcolo matematico, grafica e programmazione
scientifica, il tutto in uninterfaccia familiare e facile da usare, che permette di risolvere varie classi
di problemi. La versione attuale di Matlab non si limita pi al solo calcolo matriciale e numerico,
ma presenta tutta una serie di funzioni per le applicazioni pi diverse nel campo scientifico,
rendendolo uno dei programmi pi diffusi in campi quali l'elettronica, la progettazione di sistemi di
controllo, l'analisi dei segnali, l'elaborazione di immagini, la chimica, la statistica e numerosi altri.
Inoltre, la sua estrema facilit di utilizzo lo rende uno dei software pi utilizzati nei corsi
universitari e nel mondo scientifico in generale.
Il campo di applicazione di MatLab ulteriormente estendibile grazie ai toolbox, collezioni di
funzioni adatte a particolari classi di problemi, come lanalisi dei segnali, le reti neurali, la logica
fuzzy, i sistemi di controllo e molti altri. La lista completa dei toolbox disponibili pu essere trovata
allindirizzo:
http://www.mathworks.it/products/products_by_category.shtml
2. Lambiente di lavoro
La prima volta che si apre MatLab, lambiente di lavoro appare come mostrato in Figura 1.
sempre possibile ritornare alla visualizzazione iniziale del desktop selezionando la voce Default
nellopzione Desktop Layout del menu View.
Di seguito viene riportata una descrizione delle principali caratteristiche delle finestre del desktop.
Command Window
La finestra Command Window (a destra nella Figura 1) viene utilizzata per impartire dei comandi a
MatLab o per eseguire funzioni e script. Allinterno della Command Window presente una linea
di comando, rappresentata da un prompt simile a quello dei sistemi DOS, ossia il simbolo >> che
indica che il programma pronto a ricevere dei comandi (nella versione per studenti, il simbolo del
prompt EDU>>) . Su tale riga possiamo digitare direttamente i comandi che MatLab deve
eseguire, sia che si tratti di operazioni, sia che si tratti di funzioni particolari. possibile ad esempio
utilizzare la Command Window comeuna normale calcolatrice, come mostrato nella Figura 2.
ans =
4
>>
Se non vogliamo che MatLab visualizzi il risultato delle nostre operazioni dobbiamo far seguire il
nostro comando dalloperatore ; (punto e virgola). La variabile ans viene comunque creata, ma
non ne viene visualizzato il valore nella Command Window. Per poterne osservare il contenuto,
dobbiamo utilizzare la finestra di Array Editor (vedi pi avanti).
Di seguito vengono riportate alcune funzionalit della finestra dei comandi:
- possibile ripetere le ultime operazioni effettuate utilizzando i tasti ( ) e ( ) (freccia in alto e
freccia in basso).
- possibile cancellare il contenuto della finestra mediante il comando clc.
- possibile digitare comandi diversi nella stessa riga separandoli con il simbolo , (virgola) se si
vuole visualizzare il risultato di ogni comando, oppure con il simbolo ; (punto e virgola) se non si
desidera visualizzarlo.
- Se unistruzione troppo lunga si pu utilizzare loperatore di continuazione di riga ... (tre punti)
per andare a capo.
Launch Pad
La finestra Launch Pad mostra lelenco dei toolbox e degli strumenti di MatLab installati nel
computer, permettendo un rapido accesso ad essi. Come nella finestra Gestione Risorse di
Windows, possibile espandere o ridurre ciascuna delle voci elencate. Per esempio, cliccando sul
segno + a sinistra dellicona di Matlab, verranno mostrati tutti gli strumenti, i demo e le funzioni
di help disponibili per MatLab (Figura 3). Cliccando sulla voce Help, ad esempio, potremmo
accedere direttamente allhelp in linea di MatLab.
La finestra Command History (Figura 4; in basso a sinistra in Figura 1) mostra tutti i comandi
immessi precedentemente allinterno della Command Window. Ci pu essere utile non solo per
ricordarsi di quello che si precedentemente fatto, ma anche per richiamare velocemente un
comando: basta infatti selezionarne uno nella finestra Command History, trascinarlo nella
Command Window e premere Invio, per ripetere nuovamente unoperazione.
Subito sotto la barra degli strumenti, che in questa sede non tratteremo, appare una matrice di
caselle simile a quella che appare nei fogli Excel, che ci mostra il contenuto di tutte i valori
contenuti nella variabile esaminata. Nel caso di ans, appare un solo valore, cio 4.
Current Directory
La finestra Current Directory (Figura 7) mostra tutti i file contenuti nella directory di lavoro, ossia
la directory selezionata nella barra degli strumenti. Possiamo utilizzare questa finestra per avere un
rapido accesso ai file del nostro progetto, per creare nuove directory, per trovare i files che ci
interessano ed in breve per tutte quelle operazioni che riguardano la gestione dei nostri files.
e Breakpoints) che scompaiono quando si termina di lavorare con i file. Di seguito sono elencati i
comandi pi importanti presenti nella barra dei menu. I comandi presenti solitamente nelle
applicazioni Windows (Open, Close, Cut, Paste, etc.) non verranno considerati, se non quando il
loro uso diverso da quello standard.
1. Menu File
Import Data
Save Workspace As
apre una finestra di dialogo per salvare su file nomi e valori delle
variabili caricate in memoria
Set Path
Preferences
Print Selcted
apre una finestra di dialogo per stampare solo le parti selezionate del
testo contenuto nella Command Window
File List
2. Menu Edit
Delete
Clear Workspace
3. Menu View
Desktop Layout
11
Capitolo 2
Algoritmi ed elementi di programmazione in MatLab.
1. Algoritmi e programmi
Un algoritmo una successione di operazioni elementari che possono essere eseguite da un
calcolatore per risolvere un determinato problema. In altre parole, un algoritmo rappresenta la
soluzione ad un determinato problema.
Una volta trovato lalgoritmo corretto per risolvere un determinato problema, affinch le operazioni
specificate nellalgoritmo possano essere eseguite dal calcolatore necessario tradurle nel
linguaggio macchina del calcolatore stesso. Dato per che scrivere direttamente in tale linguaggio
sarebbe davvero molto difficile e dispendioso, sono nati a tal riguardo dei linguaggi di
programmazione di livello pi alto, ovvero linguaggi dotati di un formalismo (grammatica e
sintassi) che codificano gli algoritmi in un modo simile a quello che fa la logica umana. Un ulteriore
programma (detto traduttore) si occupa poi di convertire tale codice nel linguaggio macchina del
calcolatore. Oggi esistono diversi linguaggi di programmazione, che si differenziano in base alla
tipologia di problemi a cui sono orientati; per citarne alcuni dei pi noti: C, C++, Fortran, Java,
Basic, Perl, etc.
Un programma la codifica di un algoritmo in un particolare linguaggio di programmazione. Uno
stesso algoritmo pu dunque essere usato per creare diversi programmi, ciascuno scritto in un
differente linguaggio di programmazione (Figura 9).
Problema
?
Algoritmo
Programma
Linguaggio
macchina
Figura 9. Algoritmi e programmi.
12
13
Se ora rivolgiamo la nostra attenzione alla finestra Workspace, possiamo notare che la variabile ans,
alla voce Class (ossia tipo di dato), considerata un double array, ossia un array di valori reali a
doppia precisione, anche se si tratta in questo caso di un numero intero (cio 2).
Alla voce Size, inoltre, possiamo osservare che, trattandosi di un solo valore, MatLab considera ans
un array 1x1, ossia un array a due dimensioni in cui ciascuna dimensione contiene un solo
elemento.
Gli array a due dimensioni sono gli array pi comuni in MatLab. La prima dimensione viene
chiamata riga e la seconda colonna. Casi speciali sono:
1. Gli scalari. Vengono chiamati scalari gli array a due dimensioni formati da una sola riga e da una
sola colonna (come la variabile ans creata precedentemente).
2. I vettori. Vengono chiamati vettori gli array a due dimensioni formati da una sola riga (vettori
riga) o da una sola colonna (vettori colonna).
possibile creare un vettore riga in vari modi. Il modo pi semplice quello di digitarne tutti gli
elementi, racchiusi da una coppia di parentesi quadre e separati con uno spazio od una virgola
(scelta consigliata).
14
Allo stesso modo, possibile creare un vettore colonna. In questo caso, per, gli elementi vanno
separati da un punto e virgola, oppure andando a capo.
>> colonna = [1; 2; 3; 4; 5]
colonna =
1
2
3
4
5
3. Le Matrici. Vengono chiamate matrici gli array a due dimensioni formati da almeno due righe e
due colonne.
Per creare una matrice possiamo combinare le tecniche viste precedentemente per i vettori riga e
colonna. sufficiente cio digitare tutti gli elementi della matrice racchiusi tra parentesi quadre,
separando le righe con un punto e virgola e gli elementi allinterno di una riga con una virgola o con
uno spazio. Ad esempio:
>> matrice = [1, 2, 3; 4, 5, 6; 7, 8, 9]
matrice =
1
4
7
2
5
8
3
6
9
In MatLab possibile creare anche array a pi di due dimensioni. Tali oggetti vengono chiamati
array multidimensionali. Per creare un array multidimesionale digitandone gli elementi non esiste
un metodo diretto come per il caso delle matrici e dei vettori. Possiamo tuttavia estendere una
matrice gi esistente. Ad esempio, possiamo estendere la matrice precedente. Il comando che
dobbiamo utilizzare il seguente:
>> matrice(:,:,2) = [10, 11, 12; 13, 14, 15; 16, 17, 18]
matrice(:,:,1) =
1
4
7
2
5
8
3
6
9
15
matrice(:,:,2) =
10
13
16
11
14
17
12
15
18
Possiamo immaginare il vettore multidimensionale appena creato come un libro che contiene 2
pagine, in ciascuna delle quali presente una matrice (Figura 11). Il comando utilizzato
(matrice(:,:,2)=) dunque un modo per indicare a MatLab di creare una seconda pagina con i valori
elencati.
3. Le variabili
Nel paragrafo precedente si visto come creare degli array in MatLab. Larray rappresenta la forma
generale di ogni tipo di dati in MatLab, e si visto come si possano creare diversi tipi di array
(scalari, vettori, matrici e array multidimensionali) contenenti diversi tipi di dati (numeri, caratteri,
etc).
Nei prossimi capitoli si vedr come utilizzare gli array. Prima di tutto, per, importante conoscere
il significato del termine variabile. In ogni linguaggio di programmazione il concetto di variabile
sta a significare che una certa porzione della memoria del computer contiene un determinato valore,
che pu essere di ciascuno dei 15 tipi di dati mostrati in Figura 10, e questo valore viene
memorizzato fino a quando non assegniamo alla variabile un nuovo valore.
Abbiamo gi visto, ad esempio, che MatLab crea automaticamente la variabile ans quando
eseguiamo unoperazione nella riga di comando, ad esempio:
>> 5 / 2
ans =
2.5000
Dato che ora ans contiene un valore numerico (2.5), possiamo utilizzare tale variabile al posto di un
numero in qualunque operazione aritmetica e qualunque funzione che opera su numeri. Ad esempio,
possiamo scrivere:
16
>> ans / 2
ans =
1.2500
Il risultato delloperazione lo stesso che se avessimo scritto 2.5 / 2. Qual dunque il vantaggio di
usare una variabile al posto di un numero? Il prossimo esempio servir a chiarire la questione.
Supponiamo di voler calcolare larea di un triangolo, dati i valori di base ed altezza, che
supponiamo essere di 5 e 3. Potremmo scrivere semplicemente:
>> area = (5 * 3)/2
area =
7.5000
oppure utilizzare delle variabili
>> base = 5;
>> altezza = 3;
>> area = (base * altezza )/2
area =
7.5000
Seppure in questo caso lutilizzo delle variabili comporti una maggiore lunghezza del codice, esso
ci permette non solo di implementare la regola geometrica in modo pi semantico, ma anche di
utilizzare la stessa formula al variare del valore di base ed altezza:
>> base = 10;
>> altezza = 2;
>> area = (base * altezza )/2
area =
10
Quando le operazioni da effettuare sono pi di una come in questo caso, la possibilit di riutilizzare
lo stesso codice per pi situazioni, senza la necessit di doverlo riscrivere, si rivela di grande utilit.
Loperazione con cui diamo un valore ad una determinata variabile prende il nome di assegnazione
ed utilizza loperatore di uguaglianza (=). C da notare, tuttavia, che tale operatore non ha, nel
caso dellassegnazione, il significato di uguaglianza matematica. Esso sta a significare che alla
variabile posta a sinistra (area nellesempio precedente) viene assegnato il valore indicato a destra
((base * altezza )/2). Invertire lordine delle due espressioni non pertanto corretto e genera un
messaggio derrore da parte di MatLab.
Il diverso significato di assegnazione ed uguaglianza mostrato ancora pi chiaramente
nellesempio seguente:
17
18
Capitolo 3
Organizzazione e gestione dei dati
1. Creare un array
Nel capitolo precedente si visto come creare un array digitandone direttamente gli elementi. In
questo paragrafo prenderemo in considerazione altri metodi per creare vettori, matrici e array
multidimensionali.
0
0
0
Se volessimo creare una matrice di 5, e pi in generale una matrice di valori tutti uguali tra loro,
possiamo utilizzare il comando ones. Ad esempio:
>> matrice5 = ones(3,2) * 5
matrice5 =
5
5
5
5
5
5
Quello che abbiamo fatto moltiplicare la matrice di uno creata con ones per lo scalare 5, ottenendo
cos una matrice di 5 (per le operazioni sugli array si veda pi avanti).
10
12
14
16
18
20
3
4
4
5
10
12
14
16
18
20
Ossia dobbiamo creare un vettore contenenti 10 valori compresi tra 2 e 20. Se omettiamo di indicare
il numero di elementi, MatLab crea automaticamente un vettore di 100 elementi. Per creare una
matrice possiamo combinare due funzioni linspace:
>> matrice = [linspace(1,5,3); linspace(2,6,3)]
matrice =
1
2
3
4
5
6
20
2
6
10
3 4
7 8
11 12
2
6
10
3 4
7 8
11 12
8
21
4
8
12
Nel caso di un vettore, valgono le stesse regole viste per le matrici. Ad esempio, dato il vettore V:
V=
1
22
Elevamento a potenza
Moltiplicazione e divisione
Addizione e sottrazione
16
In genere, buona norma utilizzare sempre le parentesi tonde, anche quando non sono necessarie,
proprio per evitare errori di interpretazione.
2
7
10
3 4
7 8
11 12
>> A * 5
ans =
5 10 15 20
25 35 35 40
45 50 55 60
La stessa regola vale anche per la divisione, laddizione e la sottrazione.
Nel caso della divisione, tuttavia, a differenza delle altre tre operazioni, dobbiamo cambiare
operatore a seconda della posizione dello scalare: se lo scalare il secondo operando possiamo
continuare ad utilizzare il simbolo /, mentre quando lo scalare il primo operando dobbiamo
utilizzare loperatore ./, come nellesempio seguente:
>> 5 ./ A
ans =
5.0000
1.0000
0.5556
2.5000
0.7143
0.5000
1.6667
0.7143
0.4545
1.2500
0.6250
0.4167
24
ans =
1 4 9 16
25 36 49 64
81 100 121 144
>> 2 .^ A
ans =
2
32
512
4
64
1024
8
16
128
256
2048
4096
Nel primo caso eleviamo ogni elemento della matrice al quadrato. Nel secondo caso eleviamo 2 alla
potenza di ciascun elemento della matrice.
Se si usa loperatore ^ senza punto, loperazione equivale a moltiplicare larray per se stesso n
volte e quindi diventa un caso di operazione array array (si veda il paragrafo successivo). Per
questo motivo, per utilizzare loperatore ^ la matrice deve essere quadra.
2
4
>> B = [2 4; 6 8]
B=
2
6
4
8
>> A .* B
ans =
2
18
8
32
25
In pratica, quello che facciamo con loperazione .* moltiplicare gli elementi delle due matrici tra
di loro, ossia 1*2, 2*4, 3*6 e 4*8.
Lo stesso principio si applica anche alladdizione, alla sottrazione, alla divisione e allelevamento a
potenza. Si noti, tuttavia, che nel caso delladdizione e della sottrazione, poich le due classi di
operazioni coincidono, non si usa mai il punto davanti al simbolo delloperatore.
Per quanto riguarda la seconda classe di operazioni, valgono le regole dellalgebra lineare. Ad
esempio, nel caso della moltiplicazione tra array, le dimensioni interne devono corrispondere. In
altre parole, data la matrice M1 [m x n] e la matrice M2 [o x p], affinch loperazione tra M1 e M2
sia definita deve essere: n = o. Larray risultante avr come dimensioni [m x p]. Ad esempio:
>> M1 = [1 2 3]
M1 =
1
>> M2 = [2 4; 3 6; 4 8]
M2 =
2
3
4
4
6
8
>> M1*M2
ans =
20
40
minore
minore o uguale
>
>=
==
~=
maggiore
maggiore o uguale
uguale
diverso
Come nel caso delle operazioni matematiche, anche nel caso delle operazioni relazionali possiamo
distinguere tre situazioni:
1. Operazioni scalare scalare. Questo il caso pi semplice. Il risultato del confronto pu essere
falso (0) o vero (1) a seconda degli operandi e del tipo di relazione. Ad esempio:
>> C = 14>10
C=
1
2. Operazioni scalare array o array scalare. Il confronto viene eseguito tra lo scalare e tutti gli
elementi dellarray. Il risultato un array di 0 ed 1, come nellesempio seguente:
A=
5
6
4
7
>> C = A>5
C=
0
1
0
1
3. Operazioni array array. Vengono confrontati i singoli elementi di un array con i corrispondenti
elementi dellaltro. Il risultato un array delle stesse dimensioni dei due operandi, contenente 0 ed
1. Un esempio:
B=
8
9
3
3
>> C = A>B
C=
0
0
1
1
Unistruzione relazionale viene valutata da sinistra a destra e tutti gli operatori relazionali hanno lo
stesso livello di precedenza. consigliabile comunque racchiudere unistruzione relazionale tra
27
NOT
AND
OR
~A restituisce un array avente le stesse dimensioni di A, i cui elementi sono pari a 1 se quelli di A
sono nulli; pari a 0, altrimenti.
A&B restituisce un array delle stesse dimensioni di A e B, i cui elementi sono pari a 1 se i
corrispondenti elementi di A e B sono ENTRAMBI diversi da 0; pari a 0 se almeno uno tra i due
elementi di A e B uguale a 0.
A|B restituisce un array delle stesse dimensioni di A e B, i cui elementi sono pari a 1 se almeno uno
tra i due elementi corrispondenti di A e B diverso da 0; pari a 0 se sono ENTRAMBI uguali a 0.
La presenza di operatori relazionali e logici introduce nuovi livelli di precedenza:
Lvello di precedenza
1 (livello pi alto
2
3
4
5 (Livello pi basso)
parentesi tonde
operatori aritmetici e operatore NOT; da sinistra a destra
operatori relazionali; da sinistra a destra
AND
OR
4. Funzioni predefinite
Oltre alle classiche operazioni matematiche, relazionali e logiche possibile applicare ai dati
(scalari, vettori, matrici ed array multidimensionali) una serie di funzioni predefinite in MatLab. La
lista completa delle funzioni consultabile sullhelp di MatLab.
Per utilizzare una funzione basta scriverne il nome facendolo seguire da delle parentesi tonde,
allinterno della quale vanno inseriti i parametri della funzione. Ad esempio:
V=
1
>> M = mean(V)
M=
3.5000
Tale codice calcola la media degli elementi del vettore V e pone tale risultato allinterno della
variabile M. Se V una matrice, il risultato della funzione un vettore riga i cui elementi
corrispondono alla media delle corrispondenti colonne di V, come nellesempio seguente:
V=
1
28
>> M = mean(V)
M=
2.5000
3.5000
4.5000
min (X)
sort (X)
find (X)
29
Capitolo 4
Operazioni di Input/Output
Matlab dispone di vari strumenti che permettono di ottenere linput dallutente e di visualizzare
loutput.
Il valore della variabile Scelta dipende dalla scelta dellutente: 1 se viene scelta lopzione 1
(Triangolo), 2 se viene scelta lopzione 2 (Quadrato) e via dicendo.
30
2
4
Visualizzazione
4 cifre decimali
16 cifre decimali
4 cifre decimali pi lesponente
15 cifre decimali pi lesponente
2 cifre decimali
positivo, negativo o zero
>> C =2.5
C=
2.50000000000000
Lordine di questi comandi non rilevante purch seguano il comando plot e siano su ununica riga,
separati dalloperatore virgola (,). Di seguito viene mostrato un esempio
>> x = [0:0.1:52];
y = 0.4*sqrt(1.8*x);
plot (x,y), xlabel ('Distanza (km)'), ylabel ('Altezza (km)'), ...
title ('Altezza di un razzo in funzione della distanza orizzontale'), grid on, axis ([0 52 0 5])
32
possibile stabilire dei limiti di visualizzazione alla funzione, utilizzando il comando fplot. La
sintassi generale di tale comando : fplot (stringa, [xmax xmin]), dove stringa il testo che
descrive la funzione da rappresentare e [xmin xmax] lintervallo della varibile x che si vuole
visualizzare.
Per esempio, potremmo voler visualizzare solo una parte della funzione precedente:
>> x = [0:0.1:52];
fplot('0.4*sqrt(1.8*x)',[0 10]), xlabel ('Distanza (km)'), ylabel ('Altezza (km)'), ...
title ('Altezza di un razzo in funzione della distanza orizzontale'), grid on, axis ([0 52 0 5])
MatLab produce ora il seguente grafico:
Per generare pi digrammi nella stessa figura possibile utilizzare il comando subplot. La sua
sintassi generale : subplot (m,n,p), dove m e n rappresentano il numero di pannelli e p
33
rappresenta il pannello in cui verr posto il grafico successivo. Il codice seguente crea due grafici
affiancati che visualizzano due diverse funzioni:
>> x = [1:10];
>> y1 = 2*x;
>> y2 = x.^2;
>> subplot(1,2,1); plot(y1)
>> subplot(1,2,2); plot(y2)
Il risultato il seguente:
possibile anche visualizzare le due curve nello stesso grafico. Ci sono due modi principali per fare
ci. Il primo quello di utilizzare il comando hold on (hold off serve a disabilitare tale opzione).
Ad esempio:
>> hold on
>> plot(y1)
>> plot(y2)
produce il seguente risultato:
34
35
Capitolo 5
Programmare in MatLab
1. I file in Matlab
Matlab utilizza tre tipi di file: i MAT
- file, i file dati e gli M-file,
- I MAT-file hanno estensione .mat e permettono di salvare i nomi ed i valori delle variabili
generate durante una sessione di lavoro. Sono file binari e pertanto possono essere letti soltanto dal
software che li ha creati (ossia MatLab).
- I file dati sono file ASCII (American Standard Code for Information Interchange), eventualmnete
creati anche da altri programmi, che contengono dati che possiamo importare in MatLab.
- Infine, gli M-file hanno estensione .m e sono utilizzati per scrivere sequenze di comandi (script e
funzioni). Essendo file ASCII, gli M-file possono essere scritti utilizzando qualsiasi editor di testi.
Matlab, tuttavia, prevede un editor molto utile che include funzioni di correzione e di debug.
Per quanto riguarda il primo tipo di file, in esso possiamo salvare le variabili create nellambiente di
lavoro, mediante il comando save. Ad esempio:
>> save prova.mat
salva tutte le variabili in memoria nel file prova.mat nella directory di lavoro.
Per caricare successivamente le variabili si usa il comando load:
>> load prova.mat
Se si vogliono salvare soltanto alcune variabili (per esempio A e B) basta porre il loro nome dopo il
nome del file. Ad esempio:
>> save prova.mat A B
Oltre a file contenenti variabili salvate mediante il comando save, possibile, come si anticipato
sopra, importare dati da qualunque file di testo. Per caricare tali dati basta indicare il nome
completo del file, compresa lestensione. Ad esempio:
>> load prova.txt
I dati saranno caricati in una variabile che ha lo stesso nome del file (senza estensione).
Si possono importare dati anche direttamente da una cartella Excel, utilizzando il comando xlsread.
Ad esempio:
>> A = xlsread (prova.xls)
36
Se non viene specificato nessun delimitatore, dlmwrite utilizza la virgola come delimitatore di
default.
2. I file script
Fino ad ora si utilizzato Matlab in modalit interattiva, ossia digitando le istruzioni direttamente
nella finestra dei comandi. Questa modalit, tuttavia, utile solo in casi limitati, quando i problemi
da risolvere sono molto semplici.
Nelle applicazioni pratiche molto pi conveniente scrivere e salvare i propri programmi
contenenti i comandi di Matlab in un file tipo M (M-file). Eseguire un M-file corrisponde a digitare
in sequenza tutti i comandi in esso contenuti nella finestra dei comandi. Per eseguire un M-file basta
digitarne il nome nella Command Window.
In altre parole, gli M-file sono semplici file di testo che contengono sequenze di comandi che
lutente intende far eseguire a Matlab. Esistono due categorie di M-file: i file script ed i file
funzione.
In questo paragrafo ci occuperemo dei file script. La propriet principale di tali file che i valori
delle variabili create durante la loro esecuzione sono caricate nella sessione di lavoro e pertanto
rimangono in memoria fino a quando non vengono esplicitamente cancellate attraverso un comando
clear. Tali variabili sono perci definite globali.
Per creare un nuovo file script sufficiente cliccare sulla prima icona a sinistra della barra dei
comandi o selezionando il menu File/New/M-file. Comparir una nuova finestra di editing
dellutlity Editor\Debugger di Matlab, il cui utilizzo molto simile a quello di qualsiasi editor di
testi (Figura 13).
Funzione
il codice viene eseguito un passaggio alla volta
il controllo viene passato alla prima riga eseguibile della funzione chiamata
(utenti esperti)
il controllo ritorna alla funzione chiamante (utenti esperti)
permette di eseguire interamente il codice del M-file fino al primo breakpoint
impostato
imposta un breakpoint temporaneo in corrispondenza della riga in cui si trova
il cursore
permette di uscire dalla modalit di debugging e tornare alla modalit di
editing normale
3. I file funzione
I file funzioni sono molto simili agli M-file, ma a differenza degli script tutte le variabili in un file
funzione sono locali: i loro valori sono cio disponibili solo allinterno della funzione.
Un file funzione deve necessariamente iniziare con una riga di definizione della funzione, che
39
E utile scrivere una riga di commento, contenente le parole chiave della funzione, immediatamente
dopo la riga di definizione della variabile per facilitare le ricerche con il comando lookfor.
Per chiamare una funzione sufficiente digitarne il nome seguito dagli argomenti racchiusi tra
parentesi tonde. Ad esempio, supponiamo di avere creato una funzione che calcola larea di un
triangolo. La funzione avr la seguente forma:
function Area = CalcolaArea (Base, Altezza)
Se vogliamo calcolare larea di un triangolo avente come base 5 e come altezza 3, possiamo
scrivere nella Command Window:
>> Area = CalcolaArea (5, 3)
Area =
7.5000
Per esempio, se vogliamo calcolare la radice quadrata di x soltanto per x maggiori o uguali a 9,
possiamo scrivere:
if (x >= 9)
y = sqrt (x)
end
Per convenzione, le istruzioni interne ad unistruzione condizionale vengono rientrate
(indentazione) per semplificare la lettura dei programmi.
Lespressione logica pu anche essere una combinazione di istruzioni. fondamentale comprendere
il meccanismo di funzionamento della verifica dellespressione. Il risultato vero (e pertanto
vengono eseguite le istruzioni) se tutti gli elementi risultanti dal calcolo sono pari a 1. Si consideri il
seguente esempio:
x = [3, -2, 0, 4, 6, 7]
if x<0
disp (Almeno un elemento del vettore minore di zero)
end
In questo caso il comando disp non verr mai eseguito. Infatti x < 0 restituisce larray [0 1 0 0 0
0] i cui elementi non sono tutti pari a 1; pertanto, le istruzioni precedenti lend non vengono
eseguite.
Istruzioni condizionali annidate
possibile annidare diverse istruzioni condizionali nel seguente modo:
if (EspressioneLogica1)
istruzioni1
if (EspressioneLogica2)
Istruzioni2
end
end
Nel caso di istruzioni condizionali annidate lindentazione risulta particolarmente utile.
Listruzione else
Listruzione else si utilizza quando si intende eseguire un determinato insieme di istruzioni nel caso
lespressione di controllo risulti vera, ed un altro insieme di istruzioni nel caso risulti falsa. La sua
sintassi :
if (EspressioneLogica)
istruzioni1
else
istruzioni2
end
Lstruzione elseif
41
Listruzione elseif viene utilizzata quando, nel caso lespressione logica di controllo sia falsa, non si
voglia sempre eseguire il codice alternativo (come nel caso dellelse), ma solo in certe condizioni.
La sua sintassi la seguente:
if (spressioneLogica1)
istruzioni1
elseif (EspressioneLogica2)
istruzioni2
end
Se la prima espressione verificata vengono eseguite le istruzioni1, altrimenti se essa falsa e
contemporaneamente la seconda espressione vera vengono eseguite le istruzioni2.
Listruzione switch
Listruzione switch una struttura alternativa alle istruzioni if, else ed elseif. Essa utile quando il
processo decisionale prevede numerose alternative. La sua sintassi la seguente:
swicth (variabile)
case valore1
istruzioni1
case valore2
istruzioni2
otherwise
istruzioniOtherwise
end
Matlab confronta il contenuto di variabile (che pu essere uno scalare o una stringa) con il valore
che segue il case: se i due elementi sono uguali vengono eseguite le istruzioni corrispondenti. Se
nessun valore corrisponde al contenuto di variabile vengono eseguite le istruzioniOtherwise. La
presenza dellistruzione otherwise facoltativa.
passaggio del ciclo, Matlab assegna il primo valore di valori a variabile, esegue le istruzioni,
assegna il secondo valore, riesegue le istruzioni e cos via fino allultimo valore. Lesempio
seguente:
x=0;
for i = 1:10
x=x+1;
end
incrementa il valore di x da 1 fino a 10. Lespressione 1:10 genera un vettore linearmente
intervallato, con passo unitario, da 1 a 10. Quando Matlab entra nel ciclo per la prima volta, assegna
alla variabile del ciclo (i) il valore 1, al secondo passaggio il valore 2 e cos via. Lultimo
passaggio coincide con lultimo valore del range di valori. Terminato il ciclo vengono eseguite le
istruzioni successive allend.
Il ciclo while
A differenza del ciclo for, il ciclo while si utilizza quando non si conosce in anticipo il numero di
passaggi da eseguire. La sua sintassi :
while (EspressioneLogica)
istruzioni
end
Prima di ogni passaggio, Matlab verifica lespressione logica: se vera entra nel ciclo, esegue le
istruzioni fino allend e torna a verificare la condizione; se ancora vera esegue nuovamente le
istruzioni e cos via. Quando Matlab verifica che la condizione diventata falsa il ciclo termina e
vengono eseguite le istruzioni successive allend.
possibile ad esempio creare una versione dellesempio precedente utilizzando listruzione while al
posto dellistruzione for.
x=0;
while (x<10)
x = x+1;
end
Quando Matlab entra nel ciclo la prima volta, verifica se x diverso da 10; poich x uguale a 0, la
condizione vera e vengono eseguite le istruzioni. Quando Matlab verifica che la condizione
diventata falsa, x=10 nel nostro esempio, esce automaticamente dal ciclo.
Si noti che, affinch il ciclo while venga correttamente implementato necessario accertarsi che il
contenuto dellespressione logica venga aggiornato durante lesecuzione delle istruzioni. Se ci non
avviene, infatti, Matlab non uscir mai dal ciclo, generando un loop infinito. Nellesempio
precedente, ci assicurato dallistruzione che modifica il valore della variabile contenuta nella
condizione, ossia x stesso.
43
Esercizi
1. Avviare e chiudere una sessione di lavoro. Dati x=10 e y=3, utilizzare Matlab per effettuare i
seguenti calcoli:
1)
2)
3)
4)
5)
6)
7)
8)
9)
u=x+y
v = xy
w = x/y
z = sin x
r = 8 sin x
s = 5 sin (2y)
p=xy
k = xy/x
f = (sin(x + y)
x
10) g =
5 y
44
0
2
3
0
6
0
-1
4
-3
2
-2
1
1. si valuti A(: , 2)
2. si valuti le media della seconda colonna e della terza riga
3. si generi la matrice composta dagli elementi appartenenti ala seconda e quarta riga ed alla
terza e quarta colonna
4. si generi la matrice composta dagli elementi appartenenti alla prima e terza riga ed alla
seconda e quarta colonna
11. Data la matrice:
A=
1
4
7
2
5
8
3
6
9
si estragga la sottomatrice di A composta dagli elementi Aij, tali che i=2,3 e j=2,3.
12. Tabellare la funzione log(x) nellintervallo [1,5] con passo 0.1. (Con il termine tabellare si
intende creare una tabella, tale che la prima colonna rappresenti la variabile x e la seconda la
variabile y).
13. Tabellare la funzione: y=e3x sin 5 x nellintervallo [1,10] con passo 1 (Il
con pi).
in Matlab si indica
14. Creare un array x con 8 valori compresi tra 2 e 16. Creare una matrice A tale che:
1. la prima riga contenga i valori 3x
2. la seconda riga contenga i valori (3x)2
3. la terza riga contenga i valori x-8
4. Scambiare la prima e la terza riga di A.
Creare la matrice C tale che:
1. la prima riga corrisponda alla seconda colonna di A
2. la seconda riga corrisponda alla terza colonna di A
3. la terza riga corrisponda alla prima colonna di A
15. Date le seguenti matrici:
A=
-7 16
4 9
45
B=
6 -5
12 -2
C=
-3 -9
6 2
Usare Matlab per:
1. Calcolare A+B+C
2. Calcolare A-B+C
3. Verificare la propriet associativa:
(A+B)+C=A+(B+C)
4. Calcolare il prodotto elemento-per-elemento di A per B
5. Elevare al cubo gli elementi di B
6. Elevare 3 alla prima riga di C
16. La seguente tabella riporta il consumo medio, i km percorsi e lindice di affidabilit di 5 diverse
automobili.
1
2
3
4
5
Consumo km/l 11,2
8,8
9,1
12
16,4
Km percorsi
240
550
302
667
980
Affidabilit
0.921
0.454
0.980
0.777
0.602
Usare Matlab per:
1. Calcolare i litri di benzina consumati da ogni automobile
2. Calcolare il consumo medio delle 5 automobili prese in esame
3. Calcolare la percorrenza media delle 5 automobili prese in esame
4. Usare le funzioni corrette per determinare lauto pi affidabile e quella che consuma di
meno
18. Date le seguenti matrici:
A=
12 34 4
77 21 1
3 5 9
B=
6 -5
12 -2
3 7
Calcolare:
1. il prodotto A*B
2. la somma di tutti gli elementi di A*B
3. il prodotto scalare tra la seconda colonna di A e la prima riga di B
46
4. la media del prodotto scalare tra la prima colonna di A e di B, ed il prodotto scalare della
seconda colonna di A e di B
19. Data la matrice:
A=
3
-5
6
15
7
9
13
5
-4
10
8
4
12
2
11
1
1.
2.
3.
4.
58
42
-19
-35
-4
80
9
44
3
2
55
1
4
4
9
2
100
7
42
B= ln (A)
1. Calcolare la somma degli elementi della seconda riga di B
2. Calcolare il prodotto scalare tra la seconda colonna di B e la prima colonna di A
3. Calcolare il valore massimo del vettore risultante dalla moltiplicazione elemento-perelemento dei primi tre elementi della seconda colonna di A e la prima riga di B
4. Calcolare la somma degli elementi della terza riga di A dopo averli divisi elemento-perelemento per i primi tre elementi della terza colonna di B
22. Creare un array tridimensionale D le cui tre pagine siano le seguenti matrici:
A=
3
-2
1
6
8
5
7
9
10
47
B=
6
7
-8
9
5
2
-4
3
1
-7
10
3
-5
6
-9
2
1
8
C=
y = [-5 -2 0 3 4 10]
Calcolare a mano le seguenti operazioni e valutarle successivamente con Matlab:
1.
2.
3.
4.
5.
6.
7.
z=y<~x
z=x&b
z = ~ (x & b)
z=x|b
z=x|~b
z = xor (x, y)
z = xor (~ x+y, y)
32. Un investitore ha 1000 azioni il primo giorno e intende comprare 100 azioni ogni giorno che il
prezzo scende sotto le 200 lire e venderne 100 quando il prezzo sale sopra le 210 lire. Usare Matlab
per calcolare:
1. la spesa totale per acquistare le azioni
2. il guadagno totale dovuto alla vendita delle azioni
3. il numero totale di azioni dopo 10 e 15 giorni
34. Utilizzando opportune istruzioni condizionali annidate, scrivere il codice per calcolare:
y = ln x per x > 0
y = 5x per x 0;
z = 4y per y 3
z = 2y per 1 y < 3
z = 0 per y < 1
z = 7x per x 0.
35. Utilizzare Matlab per calcolare quanto tempo occorre per accumulare un miliardo di lire in un
conto corrente con 10 milioni iniziali e tenendo conto che vengono depositati 10 milioni alla fine di
ogni anno e che la banca offre un tasso di interesse annuo del 5%.
36. Date le seguenti matrici:
A=
3
6
7
-2
8
9
1
5
10
6
7
-8
9
5
2
-4
3
1
B=
49
7
9
13
5
-4
10
8
4
12
2
11
1
50
Indice
Capitolo 1 Panoramica dellambiente MatLab......................................................... 2
1. Che cos MatLab ....................................................................................................................2
2. Lambiente di lavoro ................................................................................................................2
Esercizi..................................................................................................................... 44
Indice........................................................................................................................ 51
51