BOZZA
Introduzione a MATLAB®
BOZZA
BOZZA
„ Matlab sta per Matrix Laboratory ed è un ambiente interattivo e un
linguaggio di calcolo tecnico di alto livello per lo sviluppo di algoritmi, la
rappresentazione grafica dei dati, l'analisi dei dati e il calcolo numerico.
„
Matlab include vari moduli aggiuntivi, chiamati Toolbox, per
applicazioni specifiche. (Signal Processing Toolbox, Image Processing
Toolbox, etc…)
„ Il linguaggio MATLAB supporta operazioni su vettori e matrici.
„ Con il linguaggio MATLAB, è possibile programmare e sviluppare
algoritmi più rapidamente rispetto ai linguaggi tradizionali, in quanto
non è necessario eseguire attività di gestione codice a basso livello
come la dichiarazione di variabili, la specificazione dei tipi di dati e
l'assegnazione della memoria. In molti casi MATLAB elimina la
necessità di utilizzare loop.
di Fabio Bozzoli
21
BOZZA
Introduzione
BOZZA
BOZZA
Funzioni principali
„
„
„
„
„
„
Linguaggio di alto livello per il calcolo tecnico
Ambiente di sviluppo per la gestione di codice, file e dati
Funzioni matematiche per l'algebra lineare, la statistica, l'analisi di
Fourier, il filtraggio, l'ottimizzazione e l'integrazione numerica
Funzioni grafiche in 2D e 3D per la rappresentazione grafica dei
dati
Strumenti per la creazione di interfacce grafiche personalizzate
Funzioni per integrare gli algoritmi basati su MATLAB con linguaggi
e applicazioni esterni come C/C++, Fortran, etc…
di Fabio Bozzoli
22
BOZZA
Introduzione
BOZZA
BOZZA
Analisi dei dati
„
MATLAB supporta l'intero processo di analisi dei dati,
dall'acquisizione da database e periferiche esterni fino alla preelaborazione, visualizzazione, analisi numerica e produzione dei
risultati in un formato adatto a presentazioni. (Interpolazione e
decimazione , estrazione di sezioni di dati, scalatura e calcolo della
media, correlazione, analisi di Fourier e filtraggio, funzioni
statistiche di base e curve fitting)
Accesso ai dati
„
MATLAB è un'efficace piattaforma per accedere ai dati da file, altre
applicazioni, database e periferiche esterne. È possibile leggere i
dati dai formati di file più diffusi, ad esempio Microsoft Excel, testi in
formato ASCII o file binari, file video, audio e immagini. È’ possibile
acquisire dati dalle periferiche hardware, ad esempio dalla scheda
audio o dalla porta seriale di un computer. (Data Acquisition
Toolbox, Instrument Control Toolbox)
di Fabio Bozzoli
23
BOZZA
Introduzione
BOZZA
BOZZA
Visualizzazione dei dati
•
In MATLAB sono disponibili
tutte le funzioni grafiche
necessarie per visualizzare i
dati tecnico-scientifici. Sono
inclusi: funzioni grafiche in 2-D
e 3-D, funzioni per la
rappresentazione volumetrica 3D, strumenti per la creazione
interattiva dei diagrammi e la
possibilità di esportare i risultati
in tutti i formati grafici più diffusi.
Creazione ed editing
interattivo dei grafici
di Fabio Bozzoli
24
BOZZA
Introduzione
BOZZA
BOZZA
Calcolo numerico
„
MATLAB comprende le funzioni matematiche, statistiche e
tecniche per supportare tutte le operazioni più comuni di natura
scientifica e tecnica. Tali funzioni costituiscono la base del
linguaggio MATLAB. Le funzioni matematiche principali utilizzano
le librerie di algebra lineare LAPACK e BLAS e la libreria della
Trasformata Discreta di Fourier FFT.
„
Manipolazione delle matrici e algebra lineare
Polinomi e interpolazioni
Analisi di Fourier e filtraggio
Analisi dei dati e funzioni statistiche
Ottimizzazione e integrazione numerica
Equazioni differenziali ordinarie (ODE)
Equazioni differenziali parziali (PDE)
Operazioni su matrici
„
„
„
„
„
„
„
di Fabio Bozzoli
25
BOZZA
Introduzione
„
„
„
BOZZA
BOZZA
MATLAB offre agli utenti una serie di funzioni per documentare e
condividere il proprio lavoro. Il codice MATLAB può essere
integrato con altri linguaggi e altre applicazioni, consentendo così
di utilizzare le applicazioni e gli algoritmi MATLAB come
programmi standalone o come moduli software.
MATLAB presenta funzioni per integrare con le proprie
applicazioni il codice C e C++, il codice Fortran
Rilascio di applicazioni
È possibile creare un algoritmo in MATLAB e distribuirlo ad altri
utenti MATLAB sotto forma di codice M. Con il MATLAB Compiler
(disponibile separatamente), l'algoritmo creato dall'utente può
essere rilasciato come applicazione standalone oppure come
modulo software da inserire nel progetto destinato agli utenti che
non dispongono di MATLAB.
di Fabio Bozzoli
26
BOZZA
BOZZA
BOZZA
Avviare una sessione di lavoro
„
„
„
Avviando Matlab si apre una sessione di lavoro e il prompt >> indica che il
programma è pronto a ricevere istruzioni.
Es. Digitando 7/10 e INVIO si ottiene
» 7/10
ans =
0.7000
Matlab assegna la risposta ad una variabile temporanea (ans).
E’ possibile memorizzare il risultato anche in un’altra variabile
Es. r=7/10
„
„
r=
0.7000
Non e’ necessario né dimensionare né dichiarare il tipo di variabile
Il segno = è l’operatore di assegnazione o sostituzione, da non confondere con
l’operatore di uguaglianza (==)
I nomi delle variabili devono iniziare con una lettera e non possono essere più
lunghi di 31 caratteri. Possono contenere numeri e il carattere “underscore”.
Matlab è case sensitive.
di Fabio Bozzoli
27
BOZZA
BOZZA
BOZZA
Avviare una sessione di lavoro
„ Matlab conserva l’ultimo valore di una variabile finchè non chiudete
„
„
„
„
„
„
„
la sessione di lavoro o non cancellate espressamente il valore
della variabile.
Alcuni comandi per gestire una sessione di lavoro:
who elenca le variabili che si trovano in memoria.
whos elenca le variabili, le loro dimensioni e indica se possiedono
parti immaginarie non nulle.
pwd visualizza il percorso della directory corrente.
dir visualizza il contenuto della directory corrente.
cd consente di cambiare directory.
clear elimina tutte le variabili dalla memoria.
Il punto e vigola al termine dell’istruzione consente di non
visualizzare il risultato dell’operazione.
di Fabio Bozzoli
28
BOZZA
BOZZA
Array e variabili
BOZZA
„ MATLAB utilizza la rappresentazione in virgola mobile in singola (32
bits) o doppia precisione (64 bits), in accordo a lo standard IEEE 754 .
Il default è la doppia precisione, ma è possibile convertire un double in
singola precisione.
„ Uno dei punti di forza di Matlab è la capacità di raccogliere molti numeri
in strutture chiamate array (o matrici) come se fossero una sola
variabile. Un array numerico è una raccolta ordinata di numeri.
Vettore: array monodimensionale
Matrice: array a due o più dimensioni.
„ Per inseririe un vettore riga:
r=[2,4,10]
„ Per inseririe un vettore colonna:
s=[2;4;6]
di Fabio Bozzoli
29
BOZZA
BOZZA
Array e variabili
BOZZA
„ Per inserire una matrice 3x3 digitate:
„
„
„
„
Es. A=[1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
Per riferirsi agli elementi di un array si usano le parentesi rotonde e gli
indici di riga e di colonna separati da virgole.
A(1,2) è l’elemento a1,2
Per riferirsi ad intere righe o colonne si usano i due punti.
A(:,2) indentifica tutti gli elementi nella 2° colonna di A
Per unire vettori a matrici
A=[1,2,3;4,5,6;7,8,9];
V=[10,11,12];
A=[A;v];
Operazioni importanti: trasposta, rotazione, ribaltamento
di Fabio Bozzoli
30
BOZZA
Esercizio
„
BOZZA
BOZZA
Partendo dalle matrici .
⎡1 2 3⎤
A = ⎢⎢4 5 6⎥⎥
⎢⎣7 8 9⎥⎦
⎡13⎤
C = ⎢⎢14⎥⎥
⎢⎣15⎥⎦
B = [10 11 12]
D = [0 0 0]
di Fabio Bozzoli
31
BOZZA
Esercizio
„
BOZZA
BOZZA
Ottenete le matrici .
⎡1 4 7 10 13⎤
R1 = ⎢⎢2 5 8 11 14⎥⎥
⎢⎣3 6 9 12 15⎥⎦
⎡7 8⎤
R4 = ⎢
⎥
⎣4 5⎦
⎡8 9 ⎤
R2 = ⎢
⎥
⎣11 12⎦
⎡4 5⎤
R3 = ⎢
⎥
⎣7 8⎦
di Fabio Bozzoli
32
BOZZA
File .m
BOZZA
BOZZA
„ In Matlab è possibile operare in due modi differenti:
In modalità interattiva
„ Eseguire un programma di matlab registrato in un file di tipo m
o m-file.
„ Esistono due categorie di M-file: file script e file di funzione.
„ Con il comando edit si apre l’editor di Matlab.
„
di Fabio Bozzoli
33
BOZZA
Stringhe
BOZZA
BOZZA
„ Un testo in Matlab viene interpretato come un vettore di caratteri. Le
stringhe di caratteri vanno racchiuse tra apici
A=‘stringa di testo’
Le stringhe di testo possono essere visualizzate con il comando disp
In un m-file l’introduzione interattiva di dati può ottenersi con la funzione
input
N=input(‘Numero di discretizzazioni ….’)
nome=input(‘ Come ti chiami?’,’s’)
Altre funzioni per la gestione delle stringhe di testo:
Int2str, str2num, strncmp…..
di Fabio Bozzoli
34
BOZZA
BOZZA
Altri tipi di dati
BOZZA
„ Celle (Cell array)
„ Strutture
Celle
Le celle sono array che possono contenere elementi di tipo diverso tra
loro. Possono essere create direttamente per assegnamento o
utilizzando il comando cell. L’indicizzazione ad una cella avviene
tramite le parentesi graffe.
Es. A=rand(2,2) c={A, det(A), inv(A)}
L’uso principale previsto è quello relativo alla gestione delle stringhe.
di Fabio Bozzoli
35
BOZZA
BOZZA
Altri tipi di dati
BOZZA
Strutture
Sono arrays multidimensionali a cui si accede tramite la definizioni di
campi.
Es. studente.nome=‘Marco’
studente.cognome=‘Bianchi’
studente.ccl=‘Meccanica’
studente.anno=‘quinto’
Un intero elemento può essere aggiunto con
studente(2)=struct(‘nome’,’Paolo’,’cognome’,’Verdi’,’ccl’,’Elettronica’,’anno’,
’quarto’)
……………
di Fabio Bozzoli
36
BOZZA
BOZZA
Operazioni con le matrici
BOZZA
„ Gli elementi sono separati da spazi o virgole, le righe dal punto e
virgola entro parentesi quadre.
„ Matlab consente di effettuare operazioni su matrici in modo molto
semplice.
„
Es. B= A’ calcola la trasposta della matrice A e
memorizza il risultato nella matrice B.
» B=A'
B=
1 4
2 5
3 6
7
8
9
di Fabio Bozzoli
37
BOZZA
BOZZA
BOZZA
Operatori matematici
„ Osservate il risultato delle seguenti operazioni:
„
„
A+2, A-2, A*2, A/2
C=A+B, D=A*B, E=A/B, F=A.*B, G=A./B, H=A.^2
„ Operazioni aritmetiche scalari
„
„
„
„
„
„
^ Elevazione a potenza
* Moltiplicazione
/ Divisione a destra
\ Divisione a sinistra
+ Addizione
- Sottrazione
Ordine di precedenza standard della programmazione
di Fabio Bozzoli
38
BOZZA
BOZZA
BOZZA
Operatori matematici
„ Operazioni con le matrici (elemento per elemento)
„
„
„
„
„
„
„
„
„
„
„
+ Somma array scalare
- Sottrazione array scalare
+ Somma di matrici
- Sottrazione di matrici
.* Moltiplicazione di matrici elemento per elemento
./ Divisione destra di matrici elemento per elemento
.\ Divisione sinistra di matrici elemento per elemento
.^ Elevamento a potenza elemento per elemento
* Moltiplicazione di matrici riga per colonna
/ Divisione destra
\ Divisione sinistra o inversa
di Fabio Bozzoli
39
BOZZA
BOZZA
BOZZA
Divisione matriciale
„ Se A è una matrice quadrata invertibile e B è un vettore
X=A\B è la soluzione di AX=B
X=B/A è la soluzione di XA=B
Quindi B/A=(A’\B’)’
„ Se la matrice è mxn vi sono 2 casi
„ m>n sistema sovradeterminato (soluzione ai minimi quadrati)
„ m<n sistema sottodeterminato (soluzione fondamentale con al più m
componenti non nulle)
di Fabio Bozzoli
40
BOZZA
BOZZA
BOZZA
Divisione matriciale
„ Metodo matriciale
⎡2 9 ⎤⎡ x1 ⎤ ⎡5⎤
⎢3 − 4⎥⎢ x ⎥ = ⎢7⎥
⎣
⎦⎣ 2 ⎦ ⎣ ⎦
2x1+9x2=5
„ 3x1-4x2=7
„ Ax=b
„ x=A\b (DIVISIONE SINISTRA)
„ Se il sistema è scritto nella forma Xc=D
„
x=D/c (DIVISIONE DESTRA)
[x1
⎡6 2⎤
x2 ] ⎢
= [3 −19]
⎥
⎣3 5⎦
di Fabio Bozzoli
41
BOZZA
BOZZA
Operatori relazionali
BOZZA
„ = Assegnazione
„ == Uguaglianza
„ < > <= >= Minore, maggiore minore o uguale, maggiore o uguale
„ & AND logico
„ | OR logico
„ ∼ NOT logico
„ Xor OR esclusivo
di Fabio Bozzoli
42
BOZZA
BOZZA
Istruzioni condizionali e cicli
BOZZA
if else, sintassi: if, condizione sulle variabili, istruzioni, else o elseif,
condizione sulle variabili, istruzioni,... end
Es. x=10;
if x>=0
y=sqrt(x)
end
„ While, sintassi: while, condizione sulle variabili, istruzioni end.
A=zeros(4,4);
k=1;
while k<=4
A(k,k)=1,
k=k+1;
end
„ For, sintassi: for, variabile=espressione, istruzioni, end.
A=zeros(4,4);
for k=1:4
A(k,k)=1,
end
„
di Fabio Bozzoli
43
BOZZA
BOZZA
Istruzioni condizionali e cicli
BOZZA
„ Switch case, sintassi: switch(condizione) case ‘valore’
istruzione otherwise end
switch (value)
case {1,3,5,7,9}
disp(‘Il valore è dispari')
case {2,4,6,8,10}
disp(‘Il valore è pari')
otherwise
disp(‘Il valore è al di fuori
dell‘intervallo.)
end
di Fabio Bozzoli
44
BOZZA
Esercizio
BOZZA
BOZZA
Data l’equazione di secondo grado
ax^2+bx+c=0
„ Utilizzando la struttura if elseif end creare un programma al fine
di individuare, noti i coefficienti a,b e c, le caratteristiche delle
soluzioni x1 e x2. Visualizzare su schermo se le soluzioni
dell’equazione saranno reali, reali coincidenti o complesse.
„ Creare un programma analogo utilizzando la struttura switch
case end.
„ Riscrivere il programma utilizzando la struttura while end
di Fabio Bozzoli
45
BOZZA
Soluzione: if
BOZZA
BOZZA
% Programma per la risoluzione di un equazione di II grado complete del tipo ax^2+bx+c=0
delta=(b^2-4*a*c);
d=sqrt(delta);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%IF%%%%%%%%%%%%%%%%
if delta<0
disp('le soluzioni sono complesse coniugate')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
elseif delta==0
disp('le soluzioni reali coincidenti')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
else
disp('le soluzioni reali distinte')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
di Fabio Bozzoli
end
46
BOZZA
BOZZA
Soluzione: Switch
BOZZA
%%%%%%%%%%%%%%SWITCH%%%%%%%%%%%%%%%%%%%%%%
switch sign(delta)
case{-1}
disp('le soluzioni sono complesse coniugate')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
case {0}
disp('le soluzioni reali coincidenti')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
case{1}
disp('le soluzioni reali distinte')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
end
di Fabio Bozzoli
47
BOZZA
BOZZA
BOZZA
Soluzione: While
%%%%%%%%%%%%%%%%%%%WHILE%%%%%%%%%
while delta<0
disp('le soluzioni sono complesse coniugate')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
break
end
while delta==0
disp('le soluzioni reali coincidenti')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
break
end
while delta>0
disp('le soluzioni reali distinte')
disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
break
end
di Fabio Bozzoli
48
BOZZA
Esercizio
BOZZA
BOZZA
„ Creare un programma che, dopo aver “pensato” a un
numero compreso tra 0 e 100, chieda all’utente di
indovinarlo fino a quando non ci riesce. Il programma
darà un aiuto dicendo ogni volta se il numero
introdotto è maggiore o minore di quello da
indovinare.
Utilizzare la struttura while
„ Aiuto: utilizzare rand(1) e round(X) e if dentro a
while
di Fabio Bozzoli
49
BOZZA
Soluzione
BOZZA
BOZZA
x= rand(1)*100;
x= round(x);
y=input('introduci un numero');
while not(x==y)
if x>y
disp('più alto')
else
disp('più basso')
end
y=input('introduci un numero');
end
disp('hai indovinato')
di Fabio Bozzoli
50