Matlab / Octave - Università degli Studi di Trieste

Software di calcolo numerico,
analisi, statistica e
simulazione
Un esempio pratico: Octave
Problemi tradizionali
•
•
•
•
•
•
Risoluzione di funzioni matematiche
complesse
Esecuzione di calcoli matriciali
Analisi ed elaborazione di segnali e immagini
Modellazione matematica di controlli
numerici
Ottimizzazione di funzioni complesse
Analisi statistica di dati sperimentali
Tool di riferimento: matlab
Matlab è il più diffuso e riconosciuto software
per il calcolo numerico, simulazioni
matematiche e molto altro.
http://www.mathworks.it
PRO: grandissima community, librerie già
pronte per ogni genere di problemi, strumenti
grafici per plugin come simulink
CONTRO: licenza a pagamento
Tool disponibili: alternative – 1
Uno dei principali competitor di Matlab è
Mathematica della Wolfram Research
http://www.wolfram.com/mathematica
- A pagamento
- Molto diffuso tra fisici e matematici
- comunità sperimentali
Tool disponibili: alternative - 2
IDL
http://www.exelisvis.com/ProductsServices/IDL.aspx
- A pagamento
- Diffuso tra fisici e astrofisici
- Sta perdendo quota di mercato, a favore di
Matlab
Tool disponibili: alternative - 3
Una buona alternativa a Matlab, gratuita, è la
combinazione:
PYTHON + NumPy e SciPy
http://www.scipy.org/
- Librerie gratuite, linguaggio di scripting noto
- C’è parecchia roba già pronta, facilmente
integrabile con altri prodotti
- Matlab è sempre il punto di riferimento
Tool disponibili: alternative - 4
Octave è una buona alternativa, gratuita
www.gnu.org/software/octave/
PRO: ottima compatibilità (quasi stesso
linguaggio di scripting)
CONTRO: non completo
Anche Scilab è un’altra alternativa gratuita:
http://www.scilab.org/
PRO: abbastanza ricco
CONTRO: scarsa compatibilità
Matlab
“Matlab (abbreviazione di Matrix Laboratory) è
un ambiente per il calcolo numerico e
l’analisi statistica che comprende anche
l'omonimo linguaggio di programmazione.”
(Wikipedia).
In qualunque ambiente di lavoro di ingegneria
vi troverete, dovrete quasi certamente far
uso di algoritmi, codice e utilizzo di
linguaggi di programmazione.
Matlab control toolbox
Matlab contiene uno dei pacchetti più diffusi
per l’analisi e la prototipazione di sistemi di
controllo.
Control System Toolbox e Simulink
http://www.mathworks.it/it/products/control/
http://www.mathworks.it/products/simulink/
Essi non sono presenti nei prodotti
concorrenti.
Octave
Octave è un linguaggio interpretato ad alto livello
orientato al calcolo numerico: moltiplica e inverte
matrici, determina radici di equazioni lineari e non
lineari, manipola polinomi, integra, differenzia e
disegna grafici.
Il suo insieme di funzioni ne comprende molte orientate
all’ottimizzazione,
alla
statistica,
finanziaria,
all’interpolazione, alla teoria del controllo e allo studio
dell’audio e delle immagini.
www.gnu.org/software/octave/
Installazione
Octave è disponibile per vari sistemi operativi,
e può essere utilizzato da chiunque, e
redistribuito secondo la licenza GNU.
Windows:
- scaricare il pacchetto
http://sourceforge.net/projects/octave/files/Octave%20Windows%20binaries/
- scomprimerlo in un luogo a piacere
- avviare l’applicativo con Octave.exe dentro
la cartella bin.
Interfaccia Octave
Octave ha un interfaccia a linea di comando.
Ciò significa che le istruzioni da eseguire
vanno inserite da tastiera, e saranno
interpretate da Octave secondo il suo
linguaggio di programmazione.
Octave utilizza le stesse funzioni ed è
completamente compatibile con gli script
generati per matlab.
Interfaccia
Esistono interfacce grafiche di produttori
esterni, che sostanzialmente gestiscono la
linea di comando con tab, ma l’input rimane
sostanzialmetne sempre a linea di comando.
Variabili, numeri, matrici
Octave gestisce
- numeri reali (6,45424342 1012)
- numeri immaginari (4+3i, 10-3i)
- matrici e vettori
1 3
[ 1 3 -12 4 ]
2 5
[ ]
Workspace e variabili
Ogni volta che aprite una console di Octave
state utilizzando un “workspace”, che è un
ambiente di lavoro dove vengono salvate le
variabili, le funzioni dichiarate.
octave:2> y = 6
y =
6
octave:3> im = 3-4i
im =
3 - 4i
octave:4> angle = 3/4 * pi
angle =
2.3562
Operatori
Gli operatori di base si applicano a variabili
che rappresentano costanti numeriche.
Operatori di base:
+ - * / ^ -- ++
octave:6> 30+i
ans =
/ i
31
octave:9> (8 * 10^16) / (4 * 10^12)
ans =
20000
Vettori
Per definire un vettore si usa la sintassi
a = [1 2 3 4]
I valori sono separati da spazi. È lo stesso
vettore:
b = [2^0 3-1 6/2 2*2]
I vettori possono contenere ovviamente
numeri complessi.
Matrice
Le matrici sono definite con la sintassi simile
al vettore, le righe sono separate da “;”
octave:11> c = [1 2 3; 4 5 6; 7 8 9]
c =
1
4
7
2
5
8
3
6
9
Operatori tra matrici
Le operazioni tra matrici utilizzano gli operatori
Simbolo uso
Operazione
+
a+b
Addizione elemento per elemento
-
a-b
Sottrazione elemento per elemento
*
a*b
Moltiplicazione righe per colonne su matrici
quadrate
.*
a.*b
Moltiplicazione elemento per elemento
\
a\b
Divisione sinistra
./
a./b
Divisione elemento per elemento
^
a^b
Elevamento a potenza su matrici quadrate
.^
a.^b
Elevamento a potenza elemento per elemento
'
a'
Trasposta di una matrice
Esempi operazioni tra vettori
octave:12> a = [1 2 3]
a=
1 2 3
octave:14> a *b
ans = 42
octave:13> b = [3; 6; 9]
b=
3
6
9
octave:15> b * a
ans =
3 6 9
6 12 18
9 18 27
Operazioni tra matrici
octave:16> a = [1 2; 3 4]
a=
1 2
3 4
octave:17> b = [1 0; 0 -1]
b=
1 0
0 -1
octave:18> a * b
ans =
1 -2
3 -4
octave:23> a \ b
ans =
-2.00000 -1.00000
1.50000 0.50000
who
Il comando who vi restituisce il contenuto del
vostro workspace:
octave:24> who
Variables in the current scope:
a
angle ans
b
c
im
y
Con i comandi save e load si può salvare il
workspace su file e ricaricarlo, altrimenti
alla chiusura della finestra si perde tutto.
Salvataggio e caricamento
I file salvati sono posizionati nel percorso
corrente. Digitare pwd per visualizzarlo.
È possibile cambiare percorso (cd.. )
visualizzare i file correnti (dir)
I file sono salvati geralmente con estensione
.m
Con il comando clear si ripulisce il workspace
Simbolo :
Il simbolo : può essere utilizzato per costruire
agevolmente vettori e matrici.
octave:35> a = [1:10]
a=
1 2 3 4 5 6
7
8
9 10
octave:36> b = [1:0.3:3]
b=
1.0000 1.3000 1.6000 1.9000 2.2000 2.5000 2.8000
Cicli e condizioni
Come in tutti i linguaggi di programmazione
esiste il modo di iterare istruzioni,
all’interno dell’esecuzione del vostro
programma.
i=1
for x = -5:0.1:5
y(i) = x^2
i=i+1
end
if ( a != 0)
b = 1/a
else
b = NaN
Fibonacci
Serie di Fibonacci: 1 1 3 5 8 13 21 …
Salvare in un VETTORE i primi 10 numeri della
serie:
max=10;
n=zeros(max,1);
n(1)=0;
n(2)=1;
for i=3:max
n(i)=n(i-1)+n(i-2)
end
Sfruttare le proprietà matriciali
Cercare di sfruttare sempre, ove possibile, il calcolo
matriciale, punto di forza di questi software.
Esempio: calcolo delle tabelline:
tab1 = 1:10
tab2 = 2*[1:10]
tab3 = 3*[1:10]
… #assurdo: codice ripetuto.
for i=1:10
tabelline(:,i) = i*[1:10]';
end #ciclo for, sfrutta l’indice per costruire n righe nella tabellina. i*v’ ;)
tabelline = tab1' * tab1 #top: prodotto colonna*riga!!
Variabili non tipizzate
In questo linguaggio le variabili non sono
tipizzate, infatti è possibile:
octave:55> y = 4
y= 4
octave:56> y = [1 2]
y=
1 2
Pro: non devo definire il tipo di una variabile
Contro: codice più difficile da gestire, è facile
sbagliare e sovrascrivere una variabile con
un tipo sbagliato.
Funzioni matematiche [1/2]
Octave viene fornito con una ricca serie di
funzioni matematiche già implementate.
sin (x), cos (x), tan(x), arctan(x), asin(x), … funzioni
trigonometriche classiche.
polyderiv(x), polyval(x,a), polyinteg (x), roots(x)
conv(x) e deconv(x,y): calcolano derivata, valori,
integrale, radici, convoluzione e deconvoluzione di
polinomi.
factor(x): scomposizione in fattori primi
primes(x): elenco di numeri primi fino al valore x
Funzioni matematiche [2/2]
var(x), dev(x): varianza, deviazione standard
risoluzione di sistemi lineari
fsolve(espressione, intorno): ottiene le radici di
un’espressione f(x)=0, dato un punto iniziale da cui
partire.
eig(x),rank(x): autovalori, rango di matrici
Disegno di grafici
Octave permette di disegnare grafici di
insiemi di dati.
Esempio:
x=[-pi:pi/32:pi]
plot(x, sin(x))
funzioni per il disegno
disegnare più grafici di più funzioni
contemporaneamente: plot (x, f(x), x, g(x))
disegnare diversi tipi di grafico:
bar(x), hist(x)
E’ possibile specificare il colore e l’aspetto:
plot(x,y,’ro’) %rosso e stile cerchietti
plot(y,’bx’) %blu con le x
Esempio parametri grafico
x=0:pi/50:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
grid on
xlabel(‘angoli in radianti')
ylabel(‘y-ordinate’)
title(‘Grafico seno e coseno’)
legend(‘seno’,’coseno’)
Funzioni
E’ possibile definire funzioni, con o senza
parametri in ingresso, che eseguano
istruzioni più o meno complesse.
La definizione di una funzione inizia con:
function nomefunzione
function nomefunzione (lista degli argomenti)
function variabile di ritorno = nomefunzione (lista degli argomenti)
function [lista variabili di ritorno] = nomefunzione (lista degli argomenti)
tutte devono terminare con endfunction
Riutilizzo di script e funzioni
Gli script sono dei file con estensione .m,
posizionati nel percorso di path.
Per modificare il path usare il comando:
path(path, 'c:\percorsoAggiuntivo\')
Gli script possono contenere sia singole
funzioni, che interi programmi: basta
digitare il nome del file/funzione per
eseguirli.
Esempi vari 1
function [area,perimetro]=calcola(a,b)
area=a*b
perimetro=2*a+2*b
endfunction
#ritorna un numero casuale nell’intervallo min-max, compresi.
function casual (min, max)
floor((max-min+1)* rand) + min
endfunction
Esempi vari 2
function[pos, neg] = segno ( A )
neg = 0; pos = 0;
for i=1:length ( A )
if A ( i ) < 0
neg = neg + 1;
elseif A ( i ) > 0
pos = pos + 1;
end
end
end
Script:
B = input('Dai il vettore di interi:');
[ps, ng] = segno ( B );
fprintf('Numero positivi: %d e negativi: %d\n', ps, ng );
Riferimenti utili
Manuale di Octave:
http://www.gnu.org/software/octave/octave.pdf
Introduzione ad Octave (in italiano!)
http://www.matematicamente.it/software/octave/M.Ventrone-Octave_guida.pdf
Materiale didattico (slide di spiegazione ed
esercizi) del prof. Michelini
http://www.michelini.org/pmwiki.php/FondamentiDiInformatica/MaterialeDidattico