Introduzione a GNU Octave

43
Introduzione a GNU Octave Ing. Andrea Spadaccini [email protected] Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Universit` a di Catania 21 Aprile 2009

description

Introduction to GNU Octave (in Italian)

Transcript of Introduzione a GNU Octave

Page 1: Introduzione a GNU Octave

Introduzione a GNU Octave

Ing. Andrea [email protected]

Dipartimento di Ingegneria Informatica e delle TelecomunicazioniUniversita di Catania

21 Aprile 2009

Page 2: Introduzione a GNU Octave

Sommario

Introduzione

Tipi di dato

Controllo di flusso

Funzioni

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 3: Introduzione a GNU Octave

Introduzione (I)

Cos’e GNU Octave?

E un linguaggio di alto livello destinato principalmente adelaborazioni numeriche

E compatibile a livello di sintassi con MatlabTM

Perche preferire GNU Octave a MatlabTM?

GNU Octave e software libero → sono garantite 4 liberta fondamentali:

1 Liberta di usare il programma per qualsiasi scopo

2 Liberta di studiare il programma e modificarlo

3 Liberta di copiare il programma

4 Liberta di migliorare il programma e redistribuirlo

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 4: Introduzione a GNU Octave

Convenzioni

Input/Output dell’interprete di Octave

>> input inseritooutput fornito da Octave

Esempio

>> 1 + 1ans = 2

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 5: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Parte I

Tipi di dato

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 6: Introduzione a GNU Octave

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 - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 7: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Tipi di dato numerici (II)

Matrici

>> [1 2; 3 4]ans =1 23 4

Costanti

>> eans = 2.7183>> pians = 3.1416>> ians = 0 + 1i

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 8: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Funzioni che generano matrici (I)

Matrice identita>> eye(2)ans =1 00 1

Matrici composte da soli 1 o 0>> ones(2)ans =1 11 1>> zeros(2, 3)ans =0 0 00 0 0

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 9: Introduzione a GNU Octave

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.605900.26180 0.13349

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 10: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Variabili

Tipizzazione

Octave e un linguaggio tipizzato:

fortemente: la conversione tra tipi va fatta in maniera esplicita

dinamicamente: ciascuna variabile puo contenere diversi tipi didato (non contemporaneamente, ovviamente)

Assegnazione di un valore ad una variabile

>> x = 1x = 1>> x = rand(1, 4)x =0.59510 0.52206 0.72653 0.88393

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 11: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Operatori aritmetici

Tabella dei principali operatori aritmetici:x + y somma

x - y sottrazione

x * y moltiplicazione (se x ed y sono matrici,moltiplicazione tra matrici)

x .* y moltiplicazione elemento per elemento

x / y divisione (se x ed y sono matrici,e equivalente a inv(y’) * x’)

x ./ y divisione elemento per elemento

x ^ y elevamento a potenza

x .^ y elevamento a potenza elemento per elemento

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 12: Introduzione a GNU Octave

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 * Bans =295683>> A * 2ans =4 6 810 12 1416 18 20

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 13: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Esempi su operatori aritmetici (II)

Divisioni

>> A ./ 2ans =1.000 1.500 2.0002.500 3.000 3.5004.000 4.500 5.000>> A / Bans =1.00001.931032.86207

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 14: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Esempi su operatori aritmetici (III)

Potenze

>> A .^ 2ans =4 9 1625 36 4964 81 100>> A ^ 2ans =51 60 6996 114 132141 168 195

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 15: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Intervalli

Un intervallo e un vettore composto da numeri, definito tramite laseguente notazione: inizio:intervallo:fine

Esempi

>> 1:4ans =1 2 3 4>> 1:4:40ans =1 5 9 13 17 21 25 29 33 37>> 1:0.1:2ans =1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.70001.8000 1.9000 2.0000

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 16: Introduzione a GNU Octave

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 puo essere:

Uno scalare

Un vettore (quindi anche un intervallo)

Il carattere :, che indica di selezionare tutta la riga (o colonna) inoggetto

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 17: Introduzione a GNU Octave

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 =258

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 18: Introduzione a GNU Octave

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 =4 5 6

Selezione di parte di una riga

>> a(2,1:2)ans =4 5

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 19: Introduzione a GNU Octave

Tipi di dato numerici Variabili Operatori aritmetici Intervalli Indicizzazione di matrici Stringhe

Stringhe

Una stringa e una sequenza di caratteri racchiusa tra apici.>> s = ’ciao’

Concatenazione

>> strcat(’c’, ’iao’, ’ ’, ’mondo’)ans = ciao mondo

Confronto

Si usa la funzione strcmp, che pero funziona al contrario rispettoall’equivalente C, ovvero torna 1 se le stringhe sono uguali, 0 altrimenti.>> strcmp(s, ’ciao’)ans = 1>> s == ’ciao’ans =1 1 1 1

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 20: Introduzione a GNU Octave

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 - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 21: Introduzione a GNU Octave

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 - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 22: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Parte II

Controllo di flusso

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 23: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Operatori di confronto

Gli operatori di confronto lavorano elemento per elemento.x < yx <= yx == yx >= yx > yx ∼= y(oppure x != y, ma non funziona in MatlabTM)

x & yx | y

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 24: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Esempi di confronto (I)

Tra scalari

>> 1 > 2ans = 0>> 1 & 0ans = 0>> 1 & 1ans = 1>> 1 | 1ans = 1

Tra vettori (o matrici) e scalari

>> [0 1 2 3 4 5 6] < 3ans =1 1 1 0 0 0 0

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 25: Introduzione a GNU Octave

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 =1 0 1 0>> [1 3; 4 5] <= [4 1; 4 4]ans =1 01 0

In generale, gli operatori di confronto si utilizzano per:

Controllo di flusso

Ricerca di elementi in matrici o vettori che soddisfino determinatecondizioni

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 26: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Costrutto if

Sintassi

if condizioneistruzioni

elseif condizione-2altre istruzioni

...else condizione-n

ulteriori istruzioniend

Note

I blocchi elseif ed else sono opzionali

Possono esserci diversi blocchi elseif, ma un solo blocco else

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 27: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Esempio di costrutto if

Codice dell’esempio

a = 1;if a < 1disp(’< 1’)

elseif a > 1disp(’> 1’)

elsedisp(’= 1’)

end

Risultato dell’esecuzione?

La stampa della stringa ’= 1’.

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 28: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Costrutto for

Sintassi

for identificatore = espressioneistruzioni

end

Note

L’identificatore indica una variabile

L’espressione puo essere un dato di qualsiasi tipo (generalmente eun intervallo)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 29: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Esempi di costrutto for (I)

Codice dell’esempio

for i = 0 : 10 : 50disp(i)

end

Risultato dell’esecuzione?

01020304050

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 30: Introduzione a GNU Octave

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 e sintatticamente corretto, ed esegue le operazioni che ciaspettiamo, ma quando e possibile e meglio evitare di effettuare cicli,vettorializzando il codice.In questo caso, A = sqrt(A); sortisce lo stesso effetto.

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 31: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Costrutto while

Sintassi

while condizioneistruzioni

end

Note

La condizione generalmente effettua un confronto su una variabileche viene modificata durante il blocco di istruzioni, in modo dapotere uscire, prima o poi, dal ciclo

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 32: Introduzione a GNU Octave

Operatori di confronto Costrutto if Costrutto for Costrutto while

Esempio di costrutto while

Codice dell’esempio

x = 10;while x > 0x = x - 1;disp(x)

end

Risultato dell’esecuzione?

Stampa dei numeri da 9 ad 1

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 33: Introduzione a GNU Octave

Definizione di funzioni Esempi Alcune utili funzioni della libreria standard

Parte III

Funzioni

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 34: Introduzione a GNU Octave

Definizione di funzioni Esempi Alcune utili funzioni della libreria standard

Definizione di funzioni

Quando si scrivono programmi non banali, e fondamentale suddividerli inunita logiche (funzioni), ciascuna con uno scopo ben preciso, in modoche 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 e possibile crearefunzioni che abbiano piu di un valore di ritorno

Ciascun valore di ritorno va creato all’interno della funzione, e nonva ritornato esplicitamente

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 35: Introduzione a GNU Octave

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);

endend

Esempi di utilizzo

>> somma([1 2 3 4 5 6])ans = 21>> 3 * somma([1 2 3])ans = 18

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 36: Introduzione a GNU Octave

Definizione di funzioni Esempi Alcune utili funzioni della libreria standard

Esempio: Ricerca minimo, massimo e media di un vettore

Attenzione

La funzione che verra mostrata non e scritta bene, ed ha uno scopopuramente didattico. Ecco un elenco di difetti della funzione:

Duplica funzionalita gia presenti nella libreria standard

Esegue troppe operazioni, non ha uno scopo univoco

Non esegue controlli sui dati in input

Non e vettorializzata

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 37: Introduzione a GNU Octave

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) > massimomassimo = vettore(i);

endif vettore(i) < minimominimo = vettore(i);

endsomma = somma + vettore(i);

endmedia = somma / length(vettore);

end

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 38: Introduzione a GNU Octave

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 = 1mx = 10>> [m mx av] = min max avg(1:10)m = 1mx = 10av = 5.5000

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 39: Introduzione a GNU Octave

Definizione di funzioni Esempi Alcune utili funzioni della libreria standard

Aiuto!

La funzione help

La funzione help, seguita da un comando, fornisce tutte leinformazioni 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 diOctave una tematica affine e ne mostra l’help

Generalmente il risultato e piu approfondito di help, e mostra ancheargomenti correlati

Per confrontare i due, digitare ad esempio help help e doc help.Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 40: Introduzione a GNU Octave

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 delmassimo (minimo)

La funzione mean

Calcola la media dei valori di un vettore

Ha un parametro opzionale che consente di specificare il tipo dimedia (aritmetica, geometrica, armonica)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 41: Introduzione a GNU Octave

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 → sommaper 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 - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 42: Introduzione a GNU Octave

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 - Universita degli Studi di Catania

Introduzione a GNU Octave

Page 43: Introduzione a GNU Octave

Licenza

Licenza Creative Commons

Questo lavoro e rilasciato sotto licenza Creative CommonsAttribution-Share Alike 2.5 Italy(http://creativecommons.org/licenses/by-sa/2.5/it/)

Significato della licenza

La presentazione e liberamente scaricabile e redistribuibile perqualsiasi fine

E necessario citare l’autore

E necessario redistribuire secondo gli stessi termini eventuali lavoriderivati da questa presentazione

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

Introduzione a GNU Octave