Vai al contenuto

GNU Octave: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Contenuto cancellato Contenuto aggiunto
Errore generico
Etichette: Modifica da mobile Modifica da web per mobile
EnzoBot (discussione | contributi)
m top: Determinante
Riga 14: Riga 14:
'''GNU Octave''' è un'applicazione software per l'[[analisi numerica]] in gran parte<ref>{{cita web|url=https://www.gnu.org/software/octave/about.html|titolo=About Octave|13-06-2010}}</ref> compatibile con [[MATLAB]].
'''GNU Octave''' è un'applicazione software per l'[[analisi numerica]] in gran parte<ref>{{cita web|url=https://www.gnu.org/software/octave/about.html|titolo=About Octave|13-06-2010}}</ref> compatibile con [[MATLAB]].


Ha un insieme di funzionalità fornite per il calcolo matriciale come [[rango (algebra lineare)|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]].
Ha un insieme di funzionalità fornite per il calcolo matriciale come [[rango (algebra lineare)|rango]] e [[Determinante (algebra)|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 ==
== Storia ==

Versione delle 15:45, 19 gen 2020

GNU Octave
software
Logo
Logo
GNU Octave in esecuzione su un sistema Linux
GNU Octave in esecuzione su un sistema Linux
GNU Octave in esecuzione su un sistema Linux
GenereAnalisi numerica
SviluppatoreJames B. Rawlings, John W. Eaton
Data prima versione1988
Ultima versione9.2.0 (7 giugno 2024)
Sistema operativoGNU
Multipiattaforma
LinguaggioC++
ToolkitQt
LicenzaGNU GPL v3+
(licenza libera)
LinguaMultilingua
Sito weboctave.org

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

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 pubblicata è datata 4 gennaio 1993 e il 17 febbraio 1994 fu distribuita la versione 1.0. La versione 3.0 è stata distribuita il 21 dicembre 2007.

Dettagli tecnici

  • 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

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 è distribuito sotto licenza GPL, e quindi può essere liberamente copiato e usato. Il programma gira sotto sistemi Unix e Linux, oltre che su Windows e macOS.

Funzionalità distintive

Completamento automatico dei comandi e dei nomi delle variabili

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

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

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)

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

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

Unwind-protect

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

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

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++

È 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

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

  1. ^ About Octave, su gnu.org.

Voci correlate

Altri progetti

Collegamenti esterni

Documentazione

Librerie e pacchetti numerici che si interfacciano con GNU Octave

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

  • 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. È pubblicato con licenza MIT.
  • MPI Toolbox per Octave (MPITB) – Calcolo parallelo per GNU Octave, tramite MPI.

Strumenti grafici

  • PLplot – Un'alternativa all'uso del tradizionale gnuplot in GNU Octave, distribuito sotto la licenza GNU LGPL.
  • OctPlot – Grafica 2D di alta qualità (su schermo e in postscript). Pubblicata 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

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
  • 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[collegamento interrotto] – Integrazione per GNU Octave in NetBeans IDE. Funzionalità principali: SVN, history locale, diff, progetti multi-linguaggio.
Interfacce Web
  • Editor online LaTeX e GNU Octave - Editor online GNU Octave/Matlab con funzionalità 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.
Controllo di autoritàVIAF (EN311460411 · LCCN (ENn2014066619 · GND (DE102265487X · BNF (FRcb17876808c (data) · J9U (ENHE987009957423905171