GNU Octave

Da Wikipedia, l'enciclopedia libera.
GNU Octave
Logo
GNU Octave in esecuzione su un sistema Linux
GNU Octave in esecuzione su un sistema Linux
Sviluppatore James B. Rawlings, John W. Eaton
Ultima versione 3.8.1 (7 marzo 2014)
Sistema operativo Linux
Microsoft Windows
Mac OS X
Linguaggio C++
Genere Analisi numerica
Licenza GPL
(Licenza libera)
Lingua Multilingua
Sito web gnu.org/software/octave

GNU Octave è un'applicazione software per l'analisi numerica in gran parte[1] compatibile con MATLAB.

Ha un insieme di funzionalità fornite per il calcolo matriciale come rango e determinante o specialistiche come decomposizione ai valori singolari (SVD), fattorizzazione LU; sebbene consenta di trovare la soluzione numerica di sistemi lineari non svolge calcolo simbolico o altre attività tipiche di un sistema di algebra computazionale.

Storia[modifica | modifica wikitesto]

Il progetto fu concepito nel 1988 da John W. Eaton (primo manutentore) e da James B. Rawlings presso l'Università del Texas come strumento di calcolo per l'ingegneria chimica.

Il suo sviluppo vero e proprio partì da John W. Eaton nel 1992. La prima alpha rilasciata è datata 4 gennaio 1993 e il 17 febbraio 1994 fu rilasciata la versione 1.0. La versione 3.0 è stata rilasciata il 21 dicembre 2007.

Dettagli tecnici[modifica | modifica wikitesto]

  • Octave è scritto in conformità dello standard POSIX nel linguaggio C++ usando le librerie Standard Template Library.
  • Octave utilizza un interprete per il suo linguaggio di scripting.
  • Octave è estendibile attraverso moduli o funzioni scritte dall'utente.
  • Octave può lavorare assieme a gnuplot e Grace per disegnare funzioni, grafici, tabelle, consentendo di salvarli o stamparli.

Octave, il linguaggio[modifica | modifica wikitesto]

Il linguaggio di scripting di Octave supporta svariate librerie del C, e supporta inoltre diverse system calls e funzioni UNIX.

I programmi scritti con Octave sono degli script o liste di chiamate a funzioni. Il linguaggio dispone di diversi tipi di dati, oltre quello numerico esistono anche un tipo logico (true, false), uno di tipo stringa e strutture dati analoghe alle struct del linguaggio C. Esiste anche un altro tipo di dato molto potente ed è la matrice che consente molte operazioni di tipo matriciale. Il linguaggio di Octave non è un linguaggio orientato agli oggetti ma supporta le strutture dati, inoltre mette a disposizione varie strutture per il controllo del flusso, come i test logici if-else e switch ed i cicli while e do-until.

La sintassi è molto simile a quella di MATLAB, ed è possibile scrivere script che girano sia sotto Octave che su MATLAB.

Octave è rilasciato sotto licenza GPL, e quindi può essere liberamente copiato e usato. Il programma gira sotto sistemi Unix e Linux, oltre che su Windows e MAC OS X.

Funzionalità distintive[modifica | modifica wikitesto]

Completamento automatico dei comandi e dei nomi delle variabili[modifica | modifica wikitesto]

Digitare un carattere TAB nella riga di comando attiva in GNU Octave la ricerca di possibili completamenti della parte di comando già parzialmente digitata (in modo analogo al completamento automatico della shell Bash).

Command history[modifica | modifica wikitesto]

Quando avviato in modalità interattiva, GNU Octave salva i comandi già eseguiti in un buffer interno così che essi possono essere richiamati ed editati.

Strutture dati[modifica | modifica wikitesto]

GNU Octave include un limitato supporto per organizzare i dati in strutture. Ad esempio:

octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "stringa";
octave:2> x.a
ans =  1
octave:3> x.b
ans =

   1   2
   3   4

octave:4> x.c
ans = stringa
octave:5> x
x =
{
  a =  1
  b =

     1   2
     3   4

  c = stringa
}

Operatori booleani a corto circuito (short-circuit)[modifica | modifica wikitesto]

Gli operatori logici '&&' e '||' di GNU Octave sono valutati in modalità a corto circuito (come i corrispondenti operatori in linguaggio C), a differenza degli operatori '&' e '|', che agiscono elemento per elemento in vettori, matrici e array multi-dimensionali.

Operatori incremento e decremento[modifica | modifica wikitesto]

GNU Octave include gli operatori C-like di incremento '++' e decremento '--', sia nella loro forma prefissa che in quella suffissale.

Unwind-protect[modifica | modifica wikitesto]

GNU Octave supporta una forma basilare di gestione delle eccezioni, modellata sul costrutto unwind-protect del Lisp. La forma generale di un blocco unwind_protect ha questo aspetto:

unwind_protect
  body
unwind_protect_cleanup
  cleanup
end_unwind_protect

Come regola generale, GNU Octave riconosce come terminazione di un dato blocco di codice 'block' sia la parola chiave 'end' (che è compatibile con il linguaggio MATLAB) che l'altra più specifica 'end_block'. Di conseguenza, un blocco 'unwind_protect' può essere terminato sia con la parola chiave 'end_unwind_protect' - come nell'esempio - sia in modo più portabile, con la parola chiave 'end'. Nell'esempio, la parte cleanup del blocco è sempre eseguita. In caso la parte body sollevasse un'eccezione, cleanup sarebbe eseguita immediatamente prima della propagazione dell'eccezione al di fuori del blocco 'unwind_protect'.

GNU Octave supporta anche un'altra forma di gestione delle eccezioni (compatibile con il linguaggio MATLAB):

try
   body
catch
   exception_handling
end

Quest'ultima forma differisce da un blocco 'unwind_protect' per due motivi. Primo, la parte exception_handling viene eseguita soltanto nel caso in cui la parte body sollevi un'eccezione. In secondo luogo, dopo l'esecuzione di exception_handling, l'eccezione è considerata intercettata e gestita, e non viene propagata all'esterno del blocco (a meno che un comando 'rethrow( lasterror )' sia di proposito stato inserito all'interno del codice exception_handling).

Liste di argomenti di lunghezza variabile[modifica | modifica wikitesto]

GNU Octave ha un meccanismo efficace per gestire funzioni che devono ricevere un numero arbitrario (non noto a priori) di argomenti, senza un limite superiore. Per indicare una lista di zero o più argomenti entranti in una funzione, si usa lo speciale argomento varargin, posizionato come ultimo (o solo) argomento nella lista:

function s = plus (varargin)
   if (nargin==0)
      s = 0;
   else
      s = varargin{1} + plus (varargin{2:nargin});
   end
end

Liste di ritorno di lunghezza variabile[modifica | modifica wikitesto]

Una funzione può essere implementata in modo che ritorni al codice chamante un qualsiasi numero di valori, usando come argomento di uscita la variabile speciale varargout. Ad esempio:

function varargout = multiassign (data)
   for k=1:nargout
      varargout{k} = data(:,k);
   end
end

Integrazione con il linguaggio C++[modifica | modifica wikitesto]

È anche possibile eseguire codice GNU Octave direttamente all'interno di un programma C++. Per esempio, di seguito è riportato un frammento di codice che chiama la funzione rand([10,1]) da C++, facendola interpretare da GNU Octave:

   #include <octave/oct.h>
   ...
   ColumnVector NumRands(2);
   NumRands(0) = 10;
   NumRands(1) = 1;
   octave_value_list f_arg, f_ret;
   f_arg(0) = octave_value(NumRands);
   f_ret = feval("rand",f_arg,1);
   Matrix unis(f_ret(0).matrix_value());

Compatibilità con il linguaggio MATLAB[modifica | modifica wikitesto]

GNU Octave è stato progettato avendo tra gli obiettivi la compatibilità con il linguaggio MATLAB, e infatti esso condivide con MATLAB molte funzionalità:

  1. Le matrici come tipi di dato fondamentali.
  2. Il supporto nativo per i numeri complessi.
  3. Potenti funzioni matematiche native e ampie librerie di funzioni.
  4. Estensibilità, che assume la forma di funzioni definite dall'utente.

Rispetto al linguaggio MATLAB, esiste di proposito un insieme ristretto di differenze :

  1. Le righe di commento possono essere prefisse sia con il carattere # che con il carattere % (quest'ultimo compatibile col linguaggio MATLAB).
  2. Sono supportati vari operatori basati sul linguaggio C: ++, --, +=, *=, /=.
  3. È possibile accedere agli elementi di variabili temporanee (vettori, matrici o array multi-dimensionali) senza dover creare nuove variabili, come ad esempio in [1:10](3).
  4. Le stringhe di testo possono essere definite sia con il carattere " che con il carattere ' (quest'ultimo compatibile col linguaggio MATLAB).

Note[modifica | modifica wikitesto]

  1. ^ About Octave.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Documentazione[modifica | modifica wikitesto]

Librerie e pacchetti numerici che si interfacciano con GNU Octave[modifica | modifica wikitesto]

GNU Octave è potenziato anche da numerosi strumenti e librerie di terze parti, perlopiù in grado di fornire al calcolo scientifico astrazioni generali o specifiche per particolari domini applicativi. Questi strumenti possono essere classificati a seconda che il loro contributo sia più orientato alla modellistica computazionale o al potenziamento dell'analisi visiva dei dati.

Strumenti numerici[modifica | modifica wikitesto]

  • Octave-forge pagina della comunità di sviluppatori – Collezione di tool software resi disponibili come software libero per numerose tipologie di problemi, da sviluppatori indipendenti. Octave-forge fornisce anche un installer per Windows capace di installare sia GNU Octave che i tool software aggiuntivi.
  • Mastrave project – Libreria multi-linguaggio di software libero (coperta da licenza GNU GPLv3+) compatibile con GNU Octave and Matlab, per semplificare la modellistica ambientale con funzioni generali basate sul paradigma del semantic array programming.
  • Neuroimaging Analysis Kit – Libreria (comperta da licenza MIT) per il processamento di dati di neuroimaging usando GNU Octave or Matlab, in particolare immagini di risonanza magnetica funzionale. La libreria include un sistema pipeline per gestire proccessamenti multi-stage.
  • Parallel Matlab Toolbox fornisce un insieme di strutture dati e funzioni in linguaggio MATLAB che implementano array MATLAB distribuiti. È rilasciato con licenza MIT.
  • MPI Toolbox per Octave (MPITB) – Calcolo parallelo per GNU Octave, tramite MPI.

Strumenti grafici[modifica | modifica wikitesto]

  • PLplot – Un'alternativa all'uso del tradizionale gnuplot in GNU Octave, rilasciato sotto la licenza GNU LGPL.
  • OctPlot – Grafica 2D di alta qualità (su schermo e in postscript). Rilasciata sotto GNU GPL.
  • Add-on grafico per GNU Octave – Sistema di visualizzazione 3D per GNU Octave.* Octaviz – Sistema di visualizzazione 3D per GNU Octave (wrapper che rende accessibili le classi VTK dall'interno di GNU Octave). Fornisce anche funzioni di alto livello per la visualizzazione 2D. (Nota: il sito di Octaviz riporta che "sfortunamente, Octaviz non è più attivamente sviluppato. L'ultima release (0.4.7) era usabile e stabile quando compilata con vtk-5.0.")

Interfacce utente[modifica | modifica wikitesto]

Dalla versione 3.8, GNU Octave integra una interfaccia grafica (GUI), attivabile tramite l'opzione --force-gui. Verrà abilitata di default a partire dalla versione 4.0.

Interfacce grafiche alternative[modifica | modifica wikitesto]
  • GUIOctave - GUIOctave implementa una interfaccia grafica per semplificare l'uso di GNU Octave per gli utenti che non sono a loro agio con la versione originale di GNU Octave, basata sulla riga di comando.
  • Kalculus - Interfaccia utente - simile all'ambiente di calcolo MATLAB - funzionante per GNU Octave e Yacas. Scritta in Qt4 con binding a Ruby.
  • Xoctave – Xoctave incapsula GNU Octave usando pipeline e fornisce strumenti addizionali per semplificarne l'uso. L'interfaccia utente è molto simile a quella dell'ambiente di calcolo MATLAB.
  • OctaveNB – Integrazione per GNU Octave in NetBeans IDE. Funzionalità principali: SVN, history locale, diff, progetti multi-lingiaggio.
Interfacce Web[modifica | modifica wikitesto]
  • Editor online LaTeX e GNU Octave - Editor online GNU Octave/Matlab con funzionalita' di plotting e storage.
  • Online access to Octave – Consente di eseguire semplici computazioni online, sfruttando l'interprete di GNU Octave.
  • MathCloud – Consente di condividere script GNU Octave/Matlab e di eseguire computazioni cloud-based.