MATLAB
MATrix LABoratory
MATLAB
Sistema software interattivo
per il Calcolo Scientifico che integra
programmazione, calcolo e
visualizzazione
2
Inizialmente fu progettato per
facilitare l’uso del software sviluppato
dai progetti LINPACK ed EISPACK
Al sistema MATLAB appartengono librerie,
dette TOOLBOXES, per la risoluzione di
specifici problemi:
• Financial
• Splines
• Optimization
• Statistic
• Symbolic Math
• ……
3
Il Sistema MATLAB è
costituito da
9Linguaggio
9Ambiente di lavoro
9Gestore di grafici
9Funzioni matematiche
9Programma di interfaccia con le
applicazioni
4
Il Linguaggio
Ad alto livello, orientato alle matrici, con
•Costrutti di controllo
•Funzioni
•Strutture di dati
•Gestione di I/O
5
L’ambiente di lavoro
È l’insieme di strumenti e facilities con cui
si lavora e che consente di
9Gestire le variabili nello spazio di
lavoro
9Importare ed esportare dati
9Sviluppare e mettere a punto
programmi
6
Gestore di grafici
E’ possibile gestire i grafici mediante un
sistema grafico che consente
9Visualizzazione di dati
9Image Processing
9Animazione
9Presentazioni grafiche
9Costruzione di interfacce grafiche di
utente
7
Funzioni matematiche
Directory
Contenuto
elmat
Matrici elementari e manipolazione di matrici
elfun
Funzioni matematiche elementari
specfun
Funzioni matematiche speciali
matfun
Algebra lineare numerica
datafun
Analisi dei dati e trasformata di Fourier
polyfun
Interpolazione e polinomi
funfun
Funzioni di funzioni e risoluzione di ODE
sparfun
Matrici sparse
8
Programma di interfaccia
con le applicazioni (API)
Questa è una libreria che permette di
scrivere programmi in C e in FORTRAN
che interagiscono con MATLAB.
Consente di:
• Chiamare routine da Matlab
• Chiamare MATLAB come un motore
computazionale
9
Come si presenta
Directory
corrente
Finestra dei comandi (Command Window)
Spazio di
lavoro
In questa finestra è possibile inserire i comandi
nel linguaggio di MATLAB
Lista di
comandi
10
help
Matlab possiede un aiuto in linea che
può essere ottenuto:
1. digitando help [comando] dalla
finestra dei comandi
2. attivando l’aiuto dalla barra dei
menu
3. Automaticamente quando si scrive il
nome di una funzione di Marlab
11
Definizione di variabili
MATLAB come calcolatrice
» -5/(4.8+5.32)^2
ans =
-0.0488
» (3+4i)*(3-4i)
ans =
25
» cos(pi/2)
ans =
6.1230e-017
» exp(acos(0.3))
ans =
3.5470
» a = 2;
» b = 5;
Il ‘;’ inibisce
l’output sullo
schermo
» a^b
ans =
32
» x = 5/2*pi;
» y = sin(x)
Risultati
assegnati ad
“ans” se il
nome non è
specificato
y =
1
» z = asin(y)
z =
1.5708
( ) parentesi
tonde per
input alle
funzioni
12
Tipo di dato
Il tipo di dato fondamentale in MATLAB è
l’array bidimensionale
(matrice)
Come casi particolari si ritrovano:
• variabile scalare (array 1x1)
• array monodimensionale nx1 (vettore colonna) o
1xn (vettore riga)
MATLAB è case sensitive cioè
A è una variabile diversa da a
13
Input di una matrice
1. Lista esplicita degli elementi
2. Costruzione degli elementi della
matrice
3. Caricamento della matrice da un file
di dati
14
Lista esplicita 1
» a=[1 2;3 4]
a =
1
2
3
4
Parentesi
quadre [ ]
9 ‘ ; ’ separatore di righe
9 spazio / virgola ‘ , ’ separatore di
colonna
15
Lista esplicita 2
» a=[1 2
Parentesi
quadre [ ]
3 4]
»a =
1
2
3
4
9separatore di righe ↵
9 spazio / virgola ‘ , ’ separatore di
colonna
16
Lista esplicita
» b=[-2.8, sqrt(-7), (3+5+6)*3/4]
b =
-2.8000
0 + 2.6458i
10.5000
» b(2,5) = 23
b =
-2.8000
0 + 2.6458i
10.5000
0
0
0
0
0
0
23.0000
Le matrici devono essere rettangolari: vengono
posti a zero gli elementi non definiti.
17
Esercizio
•Costruire nei due modi illustrati la matrice:
⎛ −1 0 1 ⎞
⎜
⎟
A = ⎜ 2 0 − 2⎟
⎜0 3 1 ⎟
⎝
⎠
18
Costruzione degli elementi
Espansione scalare
Operatore ‘:’ (colon)
per creare sequenze
» w=[1 2;3 4] + 5
w =
6
7
8
9
» x = 1:5
x =
1
2
» y = 2:-0.5:0
Rand: funzione di
utilità per creare
matrici
y =
2.0000
1.5000
0
» z = rand(2,4)
3
4
5
1.0000
0.5000
0.8913
0.7621
0.4565
0.0185
z =
0.9501
0.2311
0.6068
0.4860
19
Caricare i dati da un file
9con il comando load
9 da un M-file
9mediante Import Wizard
9usando le funzioni di I/O da file
20
load
Se i dati si trovano in
un file con estensione
.mat (creato ad
esempio con il
comando save)
Se i dati si trovano in
un file ascii
load nomefile
Copia tutte le variabili
del file nel workspace
load nomefile
Copia i dati in una sola
variabile chiamata
nomefile
21
Esempio 1:
>> A=[1 2 3;4 5 6]
A =
1
2
3
4
5
6
>> B=[1 2]
B =
1
2
>> save mat_vet A B
>> clear
>> load mat_vet
Crea il file mat_vet.mat
Cancella il contenuto del
workspace
Nel workspace non ci sono più
le variabili A e B
Carica le variabili A e B nel
workspace
22
Esempio 2:
>> A=[1 2 3;4 5 6]
A =
1
2
3
4
5
6
>> B=[1 2]
B =
1
2
>> save –ascii mat_vet A B
>> clear
>> load mat_vet
Crea il file mat_vet
Cancella il contenuto del
workspace
A e B non sono più definite
??? Error using ==> load
Number of columns on line 3 of ASCII file C:\matlabR12\bin\win32\mat_vet
must be the same as previous lines.
23
Esempio 3:
>> A=[1 2 3;4 5 6]
A =
1
2
3
4
5
6
>> B=[0 0 1]
B =
0
0
1
>> save –ascii mat_vet A B
Crea il file mat_vet
Cancella il contenuto del
workspace
>> clear
>> load mat_vet
>> mat_vet
A e B non sono più definite
mat_vet =
1
2
3
4
5
6
0
0
1
24
Da un M-file
Un M-file è un file con estensione .m,
contenente istruzioni in linguaggio Matlab,
che viene eseguito quando si digita nella
command window il nome del file senza
estensione
Se un file contiene la definizione di un
array, dopo l’esecuzione del file, l’array
si trova nel workspace.
25
Esempio:
26
Con Import Wizard
È il modo più semplice per importare i
dati.
Import Wizard si attiva dalla barra del
menu di Matlab e può importare sia
dati in formato testo sia dati binari
27
Esempio:
28
Funzioni di I/O da file
Sono funzioni a basso livello che permettono
di leggere e scrivere file di dati formattati
con la sintassi del linguaggio C.
9 fopen
9 fread
9 fwrite
9 fclose
29
Aritmetica di MATLAB
Matlab utilizza il Sistema aritmetico
Floating-point Standard IEEE in doppia precisione
F = ( 2, 52, -1023, 1024)
Emin
base
precisione
Emax
30
Visualizzazione dei numeri
Matlab prevede i seguenti formati:
•Format short (default)
•Format short e
•Format short g
•Format long
•Format long e
•Format long g
•Format hex
•Format rat
31
ESEMPIO: format short
Se il numero è compreso tra 10^-3 e 10^3 viene
visualizzato in formato fixed-point con 4 cifre
decimali altrimenti viene scalato per visualizzare
una cifra della parte intera
Numero
12.3456789123456
Visualizzazione
12.3457
123.456789123456
123.4568
1234.56789123456
0.00012456789123
1. 2346e+3
1. 2357e-4
32
ESEMPIO: format short e
Viene visualizzato il valore in formato floatingpoint con una cifra della parte intera e 4 della
parte decimale
Numero
12.3456789123456
Visualizzazione
1.2346e+1
123.456789123456
1.2346e+2
1234.56789123456
0.00012456789123
1.2346e+3
1.2357e-4
33
ESEMPIO: format short g
Viene visualizzato il valore migliore tra il formato
floating-point e fixed-point
Numero
12.3456789123456
Visualizzazione
12.3457
123.456789123456
123.4568
1234.56789123456
0.00012456789123
1.2346e+3
1.2357e-4
34
ESEMPIO: format long
Simile al formato short ma con la visualizzazione
di 15 cifre per la parte decimale
Numero
format long
format long e
format long g
3.141592653589792
3.14159265358979 3.14159265358979e+0
3.14159265358979
0.003141592653532
0.00314159265353 3.14159265353200e-3
0.00314159265353
35
ESEMPIO: format hex
Visualizza la rappresentazione esadecimale
(base 16) del numero binario in doppia
precisione come rappresentato in memoria.
>> eps
ans =
e=971-1023=-52
2.220446049250313e-016
29+28+27+26+23+2+1=971
>> format hex
esponente
>> ans
ans =
3cb0000000000000
001111001011
segno
(1+0.)2(-52) = 2.220446049250313e-016
36
ESEMPIO: format rat
Approssima il valore con una frazione continua
della forma:
n
= d1 +
d
d2 +
>> 1/2
ans =
0.50000000000000
>> format rat
1
1
d3 +
1
1
L+
dk
>> ans
ans =
1/2
>> pi
ans =
355/113
π non è un numero razionale!
37
Memorizzazione degli array
Matlab memorizza gli array come un unico
vettore colonna, che contiene le colonne
dell’array aggiunte consecutivamente
⎛1
⎜
a = ⎜4
⎜7
⎝
2
5
8
3⎞
⎟
6⎟
9 ⎟⎠
⎛1⎞
⎜ ⎟
⎜4⎟
⎜7⎟
⎜ ⎟
⎜2⎟
⎜5⎟
⎜ ⎟
⎜8⎟
⎜3⎟
⎜ ⎟
⎜6⎟
⎜9⎟
⎝ ⎠
38
Le matrici in MATLAB
A=
1
2
Righe (m) 3
1
Colonne
(n)
2
3
4
5
4
10
2
1
8
6
1.2
2
7.2
23
18
14
A (17)
23
56
19
0
15
A (2,4)
22
11
5
13
10
17
13
9
21
25
1
4
83
5
4
7
0.5
16
12
8
4
5
9
5
0
6
11
7
3
4
1
24
10
20
25
39
Esempio
»
r=[1 2 3]
r =
1
2
3
» n=[5 6 7];
» r=[r;n]
r =
1
2
3
5
6
7
L’allocazione degli array è dinamica
le dimensioni possono variare durante il
calcolo
40
Concatenazione di array
[ ] per
combinare
array già
definiti come
elementi di
nuovi array
» a=[1 2;3 4]
Parentesi
quadre [ ]
a =
1
2
3
4
» cat_a=[a, 2*a; 3*a,
cat_a =
1
2
2
3
4
6
3
6
4
9
12
12
5
10
6
15
20
18
4*a; 5*a, 6*a]
4
8
8
16
12
24
4*a
Nota:
L’array risultante deve essere rettangolare
41
Esempio:
⎛ 1 2 3⎞
⎜
⎟
a = ⎜ 4 5 6⎟
⎜ 7 8 9⎟
⎝
⎠
a(2,3)
a(1, 1 : 3) oppure a(1,:)
•Si può puntare ad un elemento dell’array
indicando gli indici tra parentesi tonde
•Si può puntare ad una riga o ad una colonna
dell’array indicando la variazione degli indici
42
Indirizzamento di parti di
array
1
A=
1
1
4
2
5
9
23
10
1
83
16
2
25
23
1
19
4
13
21
22
18
14
5
4
7
15
6
17
13
0.5
4
9
5
0
5
11
12
8
4
3
1.2
7.2
3
10
7
3
4
6
8
2
A(3,1)
A(3)
2
11
24
5
20
A(1:5,5) A(1:end,end)
A(:,end)
A(:,5)
A(21:25) A(21:end)
0
56
25
10
A(4:5,2:3)
A([9 14;10 15])
43