[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 332.   Octave

Octave (1) è un linguaggio di programmazione ad alto livello per il calcolo matematico, usato fondamentalmente in modo interattivo. Viene usato attraverso un terminale a caratteri, come una console virtuale di GNU/Linux, ma per ottenere dei grafici si avvale di Gnuplot che così è opportuno sia installato assieme a Octave. L'interazione tra Gnuplot e Octave è trasparente, se il secondo viene utilizzato in una finestra di terminale all'interno del sistema grafico X.

In queste sezioni si mostra solo qualche piccolo assaggio di Octave che dispone di ampia documentazione per conto proprio: octave.info.

Anche Octave utilizza la libreria Readline per il controllo della riga di comando, con tutti i vantaggi che ciò comporta per l'utilizzatore.

332.1   Avvio e interazione normale

Octave viene avviato attraverso l'eseguibile octave. Bisogna ricordare che se si vogliono disegnare dei grafici deve essere avviato da una finestra di terminale all'interno di X, diversamente basta una console virtuale di GNU/Linux. octave riconosce una serie di opzioni che qui non vengono descritte (eventualmente basta utilizzare il comando octave --help per ottenerne la descrizione) e può eseguire il contenuto di un file se viene indicato come ultimo argomento della riga di comando.

octave [opzioni] [file_di_comandi]

Il file di comandi è uno script contenente semplicemente comandi di Octave, dove in particolare il simbolo # serve a indicare l'inizio di un commento che si conclude alla fine della riga e le righe vuote o bianche vengono semplicemente ignorate.

Eventualmente, uno script di Octave può essere reso eseguibile, purché all'inizio del file venga aggiunta la solita indicazione dell'interprete da utilizzare:

#!/usr/bin/octave

Se Octave viene avviato in modo normale (senza argomenti particolari e senza l'indicazione di uno script da eseguire), si ottiene il funzionamento interattivo normale:

octave[Invio]

Octave, version 2.0.13 (i386-redhat-linux-gnu).
Copyright (C) 1996, 1997, 1998 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

octave:1> _

L'invito di Octave (il prompt) è un po' particolare: mano a mano che si introducono dei comandi si incrementa il numero che appare. Di seguito sono elencati alcuni comandi elementari di Octave; in altre sezioni ne vengono mostrati degli altri.

Alcuni comandi

help [-i] [argomento]

Il comando help permette di ottenere alcune indicazioni sul funzionamento di Octave. In particolare, se non si utilizza l'opzione -i si ottiene una guida stringata, mentre con -i viene attivata la consultazione del documento octave.info riferito al contesto definito dalla parola chiave che indica l'argomento.

exit | quit

Conclude il funzionamento di Octave.

pause [(n_secondi)]

Il comando pause serve a fare una pausa della durata indicata dall'argomento (che deve essere racchiuso tra parentesi tonde). Se non viene indicato l'argomento, la pausa può essere interrotta solo attraverso la pressione del tasto [Invio]. Questo comando è utile negli script di Octave.

Esempi

octave:x> help help[Invio]

Mostra la guida per utilizzare il comando help.

octave:x> help -i help[Invio]

Mostra la descrizione del comando help consultando il documento octave.info.

332.2   Variabili di Octave e calcoli elementari

Octave gestisce variabili scalari di tipo numerico e di tipo stringa (delimitate da apici singoli o doppi), come avviene comunemente nei linguaggi evoluti più comuni; inoltre permette la definizione di strutture, in particolare i vettori e le matrici (nel senso matematico dei termini), in modo trasparente. La dichiarazione di una variabile si ottiene semplicemente assegnandoci un valore. Per esempio,

octave:1> a = 123[Invio]

crea, o sovrascrive la variabile a assegnandole il valore 123. Assegnando un valore a una variabile si ottiene anche l'eco del risultato e ciò può essere utile se l'assegnamento avviene in corrispondenza di un'espressione di qualche tipo.

octave:2> b = a / 2[Invio]

In questo caso, viene assegnato alla variabile b il valore pari alla metà di a e si ottiene opportunamente l'informazione

b = 61.500

che così precisa quale valore è stato assegnato a b. Le espressioni possono essere calcolate anche senza bisogno di assegnarne il risultato a qualche variabile; per esempio:

octave:3> a / b[Invio]

ans 2

In questo caso, ans sta per answer (risposta).

Con la stessa logica per la quale un'espressione che non viene assegnata a una variabile genera un risultato che viene visualizzato comunque, per conoscere il contenuto di una variabile basta indicarla sulla riga di comando:

octave:4> a[Invio]

a = 123

octave:5> b[Invio]

b = 61.500

332.3   Vettori e matrici

Al posto degli array dei linguaggi di programmazione normali, Octave tratta direttamente con vettori e matrici (per la precisione: matrici a una e a due dimensioni). Una costante letterale che rappresenta un vettore ha la forma seguente:

elemento_1elemento_2, ... elemento_n ]

In particolare, le parentesi quadre fanno parte della dichiarazione e delimitano in pratica gli elementi del vettore. Una costante letterale che rappresenta una matrice a due dimensioni ha una forma simile a quella del vettore, con la differenza che gli elementi di una riga rispetto a quelli di un'altra sono separati da un punto e virgola:

r1c1r1c2, ...; r2c1r2c2, ...; rnc1rnc2, ... ]

Si osservino gli esempi seguenti.

octave:1> a = [ 1, 2, 3 ][Invio]

a =

   1  2  3 

octave:2> b = [ 4, 5, 6 ][Invio]

b =

   4  5  6 

octave:3> c = [ 1, 2, 3; 4, 5, 6 ][Invio]

c =

   1  2  3 
   4  5  6 

Eventualmente si possono anche fare delle combinazioni:

octave:4> d = [ a, b ][Invio]

d =

   1  2  3  4  5  6 

octave:5> e = [ a; b ][Invio]

e =

   1  2  3 
   4  5  6 

Con i vettori e le matrici si possono fare anche dei calcoli nei modi in cui si è abituati in matematica. In particolare, la notazione x' restituisce la matrice trasposta di x.

octave:6> c'[Invio]

ans =

   1  4 
   2  5 
   3  6

L'esempio seguente mostra il prodotto tra due matrici; precisamente il prodotto tra la matrice c e la sua trasposta.

octave:7> c * c'[Invio]

ans =

  14  32
  32  77 

È possibile anche moltiplicare una costante scalare per tutti gli elementi di una matrice:

octave:8> 2 * c[Invio]

ans =

   2   4   6 
   8  10  12 

Pur senza approfondire il funzionamento di Octave, è il caso di mostrare l'uso della funzione interna rand(), il cui scopo è quello di restituire una matrice (a due dimensioni) contenente valori casuali:

octave:9> f = rand( 2, 3)[Invio]

In questo caso, crea la matrice f contenente due righe e tre colonne, con valori casuali compresi tra zero e uno.

332.4   Disegno

Si è già accennato al fatto che Octave dipende da Gnuplot per le rappresentazioni grafiche. Ciò avviene in modo trasparente, purché si utilizzi Octave da una finestra di terminale all'interno del sistema grafico X.

L'approccio alla grafica di Octave è più complesso di Gnuplot, perché il suo scopo è differente. In generale tutto viene visto in forma di vettori e matrici. Di solito, la prima cosa da fare è prendere confidenza con la funzione linspace() il cui scopo è quello di generare un vettore con una serie di valori equidistanti (lineari):

linspace ( iniziofinequantità)

Il primo argomento della funzione definisce il valore del primo elemento del vettore; il secondo definisce quello dell'ultimo; il terzo argomento definisce la quantità di elementi complessivi e la funzione determina i valori rimanenti in modo lineare. Per esempio, il comando seguente serve a creare un vettore di 11 elementi con valori progressivi da 0 a 10:

octave:1> x = linspace( 0, 10, 11)[Invio]

x =

   0   1   2   3   4   5   6   7   8   9  10

Un'altra cosa da osservare è il fatto che le funzioni matematiche che possono funzionare utilizzando un argomento numerico, possono essere applicate anche a vettori e matrici. Si osservi l'esempio seguente in cui si genera il vettore y calcolando il seno di ogni valore del vettore x.

octave:2> y = sin(x)[Invio]

y =

 Columns 1 through 8:

   0.00000   0.84147   0.90930   0.14112  -0.75680  -0.95892  -0.27942   0.65699
 Columns 9 through 11:

   0.98936   0.41212  -0.54402

Per disegnare il seno calcolato in questo modo, si utilizza la funzione interna plot() che ha bisogno di almeno due argomenti: il vettore dei valori per l'asse X e il vettore corrispondente dei valori da rappresentare nell'asse Y. Si intuisce che il numero di elementi di questi due vettori deve essere uguale.

plot ( vettore_xvettore_y )

Tornando all'esempio, il comando si limita a questo:

octave:3> plot (x, y)[Invio]

Se il secondo argomento della funzione plot() è una matrice, si ottiene la visualizzazione di tante curve quante sono le colonne o le righe della matrice (la scelta viene fatta in base alla corrispondenza con gli elementi del vettore utilizzato come primo argomento).

octave:4> y = [ sin(x); 2 * sin(x)][Invio]

Il comando appena mostrato genera la matrice y con due righe corrispondenti a due vettori: il seno dei valori del vettore x e due volte il seno dei valori del vettore x.

octave:5> plot (x, y)[Invio]

Disegnando il grafico della matrice y si ottengono due curve corrispondenti ai valori delle due righe della stessa.

332.5   Script di Octave

Si è accennato alla possibilità di realizzare degli script con le istruzioni di Octave. In questo caso non c'è nulla di speciale rispetto a quanto è stato visto fino a questo punto. A titolo di esempio viene mostrato uno script con il quale si arriva a disegnare il grafico del seno di x nell'intervallo di valori da -P-greco a +P-greco.

#!/usr/bin/octave
x = linspace( -pi, +pi, 200)
y = sin(x)
plot (x,y)
pause

Lo script può essere reso eseguibile e avviato autonomamente (purché l'eseguibile octave si trovi effettivamente nella directory /usr/bin/).

332.6   File di dati

Diversa è invece la possibilità di salvare le variabili. Per questo si utilizzano i comandi save e load:

save [opzioni] file variabile...

load [opzioni] file variabile...

Attraverso le opzioni si specifica normalmente il formato in cui deve essere realizzato il file delle variabili che vengono salvate; se non viene specificato dovrebbe trattarsi di quello più semplice: un file di testo puro e semplice.

Le variabili da salvare o da ricaricare vanno annotate dopo il nome del file. Per facilitare la cosa possono essere usati dei caratteri jolly, con significato equivalente a quello delle shell normali.

Alcune opzioni

-ascii

Salva o carica utilizzando il formato ASCII di Octave.

-binary

Salva o carica utilizzando il formato binario di Octave.

-mat-binary

Salva o carica utilizzando il formato binario di Matlab.

-force

Quando vengono caricate le variabili, forza la sovrascrittura di quelle esistenti.

Esempi

octave:x> save prova a b c[Invio]

Salva le variabili a, b e c, nel file prova (nella directory corrente) utilizzando il formato predefinito.

octave:x> save -ascii prova a b c[Invio]

Come nell'esempio precedente, specificando esplicitamente che si vuole usare il formato ASCII di Octave.

octave:x> save -ascii prova a*[Invio]

Salva tutte le variabili che iniziano per a nel file prova utilizzando il formato ASCII di Octave.

octave:x> load -ascii -force prova[Invio]

Carica tutte le variabili dal file prova, che dovrebbe essere in formato ASCII di Octave, sovrascrivendo le variabili eventualmente già esistenti.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) Octave   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome octave.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]