Sei sulla pagina 1di 26

Introduzione a MATLAB

un ambiente di programmazione per il calcolo


scientifico

Esercitazioni di Termofluidodinamica A.A. 2010-2011

Ing. Diego Angeli diego.angeli@unimore.it


. . . . . .
MATrix LABoratory

MATLAB è un ambiente di programmazione, non


solo un linguaggio:
calcolo
visualizzazione
gestione dell’I/O (Input/Output)
il codice è interpretato e non compilato:
ogni istruzione è eseguita in tempo reale,
i programmi (scripts) e le loro sottounità
(functions) non necessitano di essere codificati
in eseguibili
utilizzo intensivo delle matrici
numerose funzioni built-in e toolbox per
applicazioni specifiche (SIMULINK, statistica, ecc.)
è uno strumento utilissimo per un'enormità di
campi di applicazione scientifici e tecnologici

. . . . . .
MAnnaggia, Troppo LABorioso!

è pressoché impossibile (nonché inutile)


spiegare nel dettaglio tutte le caratteristiche,
i comandi, le funzionalità, gli strumenti di
MATLAB!
the best way to master MATLAB is to put
your hands on it!
nel seguito, si descriveranno alcune (molte)
caratteristiche base, fondamentali per
comprendere l'utilizzo del software
si eseguiranno contestualmente alcuni
esercizi pratici interattivi gestiti dal docente
sono necessarie per apprendere rapidamente
l'utilizzo di MATLAB:
voglia
curiosità
intuizione

. . . . . .
MATLAB Layout

. . . . . .
MATLAB Help

. . . . . .
La finestra di MATLAB I

l’ambiente principale è l’interprete di comandi


(command window).
digitando help nomefunzione si ottiene una breve
descrizione delle funzionalità della funzione built-in
nomefunzione
⇒ ad es.: digitare help plot
dall’interprete dei comandi è possibile usare le
direttive della shell:
direttamente per i comandi più comuni (cd, ls …)
iniziando l’istruzione con un punto esclamativo
(!) per qualunque altro comando

. . . . . .
La finestra di MATLAB II

la finestra del workspace visualizza tutte le variabili


dichiarate nella sessione
la lista delle directory in cui MATLAB ricerca le
funzioni da richiamare si chiama path:
⇒ la lista è contenuta in un apposito file di
configurazione, ed è modificabile dal menu File →
Set Path…
⇒ il path comprende sempre anche il path di
lavoro, ossia la directory corrente
è attivo l’autocompletamento (tasto TAB) per
funzioni nel path e variabili nel workspace
la history è la lista di tutti i comandi eseguiti; essi
possono essere richiamati anche tramite il tasto
"freccia su"

. . . . . .
Espressioni
Il linguaggio di MATLAB si basa su espressioni del tipo
variabile = espressione:
.
>> x = 5;
>> y = 6;
>> z = x + y
z=
. 11
o semplicemente espressione:
.
>> 100/3
ans =
. 33.3333
Note:
omettendo il simbolo ; il risultato di un’espressione viene
visualizzato sulla command window
la risposta di un’espressione senza assegnamento viene
scritta in una variabile di default chiamata ans (answer)
il simbolo % inizia una parte di commento, e ciò che lo
segue su una determinata riga non viene quindi valutato
dal sistema
. . . . . .
Variabili in MATLAB

Tipi di dati
matrici n-dimensionali di numeri interi, reali,
complessi
⇒ MATLAB tratta interi e reali come double (reali
in doppia precisione)
stringhe (sequenze di caratteri)
strutture dati più complesse (tipi strutturati)
variabili logiche che possono assumere il valore 1
(“TRUE”) o 0 (“FALSE”)

Naming conventions
MATLAB è case-sensitive
i nomi di variabili:
possono contenere fino a 19 caratteri
devono iniziare con una lettera
possono contenere lettere, numeri e il
carattere '_'
. . . . . .
Dichiarazioni di variabili

In MATLAB non esistono dichiarazioni di tipi o di


dimensioni:
assegnazione = dichiarazione:
.
Esempi
..
>> a = 5 (scalare)
>> b = [0.5 3 4e-3] (vettore riga)
>> c = [3.3; 80; 0.04] (vettore colonna)
>> k = 2.5 + j*3.2 (numero complesso)
>> m = A = [1 2 3;
4 5 6; (matrice)
7 8 9]
>> s = 'pippo' (stringa)
. >> l = true (variabile logica)

allocazione dinamica: MATLAB alloca direttamente


la memoria necessaria ogni volta che si dichiara o
si modifica una variabile

. . . . . .
Operatori I
Operatori scalari
+, -, *, /, ^
sin, cos, tan, asin, acos, atan
exp, log, log10
abs, sqrt, sign
Operatori vettoriali o matriciali
+, -, *, ^, /, \, '
⇒ * moltiplicazione riga per colonna (A · B 6= B · A !)
⇒ / divisione a destra (A/B = B · A−1 )
⇒ \ divisione a sinistra (A\B = A−1 · B)
⇒ ' trasposizione amn → anm
prodotti, divisioni e elevamenti a potenza elemento
per elemento (element-wise) si ottengono
antecedendo un punto all'operatore:
⇒ .*, ./, .^
tutti gli altri operatori scalari agiscono
element-wise su vettori e matrici
. . . . . .
Operatori II

Funzioni operanti su vettori (o colonne di matrici)


length → numero di elementi
max, min → massimo e minimo
sort → ordinamento
sum, prod, mean → somma, prodotto, valore medio
degli elementi
Funzioni operanti su matrici
inv → inversa di una matrice (quadrata!)
det → determinante
size → dimensioni della matrice
rank → rango
eig → autovalori

. . . . . .
Operatori III

Accesso agli elementi di una matrice A


elemento amn
⇒ A(m,n)
riga m-esima
⇒ A(m,:) (uso della wildcard :)
colonna n-esima
⇒ A(:,n)
sottomatrice di elementi amn , con m1 ≤ m ≤ m2 e
n1 ≤ n ≤ n2
⇒ A(m1:m2,n1:n2)
ultimo elemento della riga m-esima
⇒ A(m,end) (uso della keyword end)

. . . . . .
Operatori IV
Creazione di vettori
senza specificare incremento
⇒ t=1:5 → t=[1 2 3 4 5]
con incremento positivo specificato
⇒ t=0:0.2:1 → t=[0 0.2 0.4 0.6 0.8 1]
con incremento negativo specificato
⇒ t=2:-0.2:1 → t=[2 1.8 1.6 1.4 1.2 1]
con intervallo lineare e numero di elementi
specificati
⇒ t = linspace(0.01,100,1000)
crea un vettore di 1000 elementi equispaziati
tra 0.01 e 100
con intervallo logaritmico e numero di elementi
specificati
⇒ t = logspace(-2,2,1000)
crea un vettore di 1000 elementi equispaziati in
scala logaritmica tra 10−2 e 102
. . . . . .
Operatori V
Creazione di matrici
eye(n) → matrice identità n × n
zeros(m,n) → matrice nulla m × n
ones(m,n) → matrice di 1 m × n
rand(m,n) → matrice m × n di valori casuali (tra 0 e 1)
diag(X):
⇒ se X è un vettore con n elementi → matrice
diagonale n × n con gli elementi di X sulla diagonale
⇒ se X è una matrice diagonale n × n → vettore di n
elementi pari a quelli della diagonale di X
[X Y] = meshgrid(x,y) → supporto di una griglia 2D da
due vettori x e y
Operatori condizionali
<, >, <=, >= → operatori d’ordine (<, >, ≤, ≥)
==, ~= → operatori di confronto (=, 6=)
~ → NOT logico
& → AND logico
| → OR logico
. . . . . .
Comandi di uso generale

who elenco delle variabili definite in memoria


whos informazioni su tutte le variabili in memoria
clear cancella tutte le variabili in memoria (o una o
più in particolare, se specificate)
save salva tutte le variabili in memoria (o una o più in
particolare, se specificate) sul file specificato, in
vari formati (di default, in formato binario con
estensione .mat)
load richiama in memoria le variabili salvate su un
file .mat o carica un file di testo contenente dati in
colonna
diary salva sul file di testo diary quanto da quel
momento appare sulla linea di comando
what elenco di tutte le funzioni e script MATLAB
nell’area di lavoro (estensione .m) e dei file di dati
che sono stati salvati (estensione .mat)
close chiude la finestra grafica corrente
. . . . . .
Espressioni condizionali I

Costrutto IF…THEN…ELSE…
.
if condizione1
operazioni1;
elseif condizione2
operazioni2;
else
operazioni3;
.
end
Costrutto SWITCH…CASE…
.
switch variabile
case espressione1
operazioni1;
case {espressione2, espressione3, espressione4}
operazioni234;
...
otherwise
operazioni;
.
end

. . . . . .
Cicli

Costrutto FOR…
.
for k = ninizio:step:nfine
operazioni;
.
end

Costrutto WHILE…
.
while condizione
operazioni;
.
end
Nota
⇒ In generale, tutti i costrutti in MATLAB
permettono la concatenazione di diverse istruzioni,
che vanno separate da virgole

. . . . . .
Visualizzazione Dati I

Grafica 2D: principali comandi


figure Apre una finestra grafica
plot Grafico x-y da vettori di valori
loglog Grafico con assi logaritmici
semilogx Grafico con asse x logaritmico e y lineare
semilogy Grafico con asse x lineare e y logaritmico
hist Grafico di istogrammi
title Aggiunge un titolo al grafico
xlabel Aggiunge etichetta all'asse x
ylabel Aggiunge etichetta all'asse y
text Aggiunge testo a una posizione specificata
grid (on/off) Mostra o toglie la griglia
hold (on/off) Sovrapposizione plots sugli stessi assi
axis (…) Proporzioni degli assi
subplot Suddivide una figura in più sottofigure

. . . . . .
Visualizzazione Dati II

Principali parametri della funzione plot


SIMBOLO COLORE SIMBOLO STILE LINEA
y giallo . punto
m magenta o cerchio
c ciano x croce
r rosso + segno +
g verde - linea continua
b blu -- linea tratteggiata
w bianco -. linea-punto
k nero : linea punteggiata
Grafica 3D: principali comandi
plot3 Grafico a linea 3D
contour,contour3 Isolinee di una matrice di dati
pcolor Grafico 2D a pseudocolore
mesh, meshc, meshz Superfici 3D prospettiche
surf,surfc,surfl Grafici di superficie
slice Grafico volumetrico a fette
zlabel Aggiunge etichetta all'asse z
clabel Aggiunge etichetta a curve di livello
. . . . . .
M-files

oltre ai comandi interpretati in linea, è possibile


scrivere programmi (ossia liste di comandi) sotto
forma di scripts
analogamente, è possibile scrivere nuove functions
che si affiancano alle numerosissime funzioni
built-in
scripts e functions sono contenuti nei cosiddetti
M-files, ossia files con estensione .m
cliccando sull'icona o accedendo al menu File →
New… → Blank M-File si apre la finestra dell'editor di
MATLAB
oltre alla scrittura, l'editor offre funzionalità
avanzate come:
debugging passo passo
controllo sintassi
function browser
help in linea

. . . . . .
MATLAB Editor

. . . . . .
Scripts

Esempio di Script
Gli scripts sono liste di
istruzioni contenute in un
file .m
Una volta completati (e
salvati), possono essere
avviati:
digitando il nome del
file sulla linea di
comando
dal menu Debug → Run
cliccando sull’icona

Nota
utilizzo del comando
input(stringa) per
l'inserimento in linea
di valori

. . . . . .
Functions
Esempio di Function
Gli M-Files contenenti
functions devono avere
lo stesso nome della
funzione stessa
Con riferimento
all'esempio:
calcola_somma → nome
function
x, y → variabili in
ingresso
z → variabile in uscita

Nota
Le variabili utilizzate in
una funzione sono
locali

. . . . . .
Esercizi proposti I

creare la matrice A = [1 2 3; 4 5 6; 7 8 9]
calcolare determinante e rango di A
aggiungere ad A una matrice 3 × 3 di numeri casuali
e scrivere il risultato nella matrice B
aggiungere ad A la matrice identità 3 × 3 e scrivere
il risultato nella matrice C
aggiungere ad A una matrice 3 × 3 di soli 1 e
scrivere il risultato nella matrice D
aggiungere ad A la sua trasposta e scrivere il
risultato nella matrice E
introdurre il vettore colonna b = [3; 4; 5]
commentare il risultato delle istruzioni A\b, A\b', B\b
salvare le variabili del workspace nel file test.mat
cancellare l'intero contenuto del workspace
ricaricare il workspace contenuto nel file test.mat
stampare a schermo informazioni sulle variabili del
workspace
. . . . . .
Esercizi proposti II

disegnare il grafico della tangente iperbolica (tanh)


nell’intervallo [-10 10] con passo definito dall’utente
(inserire titolo, legenda e label) e con linea
formattata a piacimento
scrivere un programma che disegni i grafici di
tangente, seno e coseno iperbolici (tanh, sinh, cosh)
nell’intervallo [n m] con d elementi (n, m, d definiti
dall’utente, inserire titolo, legenda e label e diversi
colori e simboli)
scrivere un programma che prenda in input una
matrice casuale (di dimensione n definita
dall'utente) e disegni due grafici nella stessa figura:
contour e pcolor
scrivere un programma che disegni il grafico della
funzione Z = X .*exp(-X.^2 - Y. ^2) con X e Y definiti
rispettivamente in [n1 m1] e [n2 m2] e con d elementi
(usare surfl contour, contour3 contourf, pcolor, mesh))

. . . . . .