Sei sulla pagina 1di 62

MATLAB

MATrix LABoratory
MATLAB
Sistema software interattivo
per il Calcolo Scientifico che integra
programmazione, calcolo e
visualizzazione

aa 10/11 2
Il Sistema MATLAB è
costituito da
Linguaggio
Ambiente di lavoro
Gestore di grafici
Funzioni matematiche
Programma di interfaccia con le
applicazioni

aa 10/11 3
Come si presenta

Spazio di lavoro
Finestra dei comandi (Command Window)
In questa finestra è possibile inserire i comandi
nel linguaggio di MATLAB

Lista di comandi

aa 10/11 4
help

Matlab possiede un aiuto in linea che


può essere ottenuto con due modalità:

1. digitando help nome dalla finestra


dei comandi
2. attivando l’aiuto dalla barra dei
menu

aa 10/11 5
lookfor

E’ uno strumento di Matlab per la ricerca per


parole chiave.
Si attiva digitando lookfor keyword dalla
finestra dei comandi.

aa 10/11 6
Definizione di variabili
MATLAB come calcolatrice
» a = 2; Il „;‟ inibisce
» -5/(4.8+5.32)^2 l‟output sullo
ans = » b = 5; schermo
-0.0488 » a^b
» (3+4i)*(3-4i) ans = Risultati
ans = 32 assegnati ad
25 “ans” se il
» x = 5/2*pi; nome non è
» cos(pi/2) specificato
» y = sin(x)
ans =
6.1230e-017 y =
» exp(acos(0.3)) 1
( ) parentesi
ans = » z = asin(y) tonde per
3.5470 z = input alle
funzioni
1.5708
aa 10/11 8
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
aa 10/11 9
Input di una matrice
» a=[1 2;3 4]
a = Parentesi
quadre [ ]
1 2
3 4

 „ ; ‟ separatore di righe

 spazio / virgola „ , ‟ separatore di


colonna

aa 10/11 10
oppure
» a=[1 2
3 4] Parentesi
quadre [ ]
»a =
1 2
3 4

separatore di righe 

 spazio / virgola „ , ‟ separatore di


colonna
aa 10/11 11
oppure
» 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.
aa 10/11 12
Costruzione degli elementi
Espansione scalare » w=[1 2;3 4] + 5
w =
6 7
8 9
Operatore „:‟ (colon) » x = 1:5
per creare sequenze
x =
1 2 3 4 5
» y = 2:-0.5:0
y =
2.0000 1.5000 1.0000 0.5000
0
Rand: funzione di » z = rand(2,4)
utilità per creare z =
matrici
0.9501 0.6068 0.8913 0.4565
0.2311 0.4860 0.7621 0.0185
aa 10/11 13
Le matrici in MATLAB

Colonne
(n)
1 2 3 4 5
A= 4 10 1 6 2 A (2,4)
1 1 6 11 16 21

2
8 1.2 9 4 25
2 7 12 17 22

Righe (m) 3 7.2 5 7 1 11 A (17)


3 8 13 18 23

4 0 0.5 4 5 56
4 9 14 19 24

5 23 83 13 0 10
5 10 15 20 25

aa 10/11 14
Memorizzazione degli array
Matlab memorizza gli array come un unico
vettore colonna, che contiene le colonne
dell‟array aggiunte consecutivamente
1
 
 4
1 2 3 7
   
a  4 5 6  2
5
7 9   
 8 8
 3
 
6
9
aa 10/11   15
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


aa 10/11 calcolo 16
Concatenazione di array

[ ] per » a=[1 2;3 4]


a = Parentesi
combinare 1 2 quadre [ ]
array già 3 4
definiti come » cat_a=[a, 2*a; 3*a, 4*a; 5*a, 6*a]
elementi di cat_a =
1 2 2 4
nuovi array 3 4 6 8
3 6 4 8
4*a
9 12 12 16
5 10 6 12
15 20 18 24
Nota:
L’array risultante deve essere rettangolare
aa 10/11 17
Esempio: a(2,3)

 1 2 3
 
a   4 5 6
7 8 9
 
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

aa 10/11 18
Indirizzamento di parti di
array
1 2 3 4 5
A= 1 6 11 16 21
1 4 10 1 6 2
2 7 12 17 22
2 8 1.2 9 4 25
A(1:5,5) A(1:end,end)
3 8 13 18 23 A(:,5) A(:,end)
3 7.2 5 7 1 11 A(21:25) A(21:end)
A(3,1) 4 9 14 19 24
A(3) 4 0 0.5 4 5 56
5 10 15 20 25
5 23 83 13 0 10

A(4:5,2:3)
A([9 14;10 15])
aa 10/11 19
Cancellazione di righe e colonne
» A=[1 5 9;4 3 2.5; 0.1 10 3i+1]
A =
1.0000 5.0000 9.0000
4.0000 3.0000 2.5000
0.1000 10.0000 1.0000+3.0000i
» A(:,2)=[]
A =
1.0000 9.0000
4.0000 2.5000
0.1000 1.0000 + 3.0000i
» A(2,2)=[]
??? Indexed empty matrix assignment is not allowed.

aa 10/11 20
Esercizi
1.Costruire una matrice A di ordine 4x7
di interi casuali compresi tra -10 e 10
2.Estrarre la prima colonna dalla
matrice
3.Assegnare all‟elemento A22 il valore 5
4.Aggiungere una colonna alla matrice A
• alla fine
• fra la seconda e la terza colonna
aa 10/11 21
Esercizi
•Digitare help colon e cercare di capire dall’aiuto
in linea l’uso del carattere „:‟ per specificare un
incremento di valori con passo costante
•Dati due vettori a e b di uguali dimensioni,
costruire il vettore c le cui componenti di posto
dispari siano uguali alle componenti di a e quelle di
posto pari a quelle di b
Ad es. a =(1, 4, 0, 5) e b=(2, 3, 5, 7)  c=(1, 2, 4, 3, 0, 5, 5 ,7)

•Assegnate due matrici rettangolari C e B di ordine


m × n e due interi r e s minori di m, modificare C in
modo che abbia nelle prime r righe le corrispondenti
righe di B e nelle successive s righe le prime s righe
di C
aa 10/11 22
Funzioni built-in per la manipolazione di
matrici
• ones: crea un array di elementi uguali ad 1
• eye: matrice identica
• rand: numeri random uniformemente distribuiti
• diag: matrici diagonali e diagonali di una matrice
• size: dimensioni di un array
• fliplr: inverte l’ordine delle colonne di una
matrice
• zeros: crea un array di elementi nulli
• flipud: inverte l’ordine delle righe di una matrice
• repmat: Replica una matrice in un array

aa 10/11 23
Funzioni built-in per la manipolazione di
matrici
• transpose (‟): matrice trasposta
• rot90: ruota una matrice di 90°
• tril: parte triangolare inferiore di una matrice
• triu: parte triangolare superiore di una matrice
• dot: prodotto scalare di vettori
• det: determinante di una matrice
• inv: inversa di una matrice
• eig: autovalori ed autovettori
• rank: rango di una matrice
• reshape: ridimensiona la matrice
• ………
aa 10/11 24
Funzioni matematiche elementari
• abs, sign: valore assoluto e funzione segno
• sin, cos, asin, acos…: funzioni trigonometriche
• exp, log, log10: esponenziale e logaritmo
• ceil, floor, fix : arrotondamenti agli interi
• round: arrotondamento all’intero più vicino
• gcd: massimo comun divisore
• lcm: minimo comune multiplo
• sqrt: radice quadrata
• rem: resto della divisione
• real, imag: parte reale e parte immaginaria di
numeri complessi
aa 10/11 25
Funzioni matematiche elementari

• max, min: massimo e minimo di array


• mean, median: media e mediana di array
• std, var: deviazione standard e varianza
• sort: ordinamento in ordine crescente
• sum, prod: somma e prodotto di elementi
• .........

aa 10/11 26
Variabili predefinite

1. ans nome della variabile di default in uscita


2. pi pi greco
3. eps il numero più piccolo che addizionato a 1 crea un
numero floating- point maggiore di 1 nel computer
4. inf infinito
5. NaN Not-a-Number, numero indefinito (p.es. 0/0)
6. i e j i = j = 1
7. realmin il numero reale positivo più piccolo
utilizzabile
8. realmax il numero reale positivo più grande
utilizzabile

aa 10/11 27
esempi
Calcoli che danno risultati infiniti o non definiti
senza che il sistema si blocchi o dia particolari
errori:
>> 1/0
Warning: Divide by zero
ans =
Inf

>> -1/0
Warning: Divide by zero
ans =
-Inf

>> 0/0
Warning: Divide by zero
ans =
NaN

aa 10/11 28
Operazioni su matrici

+ addizione

- sottrazione

* moltiplicazione riga per colonna


^ elevamento a potenza
„ trasposizione

aa 10/11 29
Operazioni su array
C=A .*B Cij  Aij * Bij
C=A .^B Cij  Aij
Bij

C=A .\B Cij  Bij / Aij


C=A ./B Cij  Aij / Bij

Per eseguire operazioni aritmetiche su


array componente per componente
si premette il punto all’operatore
L’addizione e la sottrazione di matrici sono operazioni
eseguite sempre componente per componente
aa 10/11 30
Moltiplicazione di matrici
» a = [1 2 3 4; 5 6 7 8]; [2x4]
» b = ones(4,3); [4x3]
» c = a*b [2x4]*[4x3] [2x3]
c =
10 10 10
26 26 26 a(2a riga)×b(3a colonna)

Moltiplicazione di array
» a = [1 2 3 4; 5 6 7 8]; [2x4]
» b = [1:4; 1:4]; [2x4]
» c = a.*b [2x4]
c =
1 4 9 16
5 12 21 32 c(2,4) = a(2,4)*b(2,4)

aa 10/11 31
ESEMPIO:
» A=[1 2 2; 2 1 1; 0 3 1];
» A=A ^ 2
A =
5 10 6
4 8 6
6 6 4

» A=[1 2 2; 2 1 1; 0 3 1];
» A=A .^ 2
A =
1 4 4
4 1 1
0 9 1

aa 10/11 32
Variabili logiche o booleane
Associando a :
1 il valore vero
0 il valore falso

si possono usare variabili di tipo logico


anche se non esplicitamente dichiarate

Una variabile il cui valore è diverso da 0


si dice
logicamente vera
aa 10/11 33
Operatori logici
~ Not
& And
| Or

Gli operatori logici operano in generale su array


della stessa dimensione.
Se un operando è uno scalare e l’altro no,
l’operazione viene applicata a ciascun elemento
dell’array
(espansione scalare)
aa 10/11 34
Il carattere ~
• tasti alt + shift e tasto |

oppure

• alt + 126 (codice ASCII)


• copia e incolla da Word

aa 10/11 35
ESEMPIO:
» a=[1 2 3 0 1];
» b=[1 0 0 0 1];
» a & b
ans =

1 0 0 0 1
» ~ans
ans =
0 1 1 1 0

» a|b
ans =

1 1 1 0 1

aa 10/11 36
Operatori relazionali
Si possono utilizzare su tutti i dati dotati di un
ordinamento naturale

< Minore
> Maggiore
<= Minore o uguale
>= Maggiore o uguale
== Uguale
~= Non uguale
aa 10/11 37
Anche questi operatori si comportano come gli operatori
logici quando si opera con array e scalari.
Componenti per cui il risultato dell’operazione è vero
assumono valore 1, quelle per cui è falso assumono valore 0.
ESEMPIO:
» x=2.5
x =
2.5000
» a=2;b=3;
» L=x<=b
L =
1
» L2=x>=a
L2 =
1
» L&L2
ans =

aa 10/11
1 38
ESEMPIO
» Mass = [-2 10 NaN 30 -11 Inf 31];
» pos = Mass>=0
pos =
0 1 0 1 0 1 1
» all_pos = all(Mass>=0)
all_pos =
0
» all_pos = any(Mass>=0)
all_pos =
1
» pos_fin = (Mass>=0)&(isfinite(Mass))
pos_fin =
0 1 0 1 0 0 1

aa 10/11 39
Esercizi
•Dato il vettore x=(1, 34, 2, -12, 56, 7, 0, 9) ,
visualizzare i valori maggiori di 5 (usare la
funzione find)
• Assegnata una matrice A di interi, porre a zero
gli elementi pari, usando la funzione rem o mod
•Dati i vettori x=(1, 2, –1, 3)T e y=(2, 4, -1,6)T
costruire la matrice B=x*yT , determinare il rango
(usare la funzione rank) e motivare la risposta di
Matlab
•Provare che i vettori x=(1, 2, 3, 4), y=(2, 1, 0, 4) e
z=(0, 1, 1, 4) sono linearmente indipendenti
aa 10/11 40
Stringhe

In MATLAB il termine stringa si riferisce


ad un array di caratteri e la sua
rappresentazione interna corrisponde al
valore ASCII dei caratteri.
Sono riconosciute come stringhe le sequenze
di caratteri racchiuse tra apici.

aa 10/11 41
Variabili stringa
Vengono create usando l’apice (') come
delimitatore
» str = 'Ehi, ciao'
str =
Ehi, ciao
» str2 = 'non e'' una bella giornata?'
str2 =
non e' una bella giornata?

 Ciascun carattere è un elemento di array


(16 bit per carattere)
str = E h i , c i a o array 1x9

Stesso indirizzamento degli array numerici


aa 10/11 42
E’ possibile creare array bidimensionali di
caratteri con la sola limitazione che le righe
abbiano la stessa lunghezza

ESEMPIO: Due spazi

» Nome=[‘Giovanna’; ‘Franca ’]
Nome =
Giovanna
Franca
» Nome1= char (‘Giovanna’, ‘Franca’)
Nome1 =
automaticamente
Giovanna
inserisce caratteri bianchi alla fine
Franca delle stringhe più corte

aa 10/11 43
Concatenazione di stringhe
Questa operazione avviene sfruttando la capacità
di MATLAB nella gestione degli array.
ESEMPIO:
Sia Nome la variabile precedentemente definita, allora
l’istruzione:
sottostringhe

» S= [ Nome(1, :) Nome(2, : ) ]

S =

GiovannaFranca

aa 10/11 44
Per lavorare con Array di stringhe

 Confronto tra stringhe:


– strcmp: confronta le stringhe per intero
– strncmp: confronta i primi ‘N’ caratteri
– findstr: trova sottostringhe in stringhe più lunghe

 Conversione fra array numerici & stringhe:


– num2str: converte un array numerico a stringa
– str2num: converte una stringa ad array numerico

aa 10/11 45
Aritmetica di MATLAB

Matlab utilizza il Sistema aritmetico


Floating-point Standard IEEE in doppia precisione

F = ( 2, 52, -1024, 1023)

base Emin
precisione Emax
aa 10/11 46
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
aa 10/11 47
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 Visualizzazione
12.3456789123456 12.3457
123.456789123456 123.4568
1234.56789123456 1.2357e+3
0.00012456789123 1.2346e-4
aa 10/11 48
ESEMPIO: format short e

Viene visualizzato il valore in formato floating-


point con una cifra della parte intera e 4 della
parte decimale

Numero Visualizzazione
12.3456789123456 1.2346e+1
123.456789123456 1.2346e+2
1234.56789123456 1.2357e+3
0.00012456789123 1.2346e-4

aa 10/11 49
ESEMPIO: format short g

Viene visualizzato il valore migliore tra il formato


floating-point e fixed-point

Numero Visualizzazione
12.3456789123456 12.3457
123.456789123456 123.4568
1234.56789123456 1.2357e+3
0.00012456789123 1.2346e-4

aa 10/11 50
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

aa 10/11 51
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
>> ans esponente
ans =
001111001011
3cb0000000000000

segno

aa 10/11
(1+0.)2(-52) = 2.220446049250313e-016 52
ESEMPIO: format rat
Approssima il valore con una frazione continua
della forma:
n 1
 d1 
d 1
d2 
>> 1/2 1
d3 
ans = 1
0.50000000000000

dk
>> format rat
>> ans
ans =
1/2
>> pi
ans =
355/113  non è un numero razionale!

aa 10/11 53
Caricare i dati da un file

con il comando load


 da un M-file
mediante Import Wizard
usando le funzioni di I/O da file

aa 10/11 54
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 Crea il file mat_vet.mat
>> clear Cancella il contenuto del
workspace
>> load mat_vet

Nel workspace non ci sono più


le variabili A e B

Carica le variabili A e B nel


workspace

aa 10/11 55
Esempio 2:
>> 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
>> clear Cancella il contenuto del
>> load mat_vet workspace
>> mat_vet
A e B non sono più definite
mat_vet =
1 2 3
4 5 6
0 0 1

aa 10/11 56
load

Se i dati si trovano in load nomefile


un file con estensione Copia tutte le variabili
.mat (creato ad del file nel workspace
esempio con il
comando save)
Se i dati si trovano in load nomefile
un file ascii Copia i dati in una sola
variabile chiamata
nomefile
aa 10/11 57
Esempio 3:
>> 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 Crea il file mat_vet
>> clear Cancella il contenuto del
>> load mat_vet 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.

aa 10/11 58
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.

aa 10/11 59
Esempio:

aa 10/11 60
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

aa 10/11 61
Esempio:

aa 10/11 62
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.

 fopen
 fread
 fwrite
 fclose

aa 10/11 63