Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni131 pagine

MATLAB

slide matlab

Caricato da

andrea aaa
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
1 visualizzazioni131 pagine

MATLAB

slide matlab

Caricato da

andrea aaa
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Introduzione a

MATLAB ®
Università degli
Studi di UDINE

MECCANICA APPLICATA
ALLE MACCHINE
MAT(rix) LAB(oratory)
Originariamente MATLAB è stato sviluppato come
interattivo di facile uso, per il calcolo
ambiente interattivo,
matriciale tecnico e scientifico ad alto livello.
Nel tempo MATLAB è stato completato con l’aggiunta
di funzioni che permettono complesse simulazioni ed
analisi numeriche, e l’interfacciamento con prototipi.
Attualmente MATLAB è utilizzato anche come:
1) calcolatrice elettronica evoluta;
2) ambiente grafico bi- e tri-dimensionale;
3) linguaggio di programmazione.

2
MATLAB
Introduzione
MATLAB è un linguaggio di programmazione
ad alto rendimento per la computazione
tecnica e scientifica, basato sull’utilizzo di
dati di tipo matriciale.

E' strutturato per permettere la soluzione di


problemi nei seguenti ambiti:
• Matematica e calcolo numerico
• Sviluppo di procedure
• Modellistica, simulazione e prototyping
• Analisi di dati, esplorazione e visualizzazione
• Sviluppo di applicazioni
3
MATLAB
Introduzione
L'elemento di base in MATLAB è l’array:
dato di tipo matriciale (scalare, vettore,
matrice a due o più dimensioni)

È noto che le operazioni eseguite sulle matrici si


applicano anche agli scalari ed ai vettori dal
momento che anche uno scalare si può vedere
come una particolare matrice di dimensioni 1×1
e che un vettore è una particolare matrice di
dimensioni n×1 (se è un vettore-colonna) o 1×n
(se è un vettore-riga).
4
MATLAB
Introduzione
L’uso delle matrici come elemento base,
permette di risolvere i problemi di calcolo
tecnici ed ingegneristici esprimibili in forma
vettoriale e matriciale, attraverso algoritmi
molto più semplici e snelli rispetto a quelli che
sarebbe necessario sviluppare volendo
utilizzare tradizionali linguaggi di
programmazione scalare non interattiva quali
il Basic, il Pascal, il C/C++ o il Fortran.

5
MATLAB
C/Matlab
#include <stdio.h>
#define n 2
#define m 3
#define p 4
int i = 0; int j = 0; int k = 0;
double a[n][m]={ {1,2,3}, {4,5,6} };
double b[m][p]={ {1,2,3,4}, {5,6,7,8},
{9,1,2,3} }; » a=[1 2 3; 4 5 6];
double c[n][p]={ {0,0,0,0}, {0,0,0,0} }; » b=[1 2 3 4;5 6 7 8;9 1 2 3];
void main()
{ » c=a*b
for(i = 0; i < n; i ++)
for( j = 0; j < p; j ++)
for( k = 0; k < m; k ++ )
c[i][j] += a[i][k] * b[k][j];
for(i = 0; i < n; i ++)
{
for( j = 0; j < p; j ++)
printf("%.2lf ",c[i][j]);
printf("\n");
}
}

6
MATLAB
Piattaforme
MATLAB funziona su diverse piattaforme:
• Personal Computer con S.O. Windows
• Sistemi con S.O. Unix o Linux,
• Computer Macintosh
L’interazione dell’utente con MATLAB è la
medesima, indifferentemente dall’hardware
e dal sistema operativo della piattaforma.

7
MATLAB
Toolbox
MATLAB è integrato da una famiglia di soluzioni
application-specific denominate toolbox.

I toolbox sono collezioni complete di funzioni


MATLAB (M-file: file con estensione .m) che
estendono le funzionalità dell'ambiente di base
per risolvere particolari categorie di problemi.

Per verificare i toolbox installati, e la loro


versione si può digitare ver alla riga di comando
8
MATLAB
Toolbox
MATLAB Version 6.5 (R13)
Simulink Version 5.0 (R13)
Control System Toolbox Version 5.2 (R13)
Filter Design Toolbox Version 2.2 (R13)
Financial Toolbox Version 2.2.1 (R13)
Image Processing Toolbox Version 3.2 (R13)
Nonlinear Control Design Blockset Version 1.1.6 (R13)
Real-Time Windows Target Version 2.2 (R13)
Real-Time Workshop Version 5.0 (R13)
Signal Processing Toolbox Version 6.0 (R13)
....
Symbolic Math Toolbox Version 2.1.3 (R13)
Virtual Reality Toolbox Version 3.0 (R13)
xPC Target Version 2.0 (R13)

9
MATLAB
Comandi d’avvio
z La linea di comando di MATLAB è indicata dal
simbolo >>, che è il prompt dal quale possono
essere richiamati tutti i comandi da eseguire in
maniera interattiva.
z I comandi possono essere dati da tastiera o
letti da un file. Il comando viene interpretato
nel momento in cui viene premuto l’Invio.
z Per terminare la sessione di lavoro basta
digitare il comando exit oppure quit

10
MATLAB
Layout standard del
desktop di MATLAB
Finestra di comando: si possono
Prompt digitare comandi diretti ed ottenere
le risposte, nella stessa finestra,
premendo il tasto di invio.
Possibile uso come calcolatrice
Cartella di lavoro

Help in linea (helpdesk)

Tutte le variabili presenti in memoria sono racchiuse


in una zona della memoria che prende il nome
di spazio di lavoro (workspace)

Browser file contenuti


nella cartella di lavoro

Elenco comandi utilizzati


11
MATLAB
Help
MATLAB è ricco di documentazione “in linea”. Per cercare
informazioni, alla riga di comando di può digitare:
• help: per conoscere le modalità di impiego e la corretta
sintassi di un’istruzione.
Es. help plot restituisce le informazioni per il corretto utilizzo
dell’istruzione plot (utilizzata per tracciare grafici
bidimensionali)
• helpdesk: per accedere all’archivio delle istruzioni di
MATLAB, della loro funzione e della loro sintassi.
Vi si può accedere anche facendo click sul bottone ? sulla
barra degli strumenti
• lookfor: per sapere cosa contiene MATLAB riguardo un
nome, un comando, un’istruzione, una funzione o altro.
Si digita lookfor seguito dal nome. Es. lookfor excel
Esiste anche una completa collana di manuali in formato pdf
12
MATLAB
Le variabili
9 In MATLAB non è necessario dichiarare il tipo e la dimensione
delle variabili.

9 I nomi delle variabili possono essere costituiti da lettere e cifre. Il


primo carattere deve essere una lettera.

9 I nomi delle variabili possono essere lunghi al massimo 63


caratteri. Nel caso siano più lunghi essi vengono
automaticamente troncati.

9 MATLAB distingue tra maiuscole e minuscole (case sensitive).


Questa caratteristica non è presente nella maggior parte dei
linguaggi di programmazione.
- Es. si può utilizzare la variabile t per indicare un istante di tempo e T
per indicare un periodo di tempo: molto comodo.

13
MATLAB
Le variabili
9 L’assegnazione di uno scalare viene effettuata ponendo il nome
della variabile uguale al valore prescelto. Es. t=25

9 Ciascuna frase termina con il comando invio (Enter), dopo il


quale MATLAB visualizza sullo schermo la variabile ed il suo
contenuto.

9 Se il nome della variabile viene omesso, MATLAB crea


automaticamente la variabile ans (answer)

9 Nel caso si finisca il comando con “ ; ” l’output viene nascosto.

9 Tutte le variabili sono memorizzate in una zona di memoria


chiamata spazio di lavoro di MATLAB (workspace)

14
MATLAB
Le variabili
Alcune variabili sono predefinite, ad esempio
pi (3.141592…..)
i, j (unità immaginaria )
eps (precisione di macchina)
realmax (massimo numero di macchina positivo)
realmin (minimo numero di macchina positivo)
Inf (Infinito: numero maggiore di realmax)
NaN (Not a Number: risultato di operazioni non
definite, tipicamente di 0/0)

Fatta eccezione per le variabili i e j, usate talvolta come


indici interi, conviene non modificare il valore di queste
variabili.
15
MATLAB
Comandi per la gestione delle
variabili
z nome_variabile
restituisce il valore della variabile nome_variabile contenuta
nello spazio di lavoro.
z who
elenca tutte le variabili definite durante la sessione di
lavoro, e presenti nello spazio di lavoro.
z whos
rispetto al comando who fornisce un maggior numero di
informazioni: dimensione, tipo, memoria allocata, etc..
z clear nome_variabile
cancella la variabile chiamata nome_variabile.
z clear
cancella tutte le variabili.
16
MATLAB
Comandi per la gestione delle
variabili
z save
salva il contenuto dello spazio di lavoro (tutte le variabili ed i loro valori)
in un archivio chiamato automaticamente [Link].
z save nome_archivio
salva il contenuto dello spazio di lavoro in un archivio di nome
nome_archivio.mat.
z save nome_archivio var1 var2
salva le variabili var1 e var2 ed i loro valori in un archivio di nome
nome_archivio.mat.
z load
carica nello spazio di lavoro tutte le variabili precedentemente salvate
nell’archivio [Link].
z load nome_archivio
carica nello spazio di lavoro le variabili dell’archivio nome_archivio.mat.
z load nome_archivio var1
carica nello spazio di lavoro la variabile var1 dell’archivio
nome_archivio.mat.
17
MATLAB
Immissione di matrici
Si possono definire matrici in diversi modi

1. introducendo un elenco esplicito di elementi


2. utilizzando le funzioni generatrici messe a
disposizione da MATLAB
3. caricando matrici da file di dati esterni
4. sviluppando proprie funzioni generatrici
(create dall’utente in file esterni)

18
MATLAB
Immissione di matrici
Convenzioni di base:

9 Separare gli elementi di una riga con spazi vuoti o virgole (le
virgole sono, di fatto, superflue)

9 Usare un punto e virgola ; per indicare la fine di ciascuna riga. In


alternativa, gli elementi di righe diverse possono essere scritti su
righe diverse senza dover utilizzare ;.

9 Racchiudere l'elenco intero di elementi tra parentesi quadrate [ ].

9 È buona norma usare lettere maiuscole per le matrici e


lettere minuscole per vettori e numeri in quanto questa è la
tradizione nella notazione algebrica.

19
MATLAB
Immissione di matrici
Per assegnare ad A la matrice di Dürer basta digitare:

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

Dando il comando di invio MATLAB mostra a video la matrice


digitata,

A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

20
MATLAB
Immissione di vettori
Poiché un vettore è una particolare matrice, l’assegnazione
dei vettori può essere effettuata seguendo le medesime
modalità già illustrate.

Per assegnare un vettore riga o un vettore colonna è


possibile scrivere:

z Vettore riga: v = [1 2 3]

z Vettore colonna: v = [1 2 3]’


ovvero
v = [1; 2; 3]
21
MATLAB
Immissione di vettori
Se si vuole creare un vettore con un numero prefissato di
punti equispaziati all’interno di un intervallo si può usare la
funzione generatrice:

linspace(inizio,fine,numero di punti)

z inizio e fine sono gli estremi dell’intervallo


z numero di punti è uguale a 100 se è omesso.

Esempio:
>> a = linspace(1,5,5)
a =
1 2 3 4 5
22
MATLAB
Immissione di matrici
¾ Nel caso in cui l’espressione digitata contenga un numero troppo grande di
caratteri per restare su di un’unica riga di comando è possibile utilizzare un
carattere di continuazione dato da tre punti consecutivi …
Es.1
>> A = [16 3 ...
2 13; 5 10 11 ...

Es.2
>> 1 + 1/4 + ...
1/8
ans = 1.375

¾ Terminato l’inserimento di una matrice, essa è registrata automaticamente nel


workspace di MATLAB.

¾ In seguito si potrà indicarla semplicemente con il suo nome (Es. A), e su di


essa sarà possibile effettuare operazioni di somma, trasposizione, inversione,
etc .

23
MATLAB
Esempio: funzione sum()
Digitando
sum(A)
MATLAB risponde con
ans =
34 34 34 34
La funzione sum() produce un vettore riga che contiene
le somme delle colonne di una matrice (Es. A);

Non essendo specificata una variabile di output, MATLAB


usa la variabile ans per immagazzinare i risultati. In
alternativa si potrebbe scrivere:
v=sum(A);
24
MATLAB
Esempio: trasposizione
L' operazione di trasposizione è denotata da un simbolo
di apostrofo, '. Ed esempio, se si digita

A'

alla riga di comando, si determina il seguente risultato:

ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1

25
MATLAB
Esempio di concatenazione di
comandi
sum(A')'

produce un vettore colonna che contiene le somme


delle righe

ans =
34
34
34
34

26
MATLAB
Esempio: funzione diag()
Se si desidera effettuare la somma degli elementi della diagonale
principale è possibile ultilizzare la funzione diag() che estrae gli
elementi della diagonale principale da una matrice. Ad esempio,
diag(A)
produce:
ans =
16
10
7
1

Quindi,
sum(diag(A))
produce:
ans =
34
27
MATLAB
Esempio: funzione size()
Il comando size() fornisce la dimensione di una matrice:

>> vet = [1 2 3 4];


>> size(vet)
ans =
1 4

È possibile memorizzare in un vettore il risultato


restituito dalla funzione size():

>> [n,m] = size (b)

28
MATLAB
Immissione di matrici
z Si possono anche creare vettori o matrici di stringhe.
z Stringa può essere, ad esempio, un vettore riga (di stringhe):

>> mat_str=['lunedi'' ','martedi'' ','mercoledi'' ']


mat_str =
lunedi' martedi' mercoledi'

oppure un vettore colonna;

>> mat_str=['abc ';'abcd';' bc ']


mat_str =
abc
abcd
bc
nel secondo caso le stringhe devono avere tutte la stessa dimensione (ciò
può essere ottenuto inserendo, ad esempio, un numero opportuno di spazi).
z All’interno di una stringa gli apostrofi e gli accenti si ottengono scrivendo ''; ciò
per evitare conflitti con il segnale di inizio e fine della stringa.

29
MATLAB
Accesso agli elementi di una
matrice
L'elemento in riga i e colonna j di A è denotato con A(i,j).
Es:
A(4,2)
indica l’elemento di valore 15

È anche possibile richiamare gli elementi di una matrice


utilizzando un singolo indice, A(k).

Questo metodo è naturale quando si considerino vettori riga e


vettori colonna, ma si può anche applicare a matrici
bidimensionali. In questo caso la matrice è considerata come
un vettore colonna, formato dalle colonne della matrice
originale disposte secondo un ordine progressivo.
Es:
A(4,2) e A(8) indicano il medesimo elemento
30
MATLAB
Accesso agli elementi di una
matrice
Se si tenta di usare il valore di un elemento della matrice al di fuori di
essa, si commette un errore:

t = A(4,5)
Index exceeds matrix dimensions

D'altra parte, se si immagazzina un nuovo valore in un elemento della


matrice, c'è un aumento dell'ordine per accomodare il nuovo elemento:

X = A;
X(4,5) = 17
X =
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17
31
MATLAB
L'operatore : (due punti)
L’operatore due punti,:, è uno dei più importanti operatori di MATLAB.

Si trova in molte forme diverse come sostituto di un ciclo for .

Può essere utilizzato con la seguente sintassi:

NOMEVETTORE = VALOREINIZIALE : INCREMENTO : VALOREFINALE

NOMEVETTORE = (VALOREINIZIALE : INCREMENTO : VALOREFINALE)

NOMEVETTORE = [VALOREINIZIALE : INCREMENTO : VALOREFINALE]

32
MATLAB
L'operatore : (due punti)
Esempi

L'espressione:
1:10
è un vettore riga che contiene i numeri interi da 1 a 10
1 2 3 4 5 6 7 8 9 10

Per ottenere una sequenza, si deve specificare un incremento. Per


esempio:
100:-7:50
è
100 93 86 79 72 65 58 51
cioè una sequenza di numeri da 100 a 50 con passo uguale -7;

0:pi/4:pi
è
0 0.7854 1.5708 2.3562 3.1416
33
MATLAB
L'operatore : (due punti)
L’operatore due punti può essere utilizzato per assegnare o
richiamare porzioni di una matrice.

Ad esempio

A(1:k,j)

richiama i primi k elementi della colonna j di A, mentre:

sum(A(1:4,4))

calcola la somma dei primi quattro elementi della quarta colonna.

34
MATLAB
L'operatore : (due punti) e la
keyword end
L’operatore due punti può essere anche utilizzato per
assegnare tutti gli elementi in una riga o colonna di
una matrice.

La keyword end assegna l'ultimo elemento di riga o


colonna.
Così

sum(A(:,end))

calcola la somma di tutti gli elementi sull’ultima


colonna di A.
35
MATLAB
Funzioni generatrici di matrici
particolari
MATLAB permette di creare direttamente alcuni particolari tipi di matrici

eye
genera la matrice identità (quadrata) di ordine assegnato
>> eye(4)

zeros
genera una matrice con tutti elementi uguali a zero
>> zeros(4,2)

ones
genera una matrice con tutti elementi uguali a 1
>> ones(2,3)

rand
genera una matrice di numeri casuali tra 0 e 1
>> rand(3,4)
36
MATLAB
Esercizio
Inserire la matrice A
123456
111111
202020
654321

Assegnare:
• alla variabile a l’elemento (3,4)
• alla varibile r la terza riga
• alla variabile c la seconda colonna
• alla variabile sm la sottomatrice segnata.
37
MATLAB
Soluzione
>> A=[1 2 3 4 5 6; 1 1 1 1 1 1;…
2 0 2 0 2 0;6 5 4 3 2 1]
oppure:
A=[1:6;ones(1,6);2 0 2 0 2 0;6:-1:1]
>> a=A(3,4)
>> r=A(3, :)
>> c=A(:,2)
>> sm=A(:,2:3)

38
MATLAB
Operazioni aritmetiche
Le operazioni aritmetiche basilari definite in
MATLAB sono le seguenti :
1) addizione +
2) sottrazione –
3) moltiplicazione *
4) divisione /
5) elevamento a potenza ^

Tali operazioni sono definite per le matrici e, di


conseguenza, anche per i vettori e gli scalari

39
MATLAB
Esempi addizione
A + A'
ans =
32 8 11 17
8 20 17 23 Vengono sommati gli
11 17 14 26 elementi omonimi
17 23 26 2

A + 2
ans =
18 5 4 15
7 12 13 10 Lo scalare viene sommato a
11 8 9 14 tutti gli elementi
6 17 16 3

Le stesse regole valgono per la sottrazione

40
MATLAB
Moltiplicazione
Il simbolo della moltiplicazione, *, denota la moltiplicazione fra matrici (o
vettori) come prodotto tra righe e colonne.
A'*A
ans =
378 212 206 360
212 370 368 206
206 368 370 212
360 206 212 378

N.B. si possono moltiplicare due matrici se il numero di colonne della


prima è uguale al numero di righe della seconda

La moltiplicazione di una matrice per uno scalare produce una matrice i


cui elementi sono quelli della matrice di partenza moltiplicati per lo scalare

41
MATLAB
Operazioni sui singoli elementi
delle matrici: operatori .*, ./, .^
Le operazioni aritmetiche * / ^ precedute dal carattere punto . agiscono
elemento per elemento. Queste operazioni non hanno analogo nel calcolo
matriciale, ma sono molto utili.

» A = [ 1 2 ; 3 4];
» B = [ 1 2 ; -1 1];
» C = A ./ B
C =
1 1
-3 4
» C = A.*B
C =
1 4
-3 4
» C = A.^ B
C =
1.0000 4.0000
0.3333 4.0000
42
MATLAB
Esempio operatore .*
A.*A
ans =
256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1

N.B. A .* A ≠ A * A = A ^ 2

Per poter eseguire questo tipo di operazioni (.*, ./, .^) gli operandi
devono avere le stesse dimensioni.

L’unica eccezione a questa regola è data dal caso in cui uno dei due
operandi sia uno scalare. In questo caso è infatti possibile eseguire una
qualunque operazione, puntuale e non, in quanto lo scalare viene trattato
come una variabile dello stesso tipo e delle stesse dimensioni dell’altro
operando, avente tutte le componenti costanti.
43
MATLAB
Concatenazione
Per concatenazione si intende il processo di congiunzione di matrici per fare
matrici di dimensioni più grandi.

La parentesi quadrata, [ ], è l'operatore della concatenazione.

Per un esempio, si parta dalla matrice 4x4 A e si formi:


B = [A A+32; A+48 A+16]
Il risultato è una matrice 8x8, ottenuta concatenando quattro suttomatrici 4x4.
B =
16 3 2 13 48 35 34 45
5 10 11 8 37 42 43 40
9 6 7 12 41 38 39 44
4 15 14 1 36 47 46 33
64 51 50 61 32 19 18 29
53 58 59 56 21 26 27 24
57 54 55 60 25 22 23 28
52 63 62 49 20 31 30 17

44
MATLAB
Esercizio

z Costruire la matrice 8 x 7
1000011
0100011
0010011
0001011
0000111
1110011
1110000
1110000

e assegnare alla variabile SM la


sottomatrice segnata.

45
MATLAB
Soluzione
>> a=[
[eye(5);[ones(3,3),zeros(3,2)]],
[ones(6,2);zeros(2,2)]
]

>> SM=a(3:7,4:7)

46
MATLAB
Cancellazione di righe o colonne
Si possono cancellare righe e colonne da una matrice utilizzando le parentesi
quadrate.

Ad esempio,sia:
X = A;
Per cancellare la seconda colonna di X, usiamo:
X(:,2) = []
Questo cambia X in
X =
16 2 13
5 11 8
9 7 12
4 14 1

N.B. Se si cancella un singolo elemento da una matrice, il risultato non è più


una matrice. Così,
X(1,2) = []
produce un errore.
47
MATLAB
Determinante, inversa e rango di
una matrice
Il determinante di una matrice quadrata si può calcolare utilizzando la funzione
det()

» B = [1 2 ; 3 4];
» det(B)
ans =
-2

L’inversa di una matrice quadrata si può calcolare utilizzando la funzione inv()


» inv(B)
ans =
-2.0000 1.0000
1.5000 -0.5000

Il rango di una matrice si può calcolare utilizzando la funzione rank()


» rank([B,[2;6]])
ans =
2
48
MATLAB
Ulteriori operazioni con matrici
Se A è una matrice
>> max(A)
restituisce un vettore riga che contiene l’elemento massimo di ogni colonna
>> min(A)
restituisce un vettore riga che contiene l’elemento minimo di ogni colonna
>> eig(A)
restituisce una matrice diagonale che contiene gli autovalori di A ed una
matrice le cui colonne sono gli autovettori corrispondenti
>> abs(A)
restituisce una matrice i cui elementi sono gli elementi di A presi in valore
assoluto
>> tril(A)
restituisce una matrice triangolare inferiore costituita dagli elementi presenti
sulla diagonale principale di A, ed al di sotto di essa
>> triu(A)
restituisce una matrice triangolare superiore costituita dagli elementi presenti
sulla diagonale principale di A, ed al di sopra di essa
49
MATLAB
Operazioni con vettori
Le operazioni presentate per le matrici si applicano in modo del tutto naturale
anche ai vettori.
>> a = [1:4];
>> b = [1:3];
>> c = [3 2 6 -1] ;
>> a+c
ans = 4 4 9 3
>> a-c
ans = -2 O -3 5
>> a+b
??? Errar using ==> + Matrix dimension must agree.
>>a*c
??? Errar using ==> * Inner matrix dimension must
agree.

Le ultime istruzioni mostrano che, le operazioni tra vettori (così come quelle
tra matrici) sono valide solo se le dimensioni sono consistenti.
consistenti
50
MATLAB
Moltiplicazione di vettori
Prodotto interno (prodotto scalare)
>> s=[1:4];
>> d=[1;2;3;4];
>> s*d
ans= 30

Prodotto esterno (fornisce una matrice).


>> s=[1:4];
>> d=[1;2;3;4];
>> M=d*s
M=
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16

51
MATLAB
Operazioni sui singoli elementi
dei vettori
z Il prodotto degli elementi di un vettore (o degli elementi sulle
colonne di una matrice) può essere effettuato utilizzando la
funzione prod().

z Operazioni aritmetiche .* ./ .^
» u = 1 : 4 ;
» v = [3 2 6 -1];
» w = u .* v
w =
3 4 18 -4
» w = u ./ v
w =
0.3333 1.0000 0.5000 -4.0000
» w = u .^ v
w =
1.0000 4.0000 729.0000 0.2500

52
MATLAB
Esempio
Sia n il seguente vettore colonna:
n = (0:9)';
Sia inoltre
pows = [n n.^2 2.^n]
La variabile pows forma una tabella di quadrati e potenze di due.
pows =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512
53
MATLAB
Soluzione di un sistema
algebrico: operatore \
z Dato un sistema algebrico posto nella forma [A] * {x} = {b}, la
soluzione {x} può essere ricavata utilizzando l’operatore \
(backslash): x = A \ b

z L’uso di tale operatore equivale a scrivere x = inv(A) * b

z Es.
A=[2 5 6;6 4 -12;1 0 4]
b=[32;6;1] ⎧2 x + 5 y + 6 z = 32
>> x=A\b ⎪
x = ⎨6 x + 4 y − 12 z = 6
⎪x + 4z = 1
-1.7907 ⎩
6.2791
0.6977

54
MATLAB
Modifica del formato di output
z MATLAB lavora generalmente con quindici cifre
significative.
z Secondo l’impostazione standard di MATLAB, a livello di
output una variabile intera viene visualizzata in un
formato privo di punto decimale, mentre una variabile
reale non intera viene visualizzata utilizzando quattro
cifre decimali (format short).
z Se si vuole modificare il formato di output occorre
digitare il comando format.
z Per visualizzare il maggior numero possibile di cifre
decimali, è necessario attivare il comando format long.

55
MATLAB
Modifica del formato di output
Esempio:
>>1/13
ans =
0.0769 (5 cifre)
>>format long
>>1/7
ans =
0.07692307692308 (15 cifre)
Per riabilitare il formato standard occorre digitare format o format short.

z Altri utili formati di output sono:


format short e che produce 7.6923e-002
format long e che produce 7.692307692307693e-002

z Per conoscere gli altri formati di output forniti da MATLAB è sufficiente


digitare help format
56
MATLAB
Esercizio

Se v è un vettore (riga o colonna), la funzione


length(v)restituisce il numero di elementi di v.

Utilizzare tale funzione per calcolare la media dei valori

0.1 2.3 2.1 1.7 3.1 2.0 0.9 0.8 3.6 2.5

fornire il risultato in formato esponenziale ridotto

57
MATLAB
Soluzione
>> v=[0.1 2.3 2.1 1.7 3.1 2.0 0.9 0.8 3.6 2.5]
>> format short e
>> m=sum(v)/length(v)

Si osservi che il medesimo risultato poteva essere ottenuto


utilizzando la funzione mean() fornita da MATLAB:

>> m=mean(v)

m =

1.9100e+000

58
MATLAB
Funzioni trigonometriche
predefinite
MATLAB, essendo un linguaggio di programmazione di tipo
tecnico-scientifico, contiene molte importanti funzioni matematiche
predefinite, come ad esempio le seguenti funzioni trigonometriche:
5 sin(x) seno di x
5 cos(x) coseno di x
5 asin(x) arcoseno di x
5 acos(x) arcocoseno di x
5 tan(x) tangente di x
5 atan(x) arcotangente di x
5 atan2(y,x) funzione arcotangente a doppio argomento di y e x
N.B. In generale, quando si scrive y = sin(x), si intende che al
numero x si fa corrispondere il numero y. Poiché in MATLAB x ed
y possono essere matrici (o vettori), l’espressione y = sin(x) ha il
senso seguente: ad ogni componente della matrice x viene fatta
corrispondere una componente della matrice y secondo la
relazione y = sin(x).
59
MATLAB
Altre importanti funzioni
matematiche predefinite
5 exp(x) esponenziale di x
5 log(x) logaritmo naturale di x
5 sqrt(x) radice quadrata di x
5 abs(x) valore assoluto di x
5 sign(x) funzione segno di x
5 factorial(x) fattoriale di x
5 floor(x) arrotonda all’intero più vicino a x per difetto
5 ceil(x) arrotonda all’intero più vicino a x per eccesso
5 round(x) arrotonda all’intero più vicino a x

Per una lista più completa si può digitare help elfun alla riga di
comando

60
MATLAB
Generazione di matrici
Come già illustrato, MATLAB fornisce quattro funzioni che
generano matrici di base: eye(), ones(), rand(), e zeros()

Utilizzando tali funzioni in combinazione con gli operatori aritmetici


e le funzioni predefinite, è possibile generare matrici anche di
elevata complessità.

Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
61
MATLAB
Generazione di matrici
N = fix(10*rand(1,10))
N =
4 9 4 4 8 5 2 6 8 0

La funzione fix() arrotonda un valore all’intero più prossimo a zero.

In aggiunta alle funzioni generatrici precedentemente illustrate, si osservi


che è possibile utilizzare le funzione randn() per generare una matrice di
numeri casuali estratti da una distribuzione normale a media nulla e
varianza e deviazione standard unitarie.

R = randn(4,4)
R =
1.0668 0.2944 -0.6918 -1.4410
0.0593 -1.3362 0.8580 0.5711
-0.0956 0.7143 1.2540 -0.3999
-0.8323 1.6236 -1.5937 0.6900
62
MATLAB
Generazione di matrici mediante
il comando Load

Si è mostrato che il comando load consente di leggere file


binari (.mat) che contengono variabili (e quindi anche matrici)
generate in precedenti sessioni di MATLAB.

Tale comando può anche essere utilizzato per leggere file di


testo contenenti dati numerici.

I file di testo dovrebbero essere organizzati come una tabella


rettangolare di numeri, separata da spazi vuoti, con una riga
per linea, e un numero uguale di elementi in ciascuna fila.

63
MATLAB
Generazione di matrici mediante
il comando Load
Se, per esempio, al di fuori di MATLAB si crea un file di testo,
chiamato [Link], che contiene queste quattro linee:

16.0 3.0 2.0 13.0


5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0

Attraverso il comando

load [Link]

viene letto il file e viene creata, nello spazio di lavoro, una


variabile omonima (magik), contenente la matrice d'esempio.
64
MATLAB
Generazione di matrici mediante
M-file
Si possono creare matrici utilizzando M-file che sono file di testo contenenti
una lista di istruzioni MATLAB.
MATLAB
L’uso degli M-file è alternativo alla scrittura di istruzioni alla riga di comando.
Per fare ciò è sufficiente utilizzare l’editor di MATLAB per creare un file che
contiene le istruzioni che si desiderava digitare al prompt di MATLAB, nell’ordine
desiderato.
Il file deve essere quindi salvato con un nome e con l’estensione .m

Esempio:
per creare la matrice di Dürer si può creare un M-file che contiene le cinque
linee:
A = [...
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0];
Dopo aver salvato il file con un nome (es. magik.m), digitando il nome del file
senza estensione (magik) alla riga di comando, esso viene letto ed interpretato.
Di conseguenza viene creata in workspace la variabile A contenente la matrice
d'esempio.
65
MATLAB
Uso di MATLAB come linguaggio
di programmazione
z MATLAB può essere utilizzato come un linguaggio di
programmazione alla stregua del Basic, del Fortran, del
Pascal o del C.

z L’esistenza di strutture sintattiche tradizionali e la


possibilità di utilizzare funzioni matematiche predefinite
consente di codificare in modo semplice e flessibile
algoritmi utili per la soluzione di problemi tecnico
scientifici

z Tuttavia MATLAB è un linguaggio interpretato che non


utilizza compilatori, e pertanto, dal punto di vista
dell’efficienza computazionale e della velocità di calcolo,
risulta meno competitivo rispetto ai linguaggi compilati
quali il Fortran ed il C.
66
MATLAB
Uso di MATLAB come linguaggio
di programmazione
Alcune strutture elementari di programmazione
disponibili in MATLAB sono:

• ciclo incondizionato for controllato da un


contatore
• ciclo condizionato while
• uscita incondizionata break
• istruzioni condizionali if e switch
• operatori relazionali
• operatori logici

67
MATLAB
Operatori relazionali

< <= > >= == ˜=

N.B. in MATLAB gli operatori relazionali possono essere


applicati anche a vettori e matrici.

Esempio:
>>x=1:5;
>>y=5:-1:1;
>>z=x>y
z =
0 0 0 1 1
68
MATLAB
Operatori logici

& (and) | (or) ˜ (not)

N.B. a e b potranno spesso essere il risultato di un confronto tra variabili


eseguito mediante operatori relazionali.
69
MATLAB
Istruzioni condizionali: if
if condizione1
istruzioni
elseif condizione2
istruzioni
....
else
istruzioni
end

Il primo blocco di istruzioni sarà eseguito solo se la condizione1


risulta essere verificata, il secondo solo se la condizione1 risulta
essere falsa e la condizione2 vera.
Il blocco che segue else sarà eseguito soltanto se nessuna delle
precedenti condizioni risulta essere vera.

70
MATLAB
Esempio if
Nel vettore ris viene memorizzata una stringa che riporta il
risultato del confronto tra le variabili A e B.

if A > B
ris=‘A maggiore di B'
elseif A < B
ris=‘A minore di B'
elseif A == B
ris=‘A uguale a B'
else
error(‘Situazione non prevista')
end
71
MATLAB
Istruzioni condizionali: switch
switch variabile
case valore1
istruzioni
case {valore2, valore3,...}
istruzioni
otherwise,
istruzioni
end

Se variabile è uguale a valore1 vengono eseguite le righe di


codice poste dopo la prima istruzione case.
Se variabile è uguale a valore2 o valore3 o ... vengono eseguite
le righe di codice poste dopo la seconda istruzione case.
In tutti gli altri casi vengono eseguite le istruzioni dopo otherwise
72
MATLAB
Esempio switch
In questo esempio viene verificato il contenuto della stringa method,
riportato in lettere minuscole mediante la funzione lower(), per
assegnare alla variabile ris il risultato della verifica:

method = 'Bilinear';
switch lower(method)
case {'linear','bilinear'}
ris='Method is linear'
case 'cubic'
ris='Method is cubic'
case 'nearest'
ris='Method is nearest'
otherwise
ris='Unknown method.'
end

73
MATLAB
Ciclo incondizionato for
controllato da un contatore
for variable = inizio:incremento:fine,
istruzione
...
istruzione
end

Il ciclo viene ripetuto per tutti i valori di variabile compresi tra


inizio e fine. Al termine di ogni ciclo il valore di variabile
viene incrementato di incremento.
Se il valore di incremento viene omesso esso viene
automaticamente assunto uguale a +1.

74
MATLAB
Esempio for
for i = 1:4,
for j = 1:3,
due cicli nidificati utilizzati per
A(i,j) = 1/(i+j-1); costruire la matrice A
end
end

>>A
A =

1.0000 0.5000 0.3333


0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
0.2500 0.2000 0.1667

75
MATLAB
Ciclo condizionato while
while condizione
istruzione
...
istruzione
end

condizione è un’espressione che MATLAB valuta


numericamente e che viene interpretata come vera se
assume valore 1, come falsa se assume valore 0.
Il ciclo viene eseguito fintanto che l’espressione è vera.
Se si utilizza l’operatore logico ˜ davanti a condizione, il ciclo
viene eseguito fintanto che l’espressione è falsa.
76
MATLAB
Esempio while
z Sia dato un vettore x i cui elementi sono ordinati in senso crescente, occorre
sommare, tra i primi 20 elementi quelli minori di 1 o maggiori di 5.

z Si può scrivere:

x=[1:20];
somma=0;
m=20;
i=1;
while i<=m
if x(i)<=1 | x(i)> 5
somma=somma+x(i);
end
i=i+1;
end

77
MATLAB
Uscita incondizionata break

Il comando break consente di uscire in maniera forzata


da un ciclo for o while.

Quando tale comando viene eseguito MATLAB salta


direttamente all’istruzione end, con cui termina il ciclo.

78
MATLAB
m-file (script) e funzioni
Esistono due categorie di programmi eseguibili in MATLAB:

m-file (o script) file di comandi


function-file file di funzioni

Entrambi questi programmi devono essere salvati in file con


estensione “.m”.

Per inserire dei commenti all'interno dei programmi viene utilizzato


il carattere %. I commenti posti all’inizio di un file con estensione
.m possono essere mostrati digitando il comando help seguito dal
nome del programma.
79
MATLAB
m-file (script)
Un m-file contiene una successione di comandi MATLAB
memorizzati in un file di testo.
Tale file risulta essere a tutti gli effetti un programma
eseguibile scritto dall'utente.
Esso è caratterizzato da un nome con estensione .m (es.
nomefile.m) che lo identifica come un nuovo comando
MATLAB.
Pertanto, per eseguire il programma è sufficiente digitare il suo
nome alla riga di comando di MATLAB:

>> nomefile

Con questa operazione si ottiene lo stesso risultato che si


sarebbe ottenuto scrivendo uno ad uno i comandi elencati
nello script.
80
MATLAB
m-file (script)
Le variabili definite in uno script sono variabili globali e quindi
contribuiscono ad aumentare l’occupazione di memoria:
rimangono in workspace anche le variabili di servizio, di cui è
superfluo conservare i valori.

Per creare un m-file occorre selezionare il menu File e quindi


New→m-file.

Si accede in tal modo all’editor di MATLAB ove si possono


scrivere, e salvare, tutti i comandi del programma.

Gli M-file possono essere posizionati nella cartella corrente


oppure in altre cartelle personali. Per poter eseguire uno script
dalla finestra di comando di MATLAB è necessario trovarsi
nella cartella in cui è stato salvato lo script o includere la
cartella nel Matlab search path.
path
81
MATLAB
Esempio di m-file: q_seno.m

%
% Calcolo del quadrato della funzione seno
% nell'intervallo [-pi, pi]
%

x=[-pi:0.01:pi];
y=sin(x).^2;

82
MATLAB
function-file
Se si vogliono evitare gli inconvenienti di allocazione di memoria dati dagli
m-file, e se si vuole suddividere un programma in più sotto-programmi è
conveniente considerare i function-file (o “function”).
Un function-file è caratterizzato da una lista di parametri di input
(opzionale) ed una lista di parametri di output (anch’essa opzionale).
A differenza dello script, la prima riga di una function deve avere
obbligatoriamente la seguente struttura:

function [y1, ... , yn] = nome_funzione (x1, ... , xm)


parametri di output parametri di input

Il file deve essere salvato con un nome uguale a quello della funzione
(nome_funzione) e con estensione .m.

N.B. Le variabili utilizzate durante l’esecuzione del programma vengono


trattate come variabili locali e vengono automaticamente cancellate dalla
memoria al termine dell’esecuzione.
83
MATLAB
Esempio di function-file
funfatt.m
function [fatt]=funfatt(n)
%
% Funzione per il calcolo del fattoriale di un numero
% naturale
%
% Verifica che il numero inserito sia naturale
if n < 0 | abs(round(n)-n) > eps
disp('Fattoriale non definito')
break
end
% Calcolo del fattoriale
fatt=1;
for i=1:n
fatt=fatt*i;
end
return ritorna il comando alla funzione che ha
invocato funfatt.m o alla tastiera
84
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
z Creare 3 funzioni che prendano in
ingresso un angolo e diano in uscita
rispettivamente Rx,Ry,Rz (matrici di
rotazione attorno agli assi x,y,z)
z Creare una funzione che prenda in
ingresso i tre angoli di eulero (angoli
ZYZ) e dia in uscita la matrice di
rotazione complessiva

function R = DH_eulero_zyz (fi,theta,psi)


%
% Funzione per il calcolo della matrice di
rotazione dati i tre angoli di eulero
%

85
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Rx(theta)
% Funzione per il calcolo della
% matrice di rotazione attorno a x
R = [1,0,0
0,cos(theta),-sin(theta)
0,sin(theta),cos(theta)];

86
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Ry(beta)
% Funzione per il calcolo della
% matrice di rotazione attorno a y
R = [cos(beta),0,sin(beta)
0,1, 0
-sin(beta),0,cos(beta)];

87
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function R = Rz(alfa)
% Funzione per il calcolo della
% matrice di rotazione attorno a z
R = [cos(alfa),-sin(alfa),0
sin(alfa),cos(alfa),0
0,0,1];

88
MATLAB
Esercizio di function-file
DH_eulero_zyz.m
function [T,T1] = DH_eulero_zyz(fi,theta,psi)

T = [cos(fi)*cos(theta)*cos(psi) - sin(fi)*sin(psi),…
-cos(fi)*cos(theta)*sin(psi) - sin(fi)*cos(psi),…
sin(theta)*cos(fi);
sin(fi)*cos(theta)*cos(psi) + cos(fi)*sin(psi),…
-sin(fi)*cos(theta)*sin(psi) + cos(fi)*cos(psi),…
sin(theta)*sin(fi);
-sin(theta)*cos(psi), sin(theta)*sin(psi), cos(theta)];

T1=Rz(fi)*Ry(theta)*Rz(psi);

89
MATLAB
Esercizio di function-file
DH_eulero_rpy.m
function [T,T1] = DH_eulero_rpy(fi,theta,psi)

T = [cos(fi)*cos(theta),cos(fi)*sin(theta)*sin(psi)…
- sin(fi)*cos(psi), …
sin(theta)*cos(fi)*cos(psi)+sin(fi)*sin(psi);
sin(fi)*cos(theta),sin(fi)*sin(theta)*sin(psi) +…
cos(fi)*cos(psi), sin(theta)*sin(fi)*cos(psi)-cos(fi)*sin(psi);
-sin(theta), cos(theta)*sin(psi), cos(theta)*cos(psi)];

T1=Rz(fi)*Ry(theta)*Rx(psi)

90
MATLAB
Esercizio di function-file
eulero_zyz.m
function [fi,theta,psi] = eulero_zyz(R)

%calcolare gli angoli di eulero partendo


%dalla matrice R data

91
MATLAB
Esercizio di
function-file
eulero_zyz.m

92
MATLAB
Esercizio di
function-file
eulero_rpy.m

93
MATLAB
Comandi di ingresso/uscita:
input()
z Se in un programma si vuole che l’utente introduca da tastiera
il valore di una variabile si deve utilizzare la funzione input()

Esempio: l’istruzione
a1 = input(’a1=?: ’);
produce alla riga di comando:
a1 = ?
Perché il programma proceda, l’utente deve inserire un valore
numerico e premere Invio.

z Se si vuole invece che l’utente introduca una stringa si deve


usare l’istruzione input() con la sintassi:

st = input(’scrivi una stringa: ’,’s’);

N.B. La lettera ”s” è obbligatoria.


94
MATLAB
Comandi di ingresso/uscita:
disp()
Il comando più semplice per mostrare sullo schermo una stringa o
il valore di una variabile è disp() (display).
Esempi
>> a1=input('a1=?:');
a1=?:10
>> disp(a1)
10

>> st='pippo';
>> disp(st)
pippo

Naturalmente è anche possibile scrivere

>> disp('pippo')
pippo
95
MATLAB
Comandi di ingresso/uscita:
fprintf()
z fprintf è l’acronimo di file print formatted. La funzione fprintf() consente
di salvare dei dati formattati su un archivio di testo.
z Prima di scrivere su un file è necessario aprirlo in scrittura ed
assegnargli un identificativo interno. A tal fine si utilizza la funzione
fopen() con la sintassi:

ident_file=fopen(‘nome_file’,’wt’);

z Per scrivere sul file ‘nome_file’ si utilizza la seguente sintassi:

fprintf(ident_file,formato,variabile);

z Infine, per chiudere il file si usa la funzione fclose():

fclose (ident_file);

z Si può vedere il file creato con un qualsiasi editor di testo.


96
MATLAB
Comandi di ingresso/uscita:
fprintf()
La funzione fprintf() contiene la stringa dei formati delimitata da apici
(come tutte le stringhe) e, dopo la virgola, l’elenco delle variabili

Identificativo variabile
del file Tabulazione “new line” (matrice)

fprintf(file_id,'%4.3f\t %6.4f\n',OUT);

Carattere Numero Numero Specificatore


di inizio totale cifre cifre di conversione
decimali

97
MATLAB
Comandi di ingresso/uscita:
fprintf(). Esempio
x=linspace(0,2*pi,100)
OUT=[x;cos(x)];
file_id=fopen('[Link]','wt');
fprintf(file_id,'%4.3f\t %6.4f\n',OUT);
fclose(file_id);

0.000 1.0000
0.063 0.9980
0.127 0.9920
0.190 0.9819
......... ..........
......... ..........
......... ..........
6.156 0.9920
6.220 0.9980
6.283 1.0000
98
MATLAB
Comandi di ingresso/uscita:
fprintf(). Esempio
for x = 1:6
y = sqrt(x);
v = log(x);
fprintf(’ num= %2i \t rad= %8.5f \t ln= %9.7e \n’,x,y,v)
end

Il risultato è
num = 1 rad = 1.00000 ln = 0.0000000e+00
num = 2 rad = 1.41421 ln = 6.9314718e-01
.......................................................................
num = 5 rad = 2.23607 ln = 1.6094379e+00
num = 6 rad = 2.44949 ln = 1.7917595e+00

%2i significa: numero intero “i” con 2 cifre


%8.5f significa: numero decimale “f” a 8 cifre di cui 5 decimali
%9.7e significa: numero in formato esponenziale “e” con 9 cifre di cui 7 decimali;

Per ulteriori informazioni digitare help fprintf alla riga di comando


99
MATLAB
Comandi di ingresso/uscita:
fscanf()
La funzione fscanf() consente la lettura di dati formattati da
un archivio.

var=fscanf(ident_file,formato,dimensione);

Prima di utilizzare il comando fscanf, il file da cui prelevare


i dati deve essere aperto in lettura mediante la funzione
fopen():

ident_file=fopen(‘nome_file’,’r’);

Terminata la lettura si può chiudere il file con il comando


fclose().
100
MATLAB
Comandi di ingresso/uscita:
fscanf(). Esempio
Si supponga di voler utilizzare la funzione fscanf() per leggere i dati contenuti nel file
[Link] generato in precedenza mediante la funzione fprintf().
Si potrà scrivere il seguente m-file:

file_id=fopen('[Link]','r');
IN=fscanf(file_id,'%f %f',[2 inf]);
fclose(file_id);

Numero Numero
IN = colonne righe

Columns 1 through 4

0 0.0630 0.1270 0.1900


1.0000 0.9980 0.9920 0.9819
...

Il risultato è una matrice IN che risulta trasposta (2×n) rispetto alla matrice salvata
nel file [Link] (n×2).
101
MATLAB
Grafici: funzione plot()
z La funzione plot() consente di produrre grafici bidimensionali.

z Essa genera risultati che dipendendo dal numero di


argomenti utilizzati.

z Se y è un vettore, plot(y) produce un grafico lineare degli


elementi di y rispetto all'indice degli elementi di y. Tutti i punti
rappresentati vengono raccordati tra loro mediante tratti
rettilinei: si ottiene pertanto una rappresentazione grafica di y
mediante una spezzata.

z Se si specificano due vettori come argomenti, ad esempio x e


y, plot(x,y) produce un grafico di y (ordinate) contro x
(ascisse).

102
MATLAB
Grafici: esempio

L’elevato numero di
punti da l’impressione
di una linea continua

t = 0:pi/100:2*pi;
y = sin(t);
plot(t,y)

103
MATLAB
Grafici: funzione fplot()
z Il medesimo risultato poteva essere ottenuto anche utilizzando
la funzione fplot() e scrivendo una sola riga di codice!

z La funzione fplot() va utilizzata con la seguente sintassi:


fplot('funzione',[xmin xmax]).

z Esempio:
fplot('sin(x)',[0 2*pi])

z Considerando il vettore [xmin xmax ymin ymax] è possibile


stabilire anche un intervallo di rappresentazione sull’asse y:
fplot('sin(x)',[0 2*pi 0 1])

104
MATLAB
Grafici multipli
Diverse coppie di coordinate passate ad argomento della funzione plot()
consentono di creare grafici multipli con una singola chiamata.

plot(x1,y1,x2,y2,...,xn,yn)

MATLAB traccia automaticamente i diversi grafici attraverso un predefinito


elenco di colori che permette di distinguere ciascuna collezione di dati. I
colori possono sempre essere modificati dall’utente.

Per esempio, le seguenti istruzioni tracciano quattro funzioni di t. Ogni


curva viene automaticamente tracciata con un colore diverso:
t = 0:pi/100:2*pi;
y = sin(t);
y2 = sin(t - .40);
y3 = sin(t - .8);
y4 = sin(t - 1.2);
plot(t,y,t,y2,t,y3,t,y4)
105
MATLAB
Grafici multipli

106
MATLAB
Grafici: opzioni
Per ogni grafico è possibile specificare il colore e lo stile della
linea nonché il marcatore da utilizzare mediante la seguente
sintassi:

plot(x,y,'opzioni')

ove la stringa opzioni è costituita da una sequenza di 1, 2, o 3


caratteri che descrivono:

• il colore della linea,


• lo stile della linea,
• il tipo di marcatore (simbolo) da utilizzare per ciascun
punto rappresentato.

107
MATLAB
Grafici: opzioni
z I possibili tipi di colore sono:
'c', 'm', 'y', 'r', 'g', 'b', 'w', e 'k':
corrispondono, rispettivamente ad azzurro, magenta, giallo,
rosso, verde, blu, bianco, e nero.

z Stringhe di stile di linea sono:


'-' linea con tratto continuo
'- -' linea tratteggiata,
':' linea punteggiata,
'-.' linea tratto-punto,
'none' nessuna linea.

z Tipi di marcatore sono:


'+', 'x', '.', 'o', '*', 's'.

108
MATLAB
Grafici: opzioni
Esempio 1

>> x=[-pi:0.2:pi]; 0.8

>> y=sin(x); 0.6

0.4
>> plot(x,y,'k:o')
0.2

-0.2

-0.4

-0.6

-0.8

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

109
MATLAB
Figure(), close(), close all
L’invocazione della funzione plot() comporta l’apertura automatica di
una nuova finestra grafica qualora non ve ne siano già di aperte.

Se una finestra grafica risulta essere già aperta, il comando plot()


viene applicato a tale finestra. Ciò comporta che venga sovrascritto il
contenuto di tale finestra.

Per aprire una finestra nuova, nominarla finestra “n” (dove n è il


numero nella barra del titolo della figura) e renderla finestra corrente è
sufficiente digitare:

figure(n)

Tale istruzione può essere anche applicata ad una finestra grafica già
aperta, per renderla finestra corrente.

Per chiudere la suddetta finestra si digita il comando close(n), per


chiudere tutte le finestre attive si digita close all.
110
MATLAB
Grafici: comandi hold on/off
Il comando hold permette di gestire la sovrapposizione di grafici di più funzioni nella
stessa finestra grafica. In particolare, quando viene invocato il comando

hold on

MATLAB non rimuove il/i grafico/i esistente/i ed aggiunge i nuovi grafici alla finestra
corrente riscaldandone eventualmente gli assi per consentire una corretta
visualizzazione.
Il comando hold on viene disabilitato con il comando hold off: digitando hold off si
ritorna all’impostazione originale in cui la finestra grafica viene ripristinata ad ogni
nuovo grafico.

Per esempio:
t = 0:pi/100:2*pi;
y = sin(t);
plot(t,y,'*')
z=cos(t);
hold on
plot(t,z,'r:o')
111
MATLAB
Grafici: comandi hold on/off

112
MATLAB
Grafici: funzione subplot()
La funzione subplot() permette di disegnare grafici separati in una stessa finestra grafica.
La sintassi
subplot(m,n,p)
trasforma la finestra della figura in una matrice mxn di sottofinestre e seleziona la p-esima
sottofinestra come finestra corrente. Le sottofinestre sono numerati per righe: a partire da
sinistra verso destra e dall’alto verso il basso.
Esempio:
t = 0:pi/10:2*pi;
y = sin(t);
subplot(2,2,1)
plot(t,y)
y1=cos(t);
subplot(2,2,2)
plot(t,y1)
y2=tan(t);
subplot(2,2,3)
plot(t,y2)
y3=atan(t);
subplot(2,2,4)
plot(t,y3)
113
MATLAB
Grafici: funzione subplot()

1 2

3 4

114
MATLAB
Grafici: funzione axis()
La funzione axis() ha numerose opzioni per personalizzare la definizione
degli intervalli di variazione delle variabili in ascissa ed ordinata.
Per personalizzare i limite degli assi si digita:
axis([xmin xmax ymin ymax])

Il comando axis invocato da solo restituisce un vettore con i valori correnti


della scala. Esso accetta anche alcune keywords per il controllo degli
assi. Ad esempio:

axis square
impone che i due assi abbiano la stessa lunghezza

axis equal
impone che gli incrementi per ogni marchio su x e y siano uguali.

axis auto
scala gli assi in maniera automatica.
115
MATLAB
Grafici: comando grid
z Spesso è conveniente tracciare una griglia che aiuta nella lettura dei
grafici
z Una griglia tratteggiata viene aggiunta alla finestra grafica utilizzando il
comando
1

grid on (o semplicemente grid)


0.8

0.6

0.4

z Si può rimuovere la griglia 0.2

digitando nuovamente grid 0

alla riga di comando o


-0.2

-0.4

utilizzando il comando -0.6

-0.8

grid off -1
-4 -3 -2 -1 0 1 2 3 4

116
MATLAB
Titoli, didascalie e testi
z La funzione title(’stringa’) consente di assegnare un titolo ad una figura
z Le funzioni xlabel(’stringa’), ylabel(’stringa’), e zlabel(’stringa’) permettono di
aggiungere didascalie agli assi x, y, z di una figura.
z La funzione text(x,y,’stringa’) permette di inserire la stringa nella posizione (x,y)
di una figura.

z Un sottoinsieme di notazioni di LaTex interpretate da MATLAB consente di


produrre lettere greche, simboli matematici, e font speciali.

z L'esempio seguente usa \leq per <=, \pi per π, e \it per il font corsivo.

t = -pi:pi/100:pi;
y = sin(t);
plot(t,y)
axis([-pi pi -1 1])
xlabel('-\pi \leq \it \leq \pi')
ylabel('sin(t)')
title('Grafico della funzione sin')
text(1,-1/3,'\it{Funzione dispari}')
117
MATLAB
Titoli, didascalie e testi

118
MATLAB
Simboli
LaTex

119
MATLAB
Simboli
LaTex

\bf – font grasetto


\it – font corsivo
\rm – font normale
\fontname{fontname} – specifica il nome del font da usare.
\fontsize{fontsize} – specifica la dimensione del font.

120
MATLAB
Ottimizzazione del codice
I comandi tic e toc consentono di conoscere il numero dei secondi richiesto da un
determinato calcolo. La sintassi di tali comandi è:

tic;
calcolo;
toc

tic attiva il timer, toc lo arresta e restituisce l’“elapsed_time”, ovvero il tempo (in
secondi) trascorso dal momento in cui tic è stato attivato.

Esempio:
>>A=rand(100);
>>tic; inv(A); toc
elapsed_time =
0.3710

Digitando t=toc; l’“elapsed_time”viene salvato nella variabile t e non appare sullo


schermo.
Per calcolare l’“elapsed_time”si può utilizzare anche il comando etime.
121
MATLAB
Passaggio di funzioni come
argomento di una funzione
Molte funzioni “lavorano” su altre funzioni, predefinite dall’utente.

Supponiamo di voler scrivere una function che stampa il grafico di una


funzione sull’intervallo [a,b].

La function richiesta deve avere in input il nome della function di cui


vogliamo il grafico e l’intervallo [a,b].
La sua intestazione sarà quindi:
function plot_funz(funz,a,b)
Per Matlab il parametro “funz” deve essere una stringa di caratteri,
oppure uno “handle” contenente il nome della function.

122
MATLAB
Supponiamo quindi di aver creato un M-file f.m che contiene la function di cui
vogliamo il grafico:

function f=f(x)
% Calcola la funzione exp(x)*cos(4*x)
f=exp(x).*cos(4*x);

Poiché il nome della function deve essere passato come stringa di caratteri, la
chiamata a plot_funz per disegnare il grafico di f(x) sull’intervallo [0,5] sarà:

>> plot_funz('f',0,5)

Oppure, in Matlab 6, si puo’ usare anche uno handle (@):

>> plot_funz(@f,0,5)

123
MATLAB
All’interno della function plot_funz, è necessario valutare la funzione passata
come argomento sui valori x delle ascisse.
Per far questo devo usare la function feval:

f=feval(funz,x);

Questa istruzione trasforma la stringa funz , associando a funz il file


funz.m . Poi, esegue il comando funz(x).
Possiamo ora dare il listato della function plot_funz

124
MATLAB
Listato di plot_funz

function plot_funz(funz,a,b)
% PLOT_FUNZ(FUNZ,A,B): disegna il grafico della funzione
% FUNZ sull'intervallo [a,b], usando 201 punti.
% FUNZ deve essere una stringa di caratteri
h=(b-a)/200;
x=a:h:b;
f = feval(funz,x); %Valuta funz nei valori x
plot(x,f)

125
MATLAB
Oggetti grafici
z Linea:
handle = line(‘XData’,[xi xf], ‘YData’,[yi yf],…
’Zdata’,[zi zf],’Proprietà’,’Attributo’);

z Superficie: esempi
• [X,Y,Z] = sphere(n)
• [X,Y,Z] = cylinder(r,n)
• handle = surf(X,Y,Z)

z Rettangolo:
handle=rectangle('Position',[x,y,w,h])

126
MATLAB
Animazioni – drawnow e EraseMode

Erasemode: controlla h=line([0 1],[0 0]);


come MATLAB fa l’update set(h,'Color','r'); ‘xor’: Disegna e cancella
dell’immagine sullo set(h,'Erasemode','xor'); l’immagine utilizzando un
schermo se le proprietà axis([-1 1 -1 1]); exclusive OR (XOR) con il
(Cdata) di questa cambiano
axis square colore dello schermo
sottostante.
t=0;
while 1
drawnow drawnow: termina la
t=t+pi/10000; coda/lista degli eventi e
if t>=pi/2 aggiorna la figura.
break
end
x=cos(t);
y=sin(t);
set(h,'XData',[0
x],'YData',[0 y]);
end

127
MATLAB
Animazioni - movie

Alloco memoria
h=line([0 1],[0 0]);
per i frames
set(h,'Color','r'); nella matrice M
axis([-1 1 -1 1]);
axis square

t=0; Catturo ogni


nframes=90;
M=moviein(nframes);
frame e lo salvo
for k=1:nframes in una colonna
di M
t=t+pi/2/nframes;
x=cos(t);
y=sin(t);
set(h,'XData',[0 x],'YData',[0 y]);
M(:,k)=getframe; Eseguo il movie
end
movie(M,1); in M, 1 volta

128
MATLAB
Variabili simboliche
Con il comando sym/syms è possibile costruire variabili ed espressioni
simboliche.
z Supponiamo di voler studiare una generica funzione f= 'a*x^2 + b*x + c.
z Dapprima si definiscono le variabili simboliche:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
z O più semplicemente:
syms a b c x

z Successivamente si definisce la funzione


f = sym('a*x^2 + b*x + c')
la quale potrà essere poi manipolata in diversi modi.

129
MATLAB
Menu
In MATLAB è facile creare programmi con interfaccia grafica
professionale (WINDOWS-like). L’istruzione menu è di immediata
comprensione.
z = menu('Scegli il tipo di operazione', ...
'Assegna operandi', ...
'Addizione', ...
'Sottrazione', ...
'Moltiplicazione', ...
'Divisione', ...
'Quit Program');
disp('')

130
MATLAB
GUI: graphical user interface

Comando:
guide

131
MATLAB

Potrebbero piacerti anche