Introduzione a GNU Octave
-
Upload
andrea-spadaccini -
Category
Education
-
view
3.362 -
download
1
description
Transcript of Introduzione a GNU Octave
Introduzione a GNU Octave
Ing. Andrea [email protected]
Dipartimento di Ingegneria Informatica e delle TelecomunicazioniUniversita di Catania
21 Aprile 2009
Sommario
Introduzione
Tipi di dato
Controllo di flusso
Funzioni
Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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