1. Introduzione a GNU Octave
Ing. Andrea Spadaccini
a.spadaccini@diit.unict.it
Dipartimento di Ingegneria Informatica e delle Telecomunicazioni
Universit` di Catania
a
21 Aprile 2009
2. Sommario
Introduzione
Tipi di dato
Controllo di flusso
Funzioni
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
3. Introduzione (I)
Cos’` GNU Octave?
e
`
E un linguaggio di alto livello destinato principalmente ad
elaborazioni numeriche
`
E compatibile a livello di sintassi con MatlabTM
Perch´ preferire GNU Octave a MatlabTM ?
e
GNU Octave ` software libero → sono garantite 4 libert` fondamentali:
e a
Libert` di usare il programma per qualsiasi scopo
a
1
Libert` di studiare il programma e modificarlo
a
2
Libert` di copiare il programma
a
3
Libert` di migliorare il programma e redistribuirlo
a
4
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
4. Convenzioni
Input/Output dell’interprete di Octave
>> input inserito
output fornito da Octave
Esempio
>> 1 + 1
ans = 2
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
5. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Parte I
Tipi di dato
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
6. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Tipi di dato numerici (I)
Scalari
Matrici (e vettori)
Scalari
>> 42
>> 4.2e1
>> 30 + 2i
Vettori
>> [1 2 3 4 10]
ans =
1 2 3 4 10
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
7. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Tipi di dato numerici (II)
Matrici
>> [1 2; 3 4]
ans =
12
34
Costanti
>> e
ans = 2.7183
>> pi
ans = 3.1416
>> i
ans = 0 + 1i
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
8. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Funzioni che generano matrici (I)
Matrice identit`
a
>> eye(2)
ans =
10
01
Matrici composte da soli 1 o 0
>> ones(2)
ans =
11
11
>> zeros(2, 3)
ans =
000
000
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
9. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Funzioni che generano matrici (II)
Numeri pseudo-casuali
>> rand()
ans = 0.021416
>> rand(1, 3)
ans =
0.38035 0.29420 0.69839
>> rand(2)
ans =
0.40080 0.60590
0.26180 0.13349
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
10. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Variabili
Tipizzazione
Octave ` un linguaggio tipizzato:
e
fortemente: la conversione tra tipi va fatta in maniera esplicita
dinamicamente: ciascuna variabile pu` contenere diversi tipi di
o
dato (non contemporaneamente, ovviamente)
Assegnazione di un valore ad una variabile
>> x = 1
x=1
>> x = rand(1, 4)
x=
0.59510 0.52206 0.72653 0.88393
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
11. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Operatori aritmetici
Tabella dei principali operatori aritmetici:
somma
x+y
sottrazione
x-y
moltiplicazione (se x ed y sono matrici,
x*y
moltiplicazione tra matrici)
x .* y moltiplicazione elemento per elemento
divisione (se x ed y sono matrici,
x/y
` equivalente a inv(y’) * x’)
e
x ./ y divisione elemento per elemento
elevamento a potenza
x^y
x .^ y elevamento a potenza elemento per elemento
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
12. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Esempi su operatori aritmetici (I)
Moltiplicazioni
>> A = [2 3 4; 5 6 7; 8 9 10];
>> B = [2; 3; 4];
>> A *B
ans =
29
56
83
>> A *2
ans =
468
10 12 14
16 18 20
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
13. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Esempi su operatori aritmetici (II)
Divisioni
>> A ./ 2
ans =
1.000 1.500 2.000
2.500 3.000 3.500
4.000 4.500 5.000
>> A / B
ans =
1.0000
1.93103
2.86207
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
14. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Esempi su operatori aritmetici (III)
Potenze
>> A .^ 2
ans =
4 9 16
25 36 49
64 81 100
>> A ^ 2
ans =
51 60 69
96 114 132
141 168 195
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
15. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Intervalli
Un intervallo ` un vettore composto da numeri, definito tramite la
e
seguente notazione: inizio:intervallo:fine
Esempi
>> 1:4
ans =
1234
>> 1:4:40
ans =
1 5 9 13 17 21 25 29 33 37
>> 1:0.1:2
ans =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
1.8000 1.9000 2.0000
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
16. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Indicizzazione di matrici
L’indicizzazione avviene tramite l’operatore (), specificando due indici:
M(idx1, idx2).
Ciascuno dei due indici pu` essere:
o
Uno scalare
Un vettore (quindi anche un intervallo)
Il carattere :, che indica di selezionare tutta la riga (o colonna) in
oggetto
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
17. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Esempi di indicizzazione (I)
>> a = [1 2 3; 4 5 6; 7 8 9];
Selezione dell’elemento (i, j)
>> a(2,1)
ans = 4
Selezione di una colonna
>> a(:,2)
ans =
2
5
8
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
18. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Esempi di indicizzazione (II)
>> a = [1 2 3; 4 5 6; 7 8 9];
Selezione di una riga
>> a(2,:)
ans =
456
Selezione di parte di una riga
>> a(2,1:2)
ans =
45
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
19. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Stringhe
Una stringa ` una sequenza di caratteri racchiusa tra apici.
e
>> s = ’ciao’
Concatenazione
>> strcat(’c’, ’iao’, ’ ’, ’mondo’)
ans = ciao mondo
Confronto
Si usa la funzione strcmp, che per` funziona al contrario rispetto
o
all’equivalente C, ovvero torna 1 se le stringhe sono uguali, 0 altrimenti.
>> strcmp(s, ’ciao’)
ans = 1
>> s == ’ciao’
ans =
1111
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
20. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Conversione tra tipi numerici e stringhe
Tipo numerico → stringa:
num2str
int2str
mat2str
Stringa → tipo numerico:
str2num
Output formattato su stringa:
sprintf
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
21. Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe
Stampa di una stringa dal prompt
Funzione disp(stringa)
Esempio
disp(’ciao’) stampa la stringa ciao. (com’era prevedibile)
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
22. Operatori di confronto Costrutto if Costrutto for Costrutto while
Parte II
Controllo di flusso
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
23. Operatori di confronto Costrutto if Costrutto for Costrutto while
Operatori di confronto
Gli operatori di confronto lavorano elemento per elemento.
x<y
x <= y
x == y
x >= y
x>y
x ∼= y
(oppure x != y, ma non funziona in MatlabTM )
x&y
x|y
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
24. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempi di confronto (I)
Tra scalari
>> 1 > 2
ans = 0
>> 1 & 0
ans = 0
>> 1 & 1
ans = 1
>> 1 | 1
ans = 1
Tra vettori (o matrici) e scalari
>> [0 1 2 3 4 5 6] < 3
ans =
1110000
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
25. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempi di confronto (II)
Tra vettori omogenei (o matrici omogenee)
>> [1 3 4 5] <= [4 1 4 4]
ans =
10 10
>> [1 3; 4 5] <= [4 1; 4 4]
ans =
10
10
In generale, gli operatori di confronto si utilizzano per:
Controllo di flusso
Ricerca di elementi in matrici o vettori che soddisfino determinate
condizioni
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
26. Operatori di confronto Costrutto if Costrutto for Costrutto while
Costrutto if
Sintassi
if condizione
istruzioni
elseif condizione-2
altre istruzioni
...
else condizione-n
ulteriori istruzioni
end
Note
I blocchi elseif ed else sono opzionali
Possono esserci diversi blocchi elseif, ma un solo blocco else
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
27. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempio di costrutto if
Codice dell’esempio
a = 1;
if a < 1
disp(’< 1’)
elseif a > 1
disp(’> 1’)
else
disp(’= 1’)
end
Risultato dell’esecuzione?
La stampa della stringa ’= 1’.
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
28. Operatori di confronto Costrutto if Costrutto for Costrutto while
Costrutto for
Sintassi
for identificatore = espressione
istruzioni
end
Note
L’identificatore indica una variabile
L’espressione pu` essere un dato di qualsiasi tipo (generalmente `
o e
un intervallo)
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
29. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempi di costrutto for (I)
Codice dell’esempio
for i = 0 : 10 : 50
disp(i)
end
Risultato dell’esecuzione?
0
10
20
30
40
50
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
30. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempi di costrutto for (II)
Codice dell’esempio
A = (1:10) .^ 2;
for i = 1 :length(A)
A(i) = sqrt(A(i));
end
Risultato dell’esecuzione?
A = [1 2 3 4 5 6 7 8 9 10]
Attenzione
Il codice ` sintatticamente corretto, ed esegue le operazioni che ci
e
aspettiamo, ma quando ` possibile ` meglio evitare di effettuare cicli,
e e
vettorializzando il codice.
In questo caso, A = sqrt(A); sortisce lo stesso effetto.
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
31. Operatori di confronto Costrutto if Costrutto for Costrutto while
Costrutto while
Sintassi
while condizione
istruzioni
end
Note
La condizione generalmente effettua un confronto su una variabile
che viene modificata durante il blocco di istruzioni, in modo da
potere uscire, prima o poi, dal ciclo
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
32. Operatori di confronto Costrutto if Costrutto for Costrutto while
Esempio di costrutto while
Codice dell’esempio
x = 10;
while x > 0
x = x - 1;
disp(x)
end
Risultato dell’esecuzione?
Stampa dei numeri da 9 ad 1
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
33. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Parte III
Funzioni
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
34. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Definizione di funzioni
Quando si scrivono programmi non banali, ` fondamentale suddividerli in
e
unit` logiche (funzioni), ciascuna con uno scopo ben preciso, in modo
a
che siano facilmente verificabili ed eventualmente riutilizzabili.
Sintassi
function [ valori-di-ritorno ] = funzione(parametri)
corpo della funzione
end
Valori di ritorno
Diversamente da linguaggi come il C, in Octave ` possibile creare
e
funzioni che abbiano pi` di un valore di ritorno
u
Ciascun valore di ritorno va creato all’interno della funzione, e non
va ritornato esplicitamente
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
35. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Esempio: somma degli elementi di un vettore
Corpo della funzione
function s = somma(vettore)
s = 0;
for i = 1 : length(vettore)
s = s + vettore(i);
end
end
Esempi di utilizzo
>> somma([1 2 3 4 5 6])
ans = 21
>> 3 * somma([1 2 3])
ans = 18
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
36. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Esempio: Ricerca minimo, massimo e media di un vettore
Attenzione
La funzione che verr` mostrata non ` scritta bene, ed ha uno scopo
a e
puramente didattico. Ecco un elenco di difetti della funzione:
Duplica funzionalit` gi` presenti nella libreria standard
aa
Esegue troppe operazioni, non ha uno scopo univoco
Non esegue controlli sui dati in input
Non ` vettorializzata
e
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
37. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Codice della funzione min max avg
function [minimo massimo media] = min max avg(vettore)
somma = massimo = 0;
minimo = Inf;
for i = 1 : length(vettore)
if vettore(i) > massimo
massimo = vettore(i);
end
if vettore(i) < minimo
minimo = vettore(i);
end
somma = somma + vettore(i);
end
media = somma / length(vettore);
end
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
38. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Utilizzo della funzione min max avg
>> min max avg(1:10)
ans = 1
>> m = min max avg(1:10)
m=1
>> [m mx] = min max avg(1:10)
m=1
mx = 10
>> [m mx av] = min max avg(1:10)
m=1
mx = 10
av = 5.5000
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
39. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Aiuto!
La funzione help
La funzione help, seguita da un comando, fornisce tutte le
informazioni sul comando in oggetto.
Utile per verificare parametri e valori di ritorno delle funzioni
La funzione doc
La funzione doc, seguita da una stringa, cerca nel manuale di
Octave una tematica affine e ne mostra l’help
Generalmente il risultato ` pi` approfondito di help, e mostra anche
eu
argomenti correlati
Per confrontare i due, digitare ad esempio help help e doc help.
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
40. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Massimo, minimo e media di un vettore
Le funzioni max e min
Trovano il valore massimo (o minimo) di un vettore e lo restituiscono
Se chiamate con due valori di ritorno, restituiscono anche l’indice del
massimo (minimo)
La funzione mean
Calcola la media dei valori di un vettore
Ha un parametro opzionale che consente di specificare il tipo di
media (aritmetica, geometrica, armonica)
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
41. Definizione di funzioni Esempi Alcune utili funzioni della libreria standard
Altre funzioni che operano su vettori o matrici
rows(A): numero di righe di A
columns(A): numero di colonne di A
size(A): dimensioni di A (valori di ritorno multipli)
sum(A): A vettore → somma degli elementi; A matrice → somma
per colonne; somma di tutti gli elementi di una matrice:
sum(sum(A))
sort(A): ordina gli elementi di un vettore in ordine crescente
det(A): determinante di una matrice
inverse(A): inversa di una matrice quadrata
rank(A): rango di una matrice
eig(A): autovettori (ed autovalori) di una matrice
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
42. Riferimenti
Sito ufficiale di GNU Octave
http://www.octave.org
Documentazione
John W. Eaton et al. GNU Octave Manual -
http://www.gnu.org/software/octave/doc/interpreter/
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave
43. Licenza
Licenza Creative Commons
Questo lavoro ` rilasciato sotto licenza Creative Commons
e
Attribution-Share Alike 2.5 Italy
(http://creativecommons.org/licenses/by-sa/2.5/it/)
Significato della licenza
La presentazione ` liberamente scaricabile e redistribuibile per
e
qualsiasi fine
`
E necessario citare l’autore
`
E necessario redistribuire secondo gli stessi termini eventuali lavori
derivati da questa presentazione
Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania
a
Introduzione a GNU Octave